Skip to content
This repository has been archived by the owner on Sep 1, 2022. It is now read-only.

TanguyChiffoleau/Le-bot-en-JS

Repository files navigation

Le-bot-en-JS

Release

Table des matières

À propos

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.

Discord entraide

Mise en place du bot

Création du bot

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").

Invitation du bot

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.

Setup en production

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

Setup avec Node.js

Prérequis

  1. 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.

  2. Téléchargez le code de l'application sur votre machine. cf. Télécharger le code de l'application sur votre machine

  3. 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.

  4. Renommez le fichier bot.example.env en bot.env, puis modifiez les variables d'environnement pour que l'application fonctionne correctement. cf. Variables d'environnement

  5. Renommez le fichier reactionRoleConfig.example.json en reactionRoleConfig.json, puis modifiez son contenu pour que le système fonctionne correctement. cf. Variables d'environnement

  6. Renommez le fichier banEmotesAtJoin.example.json en banEmotesAtJoin.json, puis modifiez son contenu pour que le système fonctionne correctement. cf. Variables d'environnement

Lancement et arrêt de l'application

  • 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

Setup dans un container avec Docker et Docker Compose

Prérequis

  1. Il est nécessaire d'avoir Docker ainsi que Docker Compose d'installé.

    Utilisez les commandes docker -v et docker-compose -v pour vérifier que les deux applications soient bien installées.

  2. Créez les fichiers bot.env, reactionRoleConfig.json et banEmotesAtJoin.json dans le dossier config ainsi que le fichier docker-compose.yml dans le dossier docker :

    mdkir config
    cd config
    touch bot.env reactionRoleConfig.json banEmotesAtJoin.json
    cd ..
    mkdir docker
    touch docker-compose.yml

La structure des dossiers et fichiers devrait ressembler à ça :

.
├── config
│   ├── bot.env
│   ├── reactionRoleConfig.json
│   └── banEmotesAtJoin.json
└── docker
	  └── docker-compose.yml

Lancement de l'application

  • Vous pouvez utiliser les commandes docker pull tanguychiffoleau/le-bot-en-js:latest puis docker-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 exemple 2.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.

Arrêt de l'application

  • Vous pouvez utiliser la commande docker-compose -f ./docker/docker-compose.yml stop pour stopper le container. Pour le supprimer, utilisez la commande docker-compose -f ./docker/docker-compose.yml down.

Ressources

Télécharger le code de l'application sur votre machine

Vous pouvez télécharger le code de l'application sur votre machine

télécharger le code source

Variables d'environnement

Le bot repose sur les variables d'environnement pour pouvoir fonctionner.

Fichier bot.env

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

Fichier reactionRoleConfig.json

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 :

[]

Fichier banEmotesAtJoin.json

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"]
]
  • Pour récupérer les émojis :
    • unicode : mettre un \ avant l'émoji. Exemple : pour :white_check_mark:, l'émoji unicode est . emoji_unicode

    • personnalisés : mettre un \ avant l'émoji et récupérer l'ID. Exemple : pour \<:lul:719519281682972703>, l'ID est 719519281682972703. emoji_custom

Contribuer

Regardez le guide de contribution si vous voulez soumettre une pull request.