Fermer

février 25, 2021

Construire un robot Discord avec Discord.js


À propos de l'auteur

Subha est un développeur Web indépendant et un apprenant toujours passionné par l'apprentissage et l'expérimentation de nouvelles choses. Il adore écrire sur sa nouvelle…
En savoir plus sur
Subha

Une introduction à la construction d'un bot Discord à l'aide du module Discord.js. Le bot partagera des blagues aléatoires, attribuera ou révoquera des rôles d'utilisateur et publiera des tweets d'un compte spécifique sur un canal Discord.

Les plates-formes de communication d'équipe deviennent de jour en jour populaires, car de plus en plus de personnes travaillent à domicile. Slack et Discord sont deux des plates-formes de communication d'équipe les plus populaires. Bien que Discord soit axé sur les joueurs, certaines fonctionnalités, telles que la possibilité d'ajouter jusqu'à 50 membres dans la salle d'appel vocal, en font une excellente alternative à Slack. L'un des avantages les plus importants de l'utilisation d'une telle plate-forme est que de nombreuses tâches peuvent être automatisées à l'aide de bots.

Dans cet article, nous allons créer un bot à partir de zéro en utilisant JavaScript et avec l'aide de Discord.js. Nous couvrirons le processus, de la création du bot à son déploiement dans le cloud. Avant de créer notre bot, notons les fonctionnalités dont aura besoin notre bot:

  • Partagez des blagues aléatoires à partir d'un tableau de blagues.
  • Ajoutez et supprimez des rôles d'utilisateur en sélectionnant emoji.
  • Partagez des tweets d'un compte particulier vers

Comme le module Discord.js est basé sur Node.js, je suppose que vous êtes un peu familier avec Node.js et npm. La connaissance de JavaScript est indispensable pour cet article.

Maintenant que nous connaissons les conditions préalables et notre objectif, commençons. Et si vous voulez cloner et explorer le code tout de suite, vous pouvez avec le dépôt GitHub .

Étapes à suivre

Nous allons construire le bot en suivant quelques étapes.

Tout d'abord, nous allons créer un serveur Discord . Un serveur Discord est comme un groupe dans lequel vous pouvez attribuer divers sujets à différents canaux, très similaire à un serveur Slack. Une différence majeure entre Slack et Discord est que Slack nécessite des informations de connexion différentes pour accéder à différents serveurs, alors que dans Discord, vous pouvez accéder à tous les serveurs dont vous faites partie avec une seule authentification.

La raison pour laquelle nous devons créer un serveur est-ce que, sans privilèges d'administrateur pour un serveur, nous ne pourrons pas ajouter un bot au serveur. Une fois notre serveur créé, nous ajouterons le bot au serveur et obtiendrons le jeton d'accès depuis le portail des développeurs de Discord. Ce jeton nous permet de communiquer avec l'API Discord. Discord fournit une API ouverte officielle avec laquelle nous pouvons interagir. L'API peut être utilisée pour tout, du traitement des demandes de bots à l'intégration d'OAuth. L'API prend en charge tout, d'un bot à serveur unique à un bot pouvant être intégré sur des centaines de serveurs. Il est très puissant et peut être implémenté de nombreuses façons.

La bibliothèque Discord.js nous aidera à communiquer avec l'API Discord en utilisant le jeton d'accès . Toutes les fonctions seront basées sur l'API Discord. Ensuite, nous pouvons commencer à coder notre bot. Nous commencerons par écrire de petits morceaux de code qui nous présenteront l'API Discord et la bibliothèque Discord.js. Nous comprendrons alors le concept de partiels dans Discord.js. Une fois que nous aurons compris les partiels, nous ajouterons ce que l'on appelle un système de "rôle de réaction" au bot. Cela fait, nous saurons également comment communiquer avec Twitter en utilisant un package npm appelé twit . Ce package npm nous aidera à intégrer la fonctionnalité de transfert de tweet Twitter. Enfin, nous allons le déployer sur le cloud en utilisant Heroku.

Maintenant que nous savons comment nous allons construire notre bot, commençons à travailler dessus.

Construire un serveur Discord

La première chose à faire faire est créer un serveur Discord . Sans serveur avec des privilèges d'administrateur, nous ne pourrons pas intégrer le bot.

La création d'un serveur Discord est facile et Discord fournit désormais des modèles, ce qui le rend encore plus facile. Suivez les étapes ci-dessous et votre serveur Discord sera prêt. Tout d'abord, nous choisirons comment nous allons accéder au portail Discord. Nous pouvons utiliser la version Web ou l'application. Les deux fonctionnent de la même manière. Nous utiliserons la version Web pour ce didacticiel.

Si vous lisez cet article, je suppose que vous possédez déjà un compte Discord. Sinon, créez simplement un compte comme vous le feriez sur n'importe quel autre site Web. Cliquez sur le bouton «Connexion» en haut à droite et connectez-vous si vous avez un compte, ou cliquez sur le bouton «S'inscrire». Remplissez le formulaire simple, remplissez le Captcha et vous aurez créé un compte avec succès. Après avoir ouvert l'application ou le site Web Discord, cliquez sur l'icône plus sur le côté gauche, où se trouve la liste des serveurs. Lorsque vous cliquez dessus, vous serez invité à choisir un modèle ou à créer le vôtre.

 Création d'un serveur à partir d'un modèle ou à partir de zéro dans Discord
Création d'un serveur dans Discord ( Grand aperçu ])

Nous choisirons l'option «Créer moi-même». Passons à la question suivante. Nous appellerons notre serveur Discord "Smashing Example". Vous pouvez également fournir une photo pour votre serveur. Cliquez sur le bouton «Créer» pour créer votre serveur.

Enregistrement du bot avec Discord

Avant de coder le bot, nous devons obtenir un jeton fourni par Discord . Ce jeton établira une connexion de notre code à Discord. Pour obtenir le jeton, nous devons enregistrer notre bot sur notre serveur. Pour enregistrer le bot, nous devons visiter le portail des développeurs de Discord . Si vous créez une application Discord pour la première fois, vous y trouverez une liste vide. Pour enregistrer notre application, cliquez sur le lien «Nouvelle application» dans le coin supérieur droit. Donnez un nom à votre application et cliquez sur le bouton «Créer». Nous nommerons notre application «Smashing App».

Ajout d'une nouvelle application au portail des développeurs Discord

Le nouveau menu nous offre quelques options. Sur le côté droit se trouve une option intitulée «Bot». Cliquez dessus et sélectionnez "Ajouter un robot". Cliquez sur la confirmation, modifiez le nom du bot si vous le souhaitez, enregistrez les modifications et copiez le jeton reçu depuis cette page. Notre bot est maintenant enregistré avec Discord. Nous pouvons commencer à ajouter des fonctionnalités et à coder le bot.

Construire le bot

Qu'est-ce que Discord.js?

Discord.js se définit comme ceci:

Discord.js est un nœud puissant. js qui vous permet d'interagir très facilement avec l'API Discord. Il adopte une approche beaucoup plus orientée objet que la plupart des autres bibliothèques JS Discord, ce qui rend le code de votre bot nettement plus ordonné et plus facile à comprendre.

Discord.js facilite donc les interactions avec l'API Discord. Il a une couverture à 100% avec l'API Discord officielle.

Initialisation du bot

Ouvrez votre éditeur de texte préféré et créez un dossier dans lequel tous vos fichiers seront enregistrés. Ouvrez l'interface de ligne de commande (CLI), cd dans le dossier et initialisez le dossier avec npm: npm init -y .

Nous aurons besoin de deux paquets pour commencer à construire le bot. Le premier est dotenv, et le second, évidemment, est le module Discord.js Node.js. Si vous connaissez Node.js, vous serez familiarisé avec le package dotenv. Il charge les variables d'environnement d'un fichier nommé .env à process.env .

Installez ces deux en utilisant npm i dotenv discord.js .

] Une fois l'installation terminée, créez deux fichiers dans votre dossier racine. Nommez l'un des fichiers .env . Nommez l'autre fichier principal comme vous le souhaitez. Je vais l'appeler app.js . La structure des dossiers ressemblera à ceci:

 │ .env
│ app.js
│ package-lock.json
│ package.json
└─── node_modules

Nous stockerons les jetons et autres informations sensibles dans le fichier .env et le code qui produit les résultats dans le fichier app.js .

Ouvrez le .env et créez une nouvelle variable. Appelons la variable BOT_TOKEN pour cet exemple. Collez votre jeton dans ce fichier. Le fichier .env ressemblera à ceci maintenant:

 BOT_TOKEN = ODAxNzE1NTA2Njc1NDQ5ODY3.YAktvw.xxxxxxxxxxxxxxxxxxxxxxxx

Nous pouvons commencer à travailler sur le fichier app.js . La première chose à faire est d'exiger les modules que nous avons installés.

 const Discord = require ('discord.js');
require ('dotenv'). config ();

Le module dotenv est initialisé en utilisant la méthode config () . Nous pouvons passer des paramètres à la méthode config () . Mais comme il s’agit d’une utilisation très simple du module dotenv, nous n’avons besoin d’aucune fonction spéciale.

Pour commencer à utiliser le module Discord.js, nous devons initialiser un constructeur. Ceci est montré dans la documentation:

 const client = new Discord.Client ();

Le module Discord.js fournit une méthode nommée client.on . La méthode client.on écoute divers événements. La bibliothèque Discord.js est basée sur les événements ce qui signifie que chaque fois qu'un événement est émis par Discord, la fonctionnalité attachée à cet événement sera invoquée.

Le premier événement que nous écouterons est le prêt événement. Cette méthode se déclenchera lorsque la connexion avec l'API Discord sera prête. Dans cette méthode, nous pouvons transmettre des fonctions qui seront exécutées lorsqu'une connexion est établie entre l'API Discord et notre application. Passons une instruction console.log dans cette méthode, afin que nous puissions savoir si une connexion est établie. La méthode client.on avec l'événement ready ressemblera à ceci:

 client.on ('ready', () => {
  console.log ('Bot est prêt');
});

Mais cela n'établit pas de connexion avec l'API car nous ne nous sommes pas connectés au bot avec le serveur Discord. Pour activer cela, le module Discord.js fournit une méthode login . En utilisant la méthode login disponible sur le client et en transmettant le jeton dans cette méthode, nous pouvons nous connecter à l'application avec le serveur Discord.

 client.login (process.env.BOT_TOKEN)

Si vous démarrez l'application maintenant – avec node app.js ou, si vous utilisez nodemon, avec nodemon app.js – vous pourrez voir la console message que vous avez défini. Notre bot s'est connecté avec succès au serveur Discord maintenant. Nous pouvons commencer à expérimenter certaines fonctionnalités.

Commençons par obtenir le contenu du message en fonction du code.

L'événement message L'événement

L'événement message écoute certains un message. En utilisant la méthode reply nous pouvons programmer le bot pour qu'il réponde en fonction du message de l'utilisateur.

 client.on ('message', (msg) => {
  if (msg.content === 'Bonjour') msg.reply ('Salut');
});

Cet exemple de code répondra par un «Salut» chaque fois qu'un message «Bonjour» est reçu. Mais pour que cela fonctionne, nous devons connecter le bot à un serveur.

Connecter le bot à un serveur Discord

Jusqu'à présent, le bot n'est connecté à aucun serveur. Pour vous connecter à notre serveur ( Smashing Example ), visitez le portail des développeurs de Discord . Cliquez sur le nom de l'application que nous avons créée précédemment dans ce tutoriel (dans notre cas, «Smashing App»). Sélectionnez l'application et cliquez sur l'option «OAuth2» dans le menu. Vous trouverez un groupe nommé "Scopes". Cochez la case «bot» et copiez l'URL générée.

 Connexion du bot au serveur Discord
OAuth pour bot ( Grand aperçu )

Visitez cette URL dans un nouveau , choisissez votre serveur et cliquez sur «Autoriser». Terminez le Captcha, et notre bot sera maintenant connecté au serveur que nous avons choisi.

Si vous visitez le serveur Discord maintenant, vous verrez qu'une notification a déjà été envoyée par Discord, et le bot apparaît maintenant également dans la liste des membres sur le côté droit.

Ajout de fonctionnalités au bot

Maintenant que notre bot est connecté au serveur, si vous envoyez un «Bonjour» au serveur, le bot répondra par un «Salut ». Ceci est juste une introduction à l'API Discord. Le vrai plaisir est sur le point de commencer.

Pour nous familiariser un peu plus avec le module Discord.js, ajoutons une fonctionnalité qui envoie une blague chaque fois qu'une commande particulière est reçue. C'est similaire à ce que nous venons de faire.

Ajout d'une fonction de blague aléatoire au bot

Pour rendre cette partie plus claire et plus facile à comprendre, nous n'allons pas utiliser d'API. Les blagues que notre bot retournera seront un simple tableau. Un nombre aléatoire sera généré à chaque fois dans la plage du tableau, et cet emplacement spécifique du tableau sera accessible pour renvoyer une blague.

Au cas où vous auriez déjà utilisé une fonctionnalité fournie par un bot dans Discord, vous pourriez avoir remarqué qu'un certain caractère spécial distingue les messages normaux des commandes spéciales. Je vais utiliser un ? devant nos commandes pour leur donner un aspect différent des messages normaux. Donc, notre commande blague sera ? Joke .

Nous allons créer un tableau nommé blokes dans notre fichier app.js . La façon dont nous obtiendrons une blague aléatoire du tableau consiste à utiliser cette formule:

 blokes [Math.floor(Math.random() * jokes.length)]

La formule Math.random () * jokes.length générera un nombre aléatoire dans la plage du tableau. La méthode Math.floor supprimera le nombre généré.

Si vous console.log () ceci, Math.floor (Math.random () * jokes.length) vous aurez une meilleure compréhension. Finalement, blokes [] nous donnera une blague aléatoire du tableau blokes .

Vous avez peut-être remarqué que notre premier code a été utilisé pour répondre à notre message. Mais nous ne voulons pas obtenir de réponse ici. Nous voulons plutôt faire passer une blague sous forme de message, sans marquer personne. Pour cela, le module Discord.js dispose d'une méthode nommée channel.send () . En utilisant cette méthode, nous pouvons envoyer des messages au canal où la commande a été appelée. Ainsi, le code complet jusqu'à présent ressemble à ceci:

 const Discord = require ('discord.js');
require ('dotenv'). config ();

client const = nouveau Discord.Client ();

client.login (process.env.BOT_TOKEN);

client.on ('ready', () => console.log ('Le Bot est prêt!'));

// Ajout de la fonction de blagues

// Blagues de dcslsoftware.com/20-one-liners-only-software-developers-understand/
// www.journaldev.com/240/my-25-favorite-programming-quotes-that-are-funny-too
blagues const = [
  'I went to a street where the houses were numbered 8k, 16k, 32k, 64k, 128k, 256k and 512k. It was a trip down Memory Lane.',
  '“Debugging” is like being the detective in a crime drama where you are also the murderer.',
  'The best thing about a Boolean is that even if you are wrong, you are only off by a bit.',
  'A programmer puts two glasses on his bedside table before going to sleep. A full one, in case he gets thirsty, and an empty one, in case he doesn’t.',
  'If you listen to a UNIX shell, can you hear the C?',
  'Why do Java programmers have to wear glasses? Because they don’t C#.',
  'What sits on your shoulder and says “Pieces of 7! Pieces of 7!”? A Parroty Error.',
  'When Apple employees die, does their life HTML5 in front of their eyes?',
  'Without requirements or design, programming is the art of adding bugs to an empty text file.',
  'Before software can be reusable it first has to be usable.',
  'The best method for accelerating a computer is the one that boosts it by 9.8 m/s2.',
  'I think Microsoft named .Net so it wouldn’t show up in a Unix directory listing.',
  'There are two ways to write error-free programs; only the third one works.',
];

client.on ('message', (msg) => {
  if (msg.content === '? blague') {
    msg.channel.send (blagues [Math.floor(Math.random() * jokes.length)]);
  }
});

J'ai supprimé la partie "Hello" / "Salut" du code car cela ne nous sert plus à rien.

Maintenant que vous avez une compréhension de base du module Discord.js, allons plus loin. Mais le module peut faire beaucoup plus – par exemple, ajouter des rôles à une personne ou les bannir ou les expulser. Pour l'instant, nous allons construire un système de rôle de réaction simple.

Construire un système de rôle de réaction

Chaque fois qu'un utilisateur répond avec un emoji spécial dans un message ou un canal particulier, un rôle lié à cet emoji sera attribué à l'utilisateur. La mise en œuvre sera très simple. Mais avant de construire ce système de réaction-rôle, nous devons comprendre les partiels.

Partials

Partial est un concept Discord.js. Discord.js met généralement en cache tous les messages, ce qui signifie qu'il stocke les messages dans une collection. Lorsqu'un message mis en cache reçoit un événement, comme l'obtention d'un message ou d'une réponse, un événement est émis. Mais les messages envoyés avant le démarrage du bot ne sont pas mis en cache. Ainsi, réagir à de telles instances n'émettra aucun événement, sauf si nous les récupérons avant de les utiliser. La version 12 de la bibliothèque Discord.js introduit le concept de partiels. Si nous voulons capturer de tels événements non cachés nous devons opter pour les partiels. La bibliothèque comporte cinq types de partiels:

  1. USER
  2. CHANNEL
  3. GUILD_MEMBER
  4. MESSAGE
  5. REACTION

Dans notre cas, nous n'aurons besoin que de trois types de partiels:

  • USER la personne qui réagit;
  • MESSAGE le message auquel on réagit ;
  • REACTION la réaction donnée par l'utilisateur au message.

La documentation a plus d'informations sur les partiels .

La bibliothèque Discord.js fournit un outil très simple manière d'utiliser les partiels. Il suffit d'ajouter une seule ligne de code, en passant un objet dans le constructeur Discord.Client () . Le nouveau constructeur ressemble à ceci:

 const client = new Discord.Client ({
  partiels: ['MESSAGE', 'REACTION', 'CHANNEL'],
});

Création de rôles sur le serveur Discord

Pour activer le système de rôle de réaction, nous devons créer des rôles. Le premier rôle que nous allons créer est le rôle de bot . Pour créer un rôle, allez dans «Paramètres du serveur»:

 Ouvrez les paramètres du serveur pour créer des rôles
Option des paramètres du serveur ( Grand aperçu )

Dans les paramètres du serveur, accédez aux «Rôles ”, Et cliquez sur le petit plus ( + ) à côté de l'endroit où il est écrit“ Rôles ”.

 Création de rôles dans Discord
Ajout de rôles ( Grand aperçu ) [19659024] Commençons par créer le rôle du bot et assurez-vous de cocher l'option «Gérer les rôles» dans le menu des options de rôle. Une fois le rôle bot créé, vous pouvez ajouter d'autres rôles. J'ai ajouté les rôles js c ++ et python . Vous n’avez pas à leur donner de capacité spéciale, mais c’est une option.

Tenez compte d’une chose: les rôles Discord fonctionnent en fonction de la priorité . Tout rôle qui a des rôles en dessous peut gérer les rôles inférieurs, mais il ne peut pas gérer les rôles au-dessus. Nous voulons que notre rôle de bot gère les rôles js c ++ et python . Donc, assurez-vous que le rôle bot est au-dessus des autres rôles. Faites simplement glisser et déposez pour modifier l'ordre des rôles dans le menu «Rôles» des paramètres de votre serveur.

Lorsque vous avez terminé de créer des rôles, attribuez le rôle bot au bot ]. Pour attribuer un rôle, cliquez sur le nom du bot dans la liste des membres sur le côté droit du serveur, puis cliquez sur le petit plus ( + ). Il vous montrera tous les rôles disponibles. Sélectionnez le rôle «bot» ici, et vous aurez terminé.

 Attribution manuelle des rôles
Attribution des rôles ( Grand aperçu )

Activation du mode développeur dans Discord

Les rôles que nous avons créés ne peuvent pas être utilisés par leurs noms dans notre code. Dans Discord, tout, des messages aux rôles, a son propre identifiant. Si vous cliquez sur l'indicateur "plus" dans un message, vous verrez une option nommée "Copier l'ID". Cette option est disponible pour tout dans Discord, y compris les rôles.

 Option Copier l'ID dans Discord
Copier l'ID dans Discord ( Grand aperçu )

Très probablement, vous ne trouverez pas cette option par défaut. Vous devrez activer une option appelée "Mode développeur". Pour l'activer, dirigez-vous vers les paramètres Discord (pas les paramètres de votre serveur), juste à côté de votre nom en bas à gauche. Ensuite, allez à l'option «Apparence» sous «Paramètres de l'application», et activez le «Mode développeur» à partir d'ici. Vous pourrez désormais copier les identifiants.

messageReactionAdd et messageReactionRemove

L'événement qui doit être émis lorsqu'un message réagit est messageReactionAdd . Et chaque fois qu’une réaction est supprimée, l’événement messageReactionRemove doit être émis.

Continuons à construire le système. Comme je l'ai dit, nous devons d'abord écouter l'événement messageReactionAdd . Les événements messageReactionAdd et messageReactionRemove prennent deux paramètres dans leur fonction de rappel. Le premier paramètre est réaction et le second est utilisateur . Celles-ci sont assez explicites.

Codage de la fonctionnalité de réaction-rôle

Premièrement, nous allons créer un message qui décrit quel emoji donnera quel rôle, quelque chose comme ce que j'ai fait ici:

 La réaction -role message sur le serveur
Message de rôle de réaction ( Grand aperçu )

Vous pensez peut-être, comment allons-nous utiliser ces emoji dans notre code? Les emoji par défaut sont Unicode, et nous devrons copier la version Unicode. Si vous suivez la syntaxe : emojiName: et appuyez sur "Entrée", vous obtiendrez un emoji avec le nom. Par exemple, mon emoji pour le rôle JavaScript est le renard; donc, si je tape : fox: et que je clique sur "Entrée" dans Discord, je reçois un emoji renard. De même, j'utiliserais : tiger: et : snake: pour obtenir ces emoji. Conservez-les dans votre configuration Discord; nous en aurons besoin plus tard.

 Obtenir des emoji Unicode
Obtenir des emoji Unicode ( Grand aperçu )

Voici le code de départ. Cette partie du code vérifie simplement certains cas extrêmes. Une fois que nous aurons compris ces cas, nous mettrons en œuvre la logique du système réaction-rôle.

 // Ajout d'une fonction réaction-rôle
client.on ('messageReactionAdd', async (réaction, utilisateur) => {
  if (reaction.message.partial) attendre reaction.message.fetch ();
  if (reaction.partial) attendre reaction.fetch ();
  if (user.bot) return;
  if (! reaction.message.guild) return;
});

Nous passons dans une fonction asynchrone. Dans le rappel, la première chose que nous faisons est de vérifier si le message est partiel . Si c'est le cas, nous le récupérons, c'est-à-dire le mettre en cache ou le stocker dans une méthode de carte JavaScript. De même, nous vérifions si la réaction elle-même est partielle et faisons la même chose. Ensuite, nous vérifions si l'utilisateur qui a réagi est un bot, car nous ne voulons pas attribuer de rôles au bot qui réagit à nos messages. Enfin, nous vérifions si le message est sur le serveur. Discord.js utilise guild comme nom alternatif du serveur. Si le message n'est pas sur le serveur, alors nous arrêterons la fonction.

Notre bot n'assignera les rôles que si le message est dans le canal roles . Si vous cliquez avec le bouton droit de la souris sur le canal roles vous verrez une option "Copier l'ID". Copiez l'ID et suivez.

 if (reaction.message.channel.id == '802209416685944862') {
  if (reaction.emoji.name === '🦊') {
    attendre reaction.message.guild.members.cache
      .get (user.id)
      .roles.add («802208163776167977»);
  }
  if (reaction.emoji.name === '🐯') {
    attendre reaction.message.guild.members.cache
      .get (user.id)
      .roles.add («802208242696192040»);
  }
  if (reaction.emoji.name === '🐍') {
    attendre reaction.message.guild.members.cache
      .get (user.id)
      .roles.add («802208314766524526»);
  }
} else return;

Ci-dessus se trouve le reste du code dans le rappel. Nous utilisons la propriété reaction.message.channel.id pour obtenir l'ID du canal. Ensuite, nous le comparons avec l'ID de canal des rôles que nous venons de copier. Si c'est vrai, nous vérifions les emoji et les comparons avec les réactions. reaction.emoji.name renvoie l'emoji qui a été utilisé pour réagir. Nous le comparons avec notre version Unicode de l'emoji. S'ils correspondent, alors nous attendons la propriété reaction.message.guild.members.cache .

Le cache est une collection qui stocke les données . Ces collections sont une carte JavaScript avec des utilitaires supplémentaires. L'un des utilitaires qu'il fournit est la méthode get . Pour obtenir quoi que ce soit par ID, nous pouvons simplement passer l'ID dans cette méthode. Donc, nous passons le user.id dans la méthode get pour obtenir l'utilisateur. Enfin, la méthode roles.add ajoute le rôle à l'utilisateur. Dans la méthode roles.add nous transmettons l'ID de rôle. Vous pouvez trouver l'ID de rôle dans l'option "Rôle" du paramètre de votre serveur. Un clic droit sur un rôle vous donnera la possibilité de copier l'ID de rôle. Et nous avons fini d'ajouter le système de rôle de réaction à notre bot!

Nous pouvons ajouter des fonctionnalités pour qu'un rôle soit supprimé lorsqu'un utilisateur supprime sa réaction du message. C'est exactement le même que notre code ci-dessus, la seule différence étant que nous écoutons l'événement messageReactionRemove et utilisons la méthode roles.remove . Ainsi, le code complet pour ajouter et supprimer des rôles serait comme ceci:

 // Ajout d'une fonction de rôle de réaction
client.on ('messageReactionAdd', async (réaction, utilisateur) => {
  if (reaction.message.partial) attendre reaction.message.fetch ();
  if (reaction.partial) attendre reaction.fetch ();
  if (user.bot) return;
  if (! reaction.message.guild) return;
  if (reaction.message.channel.id == '802209416685944862') {
    if (reaction.emoji.name === '🦊') {
      attendre reaction.message.guild.members.cache
        .get (user.id)
        .roles.add («802208163776167977»);
    }
    if (reaction.emoji.name === '🐯') {
      attendre reaction.message.guild.members.cache
        .get (user.id)
        .roles.add («802208242696192040»);
    }
    if (reaction.emoji.name === '🐍') {
      attendre reaction.message.guild.members.cache
        .get (user.id)
        .roles.add («802208314766524526»);
    }
  } else return;
});

// Suppression des rôles de réaction
client.on ('messageReactionRemove', async (réaction, utilisateur) => {
  if (reaction.message.partial) attendre reaction.message.fetch ();
  if (reaction.partial) attendre reaction.fetch ();
  if (user.bot) return;
  if (! reaction.message.guild) return;
  if (reaction.message.channel.id == '802209416685944862') {
    if (reaction.emoji.name === '🦊') {
      attendre reaction.message.guild.members.cache
        .get (user.id)
        .roles.remove ("802208163776167977");
    }
    if (reaction.emoji.name === '🐯') {
      attendre reaction.message.guild.members.cache
        .get (user.id)
        .roles.remove ('802208242696192040');
    }
    if (reaction.emoji.name === '🐍') {
      attendre reaction.message.guild.members.cache
        .get (user.id)
        .roles.remove ('802208314766524526');
    }
  } else return;
});

Ajout de la fonction de transfert Twitter

La prochaine fonction que nous allons ajouter à notre bot va être un peu plus difficile. Nous voulons nous concentrer sur un compte Twitter particulier, de sorte que chaque fois que le compte Twitter publie un tweet, celui-ci sera redirigé vers notre chaîne Discord .

Avant de commencer à coder, nous devrons obtenir le jetons requis du portail des développeurs Twitter . Visitez le portail et créez une nouvelle application en cliquant sur le bouton «Créer une application» dans l'option «Vue d'ensemble». Donnez un nom à votre application, copiez tous les jetons et collez-les dans le fichier .env de votre code, avec les noms appropriés. Cliquez ensuite sur "Paramètres de l'application" et activez la fonctionnalité OAuth à trois étapes. Ajoutez les URL ci-dessous en tant qu'URL de rappel à des fins de test:

 http://127.0.0.1/
https: // localhost /

Si vous possédez un site Web, ajoutez l'adresse à l'URL du site Web et cliquez sur «Enregistrer». Rendez-vous sur l'onglet «Clés et jetons» et générez les clés d'accès et les jetons. Copiez-les et enregistrez-les dans votre fichier .env . Notre travail avec le portail des développeurs Twitter est terminé. Nous pouvons revenir à notre éditeur de texte pour continuer à coder le bot. Pour obtenir la fonctionnalité souhaitée, nous devons ajouter un autre package npm nommé twit . Il s'agit d'un client API Twitter pour Node.js. Il prend en charge à la fois REST et l'API de streaming.

Tout d'abord, installez le paquet twit en utilisant npm install twit et exigez-le dans votre fichier principal:

 const Twit = require ('twit');

Nous devons créer une instance twit en utilisant le constructeur Twit . Passez un objet dans le constructeur Twit avec tous les jetons que nous avons obtenus de Twitter:

 const T = new Twit ({
  consumer_key: process.env.API_TOKEN,
  consumer_secret: process.env.API_SECRET,
  access_token: process.env.ACCESS_KEY,
  access_token_secret: process.env.ACCESS_SECRET,
  bearer_token: process.env.BEARER_TOKEN,
  timeout_ms: 60 * 1000,
});

Un délai est également spécifié ici. Nous voulons que tous les attaquants soient dans un canal spécifique. J'ai créé une chaîne distincte appelée «Twitter en avant», où tous les tweets seront transmis. J'ai déjà expliqué comment créer une chaîne. Créez votre propre chaîne et copiez l'ID.

 // Canal de destination Twitter Forwards
const dest = '803285069715865601';

Nous devons maintenant créer un flux. Une API de flux permet d'accéder à un flux de données sur le réseau. Les données sont divisées en morceaux plus petits, puis transmises. Voici notre code pour diffuser les données:

 // Créer un flux pour suivre les tweets
const stream = T.stream ('statuts / filtre', {
  suivre: '32771325', // @Stupidcounter
});

Dans la touche follow je spécifie @Stupidcounter car il tweete toutes les minutes, ce qui est idéal pour nos tests. Vous pouvez fournir l'identifiant de n'importe quel identifiant Twitter pour obtenir ses tweets. TweeterID vous donnera l'identifiant de n'importe quel handle. Enfin, utilisez la méthode stream.on pour obtenir les données et les diffuser sur le canal souhaité.

 stream.on ('tweet', (tweet) => {
  const twitterMessage = `Lisez le dernier tweet de $ {tweet.user.name} (@ $ {tweet.user.screen_name}) ici: https://twitter.com/${tweet.user.screen_name}/status/$ {tweet.id_str} `;
  client.channels.cache.get (dest) .send (twitterMessage);
  revenir;
});

Nous sommes à l'écoute de l'événement tweet et, chaque fois que cela se produit, transmettons le tweet à une fonction de rappel. Nous allons créer un message personnalisé; dans notre cas, le message sera:

 Lisez le dernier tweet de The Count (@Stupidcounter) ici: https://twitter.com/Stupidcounter/status/1353949542346084353

Encore une fois, nous utilisons la méthode client.channels.cache.get pour obtenir le canal souhaité et la méthode .send pour envoyer notre message. Maintenant, exécutez votre bot et attendez une minute. The Twitter message will be sent to the server.

The bot sends the tweet to Discord
Tweets forwarded to Discord (Large preview)

So, here is the complete Twitter forwarding code:

// Adding Twitter forward function
const Twit = require('twit');
const T = new Twit({
  consumer_key: process.env.API_TOKEN,
  consumer_secret: process.env.API_SECRET,
  access_token: process.env.ACCESS_KEY,
  access_token_secret: process.env.ACCESS_SECRET,
  bearer_token: process.env.BEARER_TOKEN,
  timeout_ms: 60 * 1000,
});

// Destination channel Twitter forwards
const dest = '803285069715865601';
// Create a stream to follow tweets
const stream = T.stream('statuses/filter', {
  follow: '32771325', // @Stupidcounter
});

stream.on('tweet', (tweet) => {
  const twitterMessage = `Read the latest tweet by ${tweet.user.name} (@${tweet.user.screen_name}) here: https://twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}`;
  client.channels.cache.get(dest).send(twitterMessage);
  return;
});

All of the functions that we want to add are done. The only thing left now is to deploy it to the cloud. We’ll use Heroku for that.

Deploying The Bot To Heroku

First, create a new file in the root directory of your bot code’s folder. Name it Procfile. This Procfile will contain the commands to be executed when the program starts. In the file, we will add worker: node app.jswhich will inform Heroku about which file to run at startup.

After adding the file, let’s initiate a git repository, and push our code to GitHub (how to do so is beyond the scope of this article). One thing I would suggest is to add the node_modules folder and the .env file to the .gitignore file, so that your package size remains small and sensitive information does not get shared outside.

Once you’ve successfully pushed all of your code to GitHub, visit the Heroku website. Log in, or create an account if you don’t have one already. Click on the “New” button to create a new app, and name it as you wish. Choose the “Deployment Method” as GitHub.

Choose GitHub as deployment method
Choose GitHub as the deployment method (Large preview)

Search for your app, and click on connect once you find it. Enable automatic deployment from the “Deploy” menu, so that each time you push changes to the code, the code will get deployed automatically to Heroku.

Now, we have to add the configuration variables to Heroku, which is very easy. Go to the “Settings” option, below your app’s name, and click on “Reveal Config Vars”.

Revealing and adding configuration variables to Heroku
Config Vars on Heroku (Large preview)

Here, we’ve added the configuration variables as key-value pairs. Once you are done, go to the “Deploy” tab again, and click on “Deploy Branch” under “Manual Deploy”.

The last thing to consider is that you might encounter a 60-second error crash that stops the bot from executing. To prevent this from happening, we have to change the worker type of the app. In Heroku, if you go to the “Resources” tab of your app, you’ll see that, under “Free Dynos”, web npm start is enabled. We have to turn this off and enable worker node app.js. So, click on the edit button beside the web npm start button, turn it off, and enable the worker node app.js option. Confirm the change. Restart all of your dynos, and we are done!

Conclusion

I hope you’ve enjoyed reading this article. I tried to cover all of the basics that you need to understand in developing a complicated bot. Discord.js’ documentation is a great place to learn more. It has great explanations. Also, you will find all of the code in the GitHub repository. And here are a few resources that will be helpful in your further development:

Smashing Editorial" width="35" height="46" loading="lazy" decoding="async(vf, il, al)






Source link