diff --git a/compose.prod.yaml b/compose.prod.yaml new file mode 100644 index 0000000..fcfee80 --- /dev/null +++ b/compose.prod.yaml @@ -0,0 +1,5 @@ +services: + app: + command: npm run start + environment: + - NODE_ENV=production \ No newline at end of file diff --git a/compose.production.yaml b/compose.production.yaml deleted file mode 100644 index 86df873..0000000 --- a/compose.production.yaml +++ /dev/null @@ -1,3 +0,0 @@ -services: - app: - command: npm run start \ No newline at end of file diff --git a/readme.md b/readme.md index 62acc57..ae3e23d 100644 --- a/readme.md +++ b/readme.md @@ -1,12 +1,12 @@ # Bot discord du Duck-parapente -Bot utilisant l'API **discord.js** pour intéragir avec le [serveur discord du Duck](https://discord.gg/2Nh3A8vc). +Bot utilisant l'API [discord.js](https://discord.js.org/) pour intéragir avec le [serveur discord du Duck](https://discord.gg/2Nh3A8vc). Projet bénévole porté par les membres du club. ## Usage ### Commandes disponibles -- `/archive` - déplace le salon dans le bon dossier ARCHIVES. Créé un nouveau dossier ARCHIVES si besoin. +- `/archive` - déplace le salon dans le bon dossier 📁ARCHIVES. Créé un nouveau dossier 📁ARCHIVES si besoin. - `/balise` - affiche les dernières valeurs et directions de vent autour de Grenoble. Source : [murblanc.org/sthil](https://murblanc.org/sthil) @@ -19,7 +19,7 @@ Projet bénévole porté par les membres du club. - Fonction qui manipule les rôles des membres pour afficher certains salons uniquement aux membres ayant cotisé au club pour l'année en cours - Améliorer la commande `/archive` pour qu'elle transforme le salon en thread dans un unique salon `archives`, nous permettant alors de garder l'historique des sorties ad vitam aeternam (@Romain.L ?) - Fonction de covoiturage (@JP.DS ?) -- Commande /notam pour afficher toutes les NOTAM en cours entre 2 points GPS +- Commande `/notam` pour afficher toutes les NOTAM en cours entre 2 points GPS Autres idées : - Ajouter un webhook qui notifie la création d'un nouvel article sur le site du Duck @@ -29,34 +29,14 @@ Autres idées : ### Prérequis -- Node.js v21.7.3 ou plus récent. -- NPM v6 ou plus récent. +- Installer docker et docker-compose - Créer un fichier `.env` à la racine en suivant cet exemple : ```bash -BOT_TOKEN=Token_du_bot -GUILD_ID=ID_du_serveur -CHROMIUM_PATH=/bin/chromium-browser +GUILD_ID=ID_DU_SERVEUR +BOT_TOKEN=TOKEN_DU_BOT ``` ### CLI ```bash -# installer les dépendances npm -npm i -# run bot -node . -``` - -PS: Pour utiliser certaines commandes (comme `/balise`) il est nécessaire d'installer Chromium (nécessaire pour Puppeteer). Il faut ensuite indiquer le chemin vers l'éxécutable dans le fichier .env (car différent selon les distrubtions Linux). Voir l'exemple de fichier `.env` ci-dessus. - -Debian -``` -sudo apt update -sudo apt install chromium -``` -Ubuntu -``` -sudo apt-get update -sudo apt-get install chromium-browser -``` - -Enfin, j'ai bloqué le package puppeteer à la version 15, les versions plus récentes ne marchent pas sur Debian. +docker compose up --build +``` \ No newline at end of file diff --git a/src/events/commands/archive.js b/src/events/commands/archive.js index 16c67dd..bb78309 100644 --- a/src/events/commands/archive.js +++ b/src/events/commands/archive.js @@ -13,6 +13,7 @@ const create = () => { // Called by the interactionCreate event listener when the corresponding command is invoked const invoke = async (interaction) => { + console.log(`${interaction.user.username} used /archive`); const allowedCategories = ['🪂 SORTIES', '🏃Sorties pas rapente', '🏆 Compétitions']; diff --git a/src/events/commands/balise.js b/src/events/commands/balise.js index 3fb93d4..7f4d17a 100644 --- a/src/events/commands/balise.js +++ b/src/events/commands/balise.js @@ -11,6 +11,7 @@ const create = () => { }; const invoke = async (interaction) => { + console.log(`${interaction.user.username} used /balise`); interaction.deferReply(); const image = await getScreenhot('table table tbody'); diff --git a/src/events/ready.js b/src/events/ready.js index cb3621c..00f518e 100644 --- a/src/events/ready.js +++ b/src/events/ready.js @@ -25,7 +25,7 @@ async function invoke(client) { client.application.commands.set(commandsArray); - console.log(`Successfully logged in as ${client.user.tag}!`); + console.log(`Successfully logged to Discord as ${client.user.tag}!`); } export { once, name, invoke }; diff --git a/src/jobs/serverStats.js b/src/jobs/serverStats.js index 0eed071..509f585 100644 --- a/src/jobs/serverStats.js +++ b/src/jobs/serverStats.js @@ -1,8 +1,8 @@ import { EmbedBuilder } from 'discord.js'; export async function serverStats(client) { - const guild = client.guilds.cache.get(process.env.GUILD_ID); - + const guild = client.guilds.cache.get(process.env.GUILD_ID); + // fetch members first, otherwise guild.roles.cache.get('1232623387965132820').members.size will be empty let members = await guild.members.fetch(); const time = (new Date).toLocaleString( @@ -51,11 +51,12 @@ export async function serverStats(client) { const statsChannel = client.channels.cache.find(channel => channel.name === 'stats'); let messages = await statsChannel.messages.fetch({ limit: 1 }); - + // Create or edit existing embed if (messages.size === 0) { statsChannel.send({embeds: [embed]}); } else { messages.first().edit({embeds: [embed]}); } ; + console.log('Server stats updated'); }