Le-bot-en-JS est un bot Discord open-source codé en JS conçu principalement et spécialement pour le serveur Discord Entraide Informatique - Capet & CTRL-F.
Cliquez ici pour accéder à un tutoriel (en anglais) tiré du guide officiel de Discord.js pour créer votre bot.
Une fois le bot créé, dans la section "Bot", il faudra activer l'intent privilégié "SERVER MEMBERS INTENT". Si votre bot n'est pas vérifié, il faut simplement activer le bouton. Sinon, voici quelques ressources pour activer les intents : Discords FAQ, Discord Support.
Une fois votre application et bot créés, vous devez récupérer le token du bot ("TOKEN") ainsi que l'ID de l'application ("APPLICATION ID").
Pour inviter le bot sur un serveur, il faut créer un lien d'invitation. Il est nécessaire d'avoir l'ID du client. Voici le lien type utilisé pour ce bot : https://discord.com/oauth2/authorize?client_id=INSERT_CLIENT_ID_HERE&scope=bot%20applications.commands&permissions=419540176
.
Remplacez
INSERT_CLIENT_ID_HERE
par l'ID de votre application.
permissions=419540176
correspond aux permissions d'invitation du bot. Vous pouvez modifier le code des permissions avec un calculateur de permissions.419540176
accorde au bot les permissions suivantes : Manage Channels, Manage Roles, View Audit Log, Manage Nicknames, Read Messages, Send Messages, Attach Files, Add Reactions, Manage Messages, Read Message History, View Channel, Move Members. Veuillez noter qu'il est nécessaire d'avoir l'authentification à deux facteurs activée sur le compte du propriétaire du bot pour utiliser les permissions suivantes : Manage Channels, Manage Roles, Manage Messages.
L'application est capable de tourner sous plusieurs environnements :
- n'importe quel environnement avec Node.js d'installé
- dans un container Docker avec Docker Compose
-
Il est nécessaire d'avoir Node.js 16.6.0 ou plus récent d'installé sur votre machine.
Utilisez la commande
node -v
pour vous assurez que Node est bien installé et que sa version est suffisante.À titre indicatif, l'application tourne sous Node.js v14.16.0 en production.
-
Téléchargez le code de l'application sur votre machine. cf. Télécharger le code de l'application sur votre machine
-
Il faut au préalable installer les dépendances de l'application avant de lancer celle-ci en utilisant la commande
npm i
.Toutes les dépendances vont être installées, y compris celles prévues pour les développeurs, car le package dotenv est nécessaire. Ci toutefois vous avez appliqué les variables d'environnement à l'application par vos propres moyens, seule la commande
npm i --production
est nécessaire. -
Renommez le fichier
bot.example.env
enbot.env
, puis modifiez les variables d'environnement pour que l'application fonctionne correctement. cf. Variables d'environnement -
Renommez le fichier
reactionRoleConfig.example.json
enreactionRoleConfig.json
, puis modifiez son contenu pour que le système fonctionne correctement. cf. Variables d'environnement -
Renommez le fichier
banEmotesAtJoin.example.json
enbanEmotesAtJoin.json
, puis modifiez son contenu pour que le système fonctionne correctement. cf. Variables d'environnement
-
Vous pouvez utiliser
npm start
pour lancer l'application. -
Vous pouvez utiliser la combinaison de touches Ctrl+C ou fermer la fenêtre de commandes pour tuer l'application.
Vous pouvez utiliser un gestionnaire d'application comme PM2 pour faciliter la gestion de l'application. cf. Managing your bot process with PM2
-
Il est nécessaire d'avoir Docker ainsi que Docker Compose d'installé.
Utilisez les commandes
docker -v
etdocker-compose -v
pour vérifier que les deux applications soient bien installées. -
Créez les fichiers
bot.env
,reactionRoleConfig.json
etbanEmotesAtJoin.json
dans le dossierconfig
ainsi que le fichierdocker-compose.yml
dans le dossierdocker
:mdkir config cd config touch bot.env reactionRoleConfig.json banEmotesAtJoin.json cd .. mkdir docker touch docker-compose.yml
-
Configurez le fichier
bot.env
en ajoutant les variables d'environnement pour que l'application fonctionne correctement. cf. Variables d'environnement -
Configurez le fichier
reactionRoleConfig.json
, puis modifiez le fichier pour que le système fonctionne correctement. cf. Configuration du sytème de réaction/rôles -
Configurez le fichier
banEmotesAtJoin.json
, puis modifiez le fichier pour que le système fonctionne correctement. cf. Configuration du sytème de réaction/rôles -
Copiez le contenu du fichier docker/docker-compose.yml dans le fichier du même emplacement sur votre machine. Il correspond au fichier de configuration pour
docker-compose
.
-
La structure des dossiers et fichiers devrait ressembler à ça :
. ├── config │ ├── bot.env │ ├── reactionRoleConfig.json │ └── banEmotesAtJoin.json └── docker └── docker-compose.yml
- Vous pouvez utiliser les commandes
docker pull tanguychiffoleau/le-bot-en-js:latest
puisdocker-compose -f ./docker/docker-compose.yml up -d
pour lancer l'application.
docker pull va télécharger ou mettre à jour si besoin l'image de l'application hébergée sur Docker Hub. Le tag ici est
latest
ce qui correspond, de fait, au code présent sur la branche master. Vous pouvez spécifier une version spécifique comme par exemple2.0.0
. cf. liste des tags disponibles ainsi que leur version correspondante
docker-compose va lancer le container avec les règles définies dans
docker-compose.yml
.
Pour plus d'infos sur les technologies liées à Docker utilisées ici, vous pouvez consulter leur documentation ou leur manuel.
- Vous pouvez utiliser la commande
docker-compose -f ./docker/docker-compose.yml stop
pour stopper le container. Pour le supprimer, utilisez la commandedocker-compose -f ./docker/docker-compose.yml down
.
Télécharger le code de l'application sur votre machine
Vous pouvez télécharger le code de l'application sur votre machine
- en clonant le repository
- ou en téléchargeant le code source
Variables d'environnement
Le bot repose sur les variables d'environnement pour pouvoir fonctionner.
Exemple disponible ici :
DISCORD_TOKEN="DISCORD-SECRET-BOT-TOKEN" COMMANDS_PREFIX="!" TIMEZONE="Europe/Paris" GUILD_ID="123456789012345678" LEAVE_JOIN_CHANNEL_ID="123456789012345678" REPORT_CHANNEL="123456789012345678" LOGS_MESSAGES_CHANNEL="123456789012345678" LOGS_BANS_CHANNEL="123456789012345678" JOIN_ROLE_ID="123456789012345678" TIMEOUT_JOIN="30m" CONFIG_CHANNEL_ID="123456789012345678" UPGRADE_CHANNEL_ID="123456789012345678" BLABLA_CHANNEL_ID="123456789012345678" RICH_PRESENCE_TEXT="Texte de présence" VOICE_MANAGER_CHANNELS_IDS=123456789012345678, 123456789012345678, 123456789012345678 NOLOGS_MANAGER_CHANNELS_IDS=123456789012345678, 123456789012345678, 123456789012345678 NOTEXT_MANAGER_CHANNELS_IDS=123456789012345678, 123456789012345678, 123456789012345678
Variable | Description |
---|---|
DISCORD_TOKEN | Token secret du bot Discord |
COMMANDS_PREFIX | Préfixe utilisé pour intéragir avec le bot |
TIMEZONE | Fuseau horaire utilisé pour le formatage des dates. Variable optionnelle, prenda par défaut le fuseau horaire du système. Format UTC ou format IANA de fuseaux horaires |
GUILD_ID | ID du serveur (= guild) sur lequel le bot est utilisé |
LEAVE_JOIN_CHANNEL_ID | ID du salon dans lequel seront postés les messages de départ/arrivée |
REPORT_CHANNEL | ID du salon dans lequel seront postés les messages de signalement |
LOGS_MESSAGES_CHANNEL | ID du salon dans lequel seront postés les logs de messages |
LOGS_BANS_CHANNEL | ID du salon dans lequel seront postés les logs de bans |
JOIN_ROLE_ID | ID du rôle d'arrivée sur le serveur |
TIMEOUT_JOIN | Délai de retrait du rôle d'arrivée. Format respectant la librairie ms npmjs |
CONFIG_CHANNEL_ID | ID du salon utilisé pour diriger les formulaires de config en DM vers le bon channel |
UPGRADE_CHANNEL_ID | ID du salon utilisé pour diriger les formulaires d'upgrade en DM vers le bon channel |
BLABLA_CHANNEL_ID | ID du salon de chat général |
RICH_PRESENCE_TEXT | Texte de présence du bot |
VOICE_MANAGER_CHANNELS_IDS | ID des salons vocaux utilisés pour le système de vocaux personnalisés. Les ID doivent être séparés par une virgule |
NOLOGS_MANAGER_CHANNELS_IDS | ID des salons dont les messages ne doivent pas être loggés. Les ID doivent être séparés par une virgule |
NOTEXT_MANAGER_CHANNELS_IDS | ID des salons dont les messages doivent comporter au moins un attachement (vidéo, photo...) pour ne pas êtres supprimés. Les ID doivent être séparés par une virgule |
Pour pouvoir récupérer les identifiants (ID) sur Discord, il faut activer le mode développeur.
Configuration du sytème de réaction/rôles
Exemple disponible ici :
[ { // Salon n°1 "channelID": "123456789123456789", "messageArray": [ // Message n°1 { // ID du message "messageID": "123456789123456789", // Émoji unicode en clé, objet avec "id" en valeur "emojiRoleMap": { "💸": { "id": "123456789123456789" }, "🔧": { "id": "123456789123456789" } } }, // Message n°2 { // ID du message "messageID": "123456789123456789", // Émoji unicode en clé, objet avec "id" et giveJoinRole en valeur "emojiRoleMap": { "🥵": { "id": "123456789123456789" }, "✅": { "id": "123456789123456789", "giveJoinRole": true } } } ] }, { "channelID": "123456789123456789", "messageArray": [ { "messageID": "123456789123456789", "emojiRoleMap": { "123456789123456789": { "id": "123456789123456789" }, "987654321987654321": { "id": "123456789123456789" } } }, { "messageID": "123456789123456789", "emojiRoleMap": { "123456789123456789": { "id": "123456789123456789" }, "987654321987654321": { "id": "123456789123456789", "giveJoinRole": true } } } ] } ]
Pour pouvoir récupérer les identifiants (ID) sur Discord, il faut activer le mode développeur.
Pour désactiver le système, le fichier doit être composé d'un tableau (array) vide :
[]
Exemple disponible ici :
[ // Réaction sous forme d'émoji unicode ou son ID, texte de raison ["🔨", "Reason 1"], ["🧹", "Reason 2"], ["123456789123456789", "Reason 3"], ["123456789123456789", "Reason 4"] ]
Regardez le guide de contribution si vous voulez soumettre une pull request.