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
|
- 0.3.1 : ajout de db (retention de setting) et maj des dependences
|
||||||
- 1.0.0 : ca marche via vs code
|
- 1.0.0 : ca marche via vs code
|
||||||
- 1.1.0 : fix sur lxc
|
- 1.1.0 : fix sur lxc
|
||||||
|
- 2.0.0 : ajout des fun facts
|
||||||
|
|
||||||
## run
|
## run
|
||||||
|
|
||||||
- npm i
|
- npm i
|
||||||
|
- node deployCommands.js
|
||||||
- node index.js
|
- node index.js
|
||||||
|
- pm2 start deployCommands.js
|
||||||
- pm2 start index.js
|
- pm2 start index.js
|
||||||
- pm2 save
|
- 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 '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';
|
import firstDetector from './detectors/allDetector.js';
|
||||||
|
|
||||||
|
|
||||||
|
// --- Configuration Client et Intents ---
|
||||||
const client = new Client({
|
const client = new Client({
|
||||||
makeCache: Options.cacheWithLimits({
|
makeCache: Options.cacheWithLimits({
|
||||||
MessageManager: 5, // opti de RAM mais 0 est trop agressif
|
MessageManager: 5, // opti de RAM mais 0 est trop agressif
|
||||||
ThreadManager: 0, // peut rester a 0 car peu utilisé
|
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,
|
// UserManager: 0,
|
||||||
//ThreadManager: 0,
|
//ThreadManager: 0,
|
||||||
|
// commentées pour laisser par défaut, pas d'impact vu la RAM dispo
|
||||||
|
|
||||||
}),
|
}),
|
||||||
intents: [
|
intents: [
|
||||||
GatewayIntentBits.Guilds,
|
GatewayIntentBits.Guilds,
|
||||||
GatewayIntentBits.GuildMessages,
|
GatewayIntentBits.GuildMessages,
|
||||||
GatewayIntentBits.MessageContent,
|
GatewayIntentBits.MessageContent, // required pour les détecteurs
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('messageCreate', async (message) => {
|
// --- Gestion des Événements ---
|
||||||
// DEBUG : Vérifie si le message arrive bien
|
|
||||||
console.log(`[DEBUG] Message reçu de ${message.author?.tag}: ${message.content}`);
|
|
||||||
|
|
||||||
|
// 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;
|
if (message.author.bot) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
@ -31,8 +61,6 @@ client.on('messageCreate', async (message) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
client.login(process.env.DISCORD_TOKEN);
|
|
||||||
|
|
||||||
client.on(Events.ClientReady, () => {
|
// --- connexion ---
|
||||||
console.log(`[SUCCESS] Logged in as ${client.user?.tag}`); //check co Discord
|
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