implement fun facts
This commit is contained in:
parent
a8fa55d5d0
commit
2962784d70
6 changed files with 96 additions and 10 deletions
|
|
@ -15,10 +15,13 @@ réponses troll et fun facts
|
|||
- 0.3.1 : ajout de db (retention de setting) et maj des dependences
|
||||
- 1.0.0 : ca marche via vs code
|
||||
- 1.1.0 : fix sur lxc
|
||||
- 2.0.0 : ajout des fun facts
|
||||
|
||||
## run
|
||||
|
||||
- npm i
|
||||
- node deployCommands.js
|
||||
- node index.js
|
||||
- pm2 start deployCommands.js
|
||||
- pm2 start index.js
|
||||
- pm2 save
|
||||
5
facts/funFacts.js
Normal file
5
facts/funFacts.js
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
[
|
||||
"Les loutres se tiennent la main quand elles dorment.",
|
||||
"Le miel ne se périme jamais.",
|
||||
"Les bananes sont radioactives (très légèrement).",
|
||||
]
|
||||
8
facts/randomizer.js
Normal file
8
facts/randomizer.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
import { createRequire } from "module";
|
||||
const require = createRequire(import.meta.url);
|
||||
|
||||
export function getFunFact() {
|
||||
const facts = require("funfacts.json");
|
||||
const randomFact = facts[Math.floor(Math.random() * facts.length)];
|
||||
return randomFact;
|
||||
}
|
||||
48
index.js
48
index.js
|
|
@ -1,26 +1,56 @@
|
|||
import 'dotenv/config';
|
||||
import { Client, GatewayIntentBits, Options, Events } from 'discord.js';
|
||||
import fs from 'fs';
|
||||
import { Client, GatewayIntentBits, Options, Events, Collection } from 'discord.js';
|
||||
import firstDetector from './detectors/allDetector.js';
|
||||
|
||||
|
||||
// --- Configuration Client et Intents ---
|
||||
const client = new Client({
|
||||
makeCache: Options.cacheWithLimits({
|
||||
MessageManager: 5, // opti de RAM mais 0 est trop agressif
|
||||
ThreadManager: 0, // peut rester a 0 car peu utilisé
|
||||
// commentées pour laisser par défaut, pas d'impact vu la RAM dispo
|
||||
// UserManager: 0,
|
||||
//ThreadManager: 0,
|
||||
// commentées pour laisser par défaut, pas d'impact vu la RAM dispo
|
||||
|
||||
}),
|
||||
intents: [
|
||||
GatewayIntentBits.Guilds,
|
||||
GatewayIntentBits.GuildMessages,
|
||||
GatewayIntentBits.MessageContent,
|
||||
GatewayIntentBits.MessageContent, // required pour les détecteurs
|
||||
]
|
||||
});
|
||||
|
||||
client.on('messageCreate', async (message) => {
|
||||
// DEBUG : Vérifie si le message arrive bien
|
||||
console.log(`[DEBUG] Message reçu de ${message.author?.tag}: ${message.content}`);
|
||||
// --- Gestion des Événements ---
|
||||
|
||||
// 1. login réussi
|
||||
client.on(Events.ClientReady, () => {
|
||||
console.log(`[SUCCESS] Logged in as ${client.user?.tag}`);
|
||||
});
|
||||
|
||||
// 2. gestion des commandes slash
|
||||
client.on(Events.InteractionCreate, async interaction => {
|
||||
// check que ça soit bien commande slash
|
||||
if (!interaction.isChatInputCommand()) return;
|
||||
|
||||
const command = client.commands.get(interaction.commandName);
|
||||
if (!command) return;
|
||||
|
||||
try {
|
||||
await command.execute(interaction);
|
||||
} catch (error) {
|
||||
console.error('Erreur exécution commande slash:', error);
|
||||
// message d'erreur (si besoin), montré qu'à l'auteur
|
||||
if (interaction.replied || interaction.deferred) {
|
||||
await interaction.followUp({ content: 'Erreur lors de l’exécution de la commande !', ephemeral: true });
|
||||
} else {
|
||||
await interaction.reply({ content: 'Erreur lors de l’exécution de la commande !', ephemeral: true });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 3. Gestion des Messages (Détecteurs Passifs)
|
||||
client.on('messageCreate', async (message) => {
|
||||
if (message.author.bot) return;
|
||||
|
||||
try {
|
||||
|
|
@ -31,8 +61,6 @@ client.on('messageCreate', async (message) => {
|
|||
}
|
||||
});
|
||||
|
||||
client.login(process.env.DISCORD_TOKEN);
|
||||
|
||||
client.on(Events.ClientReady, () => {
|
||||
console.log(`[SUCCESS] Logged in as ${client.user?.tag}`); //check co Discord
|
||||
});
|
||||
// --- connexion ---
|
||||
client.login(process.env.DISCORD_TOKEN);
|
||||
16
utils/commands.js
Normal file
16
utils/commands.js
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import { SlashCommandBuilder } from 'discord.js';
|
||||
import { getRandomFact } from '../utils/factRandomizer.js';
|
||||
|
||||
export default {
|
||||
// définition de la commande pour Discord
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('funfact') // correspondra à /funfact
|
||||
.setDescription('Donne un fait aléatoire et inutile'),
|
||||
|
||||
// action
|
||||
async execute(interaction) {
|
||||
const fact = getRandomFact();
|
||||
// interaction.reply plutôt que message.reply
|
||||
await interaction.reply(`💡 **Fun fact : **\n${fact}`);
|
||||
}
|
||||
};
|
||||
26
utils/deployCommands.js
Normal file
26
utils/deployCommands.js
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import 'dotenv/config';
|
||||
import { REST, Routes } from 'discord.js';
|
||||
import fs from 'fs';
|
||||
|
||||
const commands = [];
|
||||
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
|
||||
|
||||
for (const file of commandFiles) {
|
||||
const command = await import(`./commands/${file}`);
|
||||
commands.push(command.default.data.toJSON());
|
||||
}
|
||||
|
||||
const rest = new REST().setToken(process.env.DISCORD_TOKEN);
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
console.log('Enregistrement des commandes slash...');
|
||||
await rest.put(
|
||||
Routes.applicationCommands(process.env.CLIENT_ID),
|
||||
{ body: commands },
|
||||
);
|
||||
console.log('Commandes enregistrées ! Tape /funfact sur Discord.');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue