II - Coder un bot discord

Statut
N'est pas ouverte pour d'autres réponses.
D

deleted732323

Hello tout le monde, on se retrouve pour la deuxième partie de ma série : Comment coder un bot discord. Allez voir la première partie si vous ne l'avez pas encore vu !

L'INVITATION
Dans le dernier épisode, on s'était arrêté sur la création de TCHOIN (mon bot :trollface:), Discord a un système d'invitation très spéciale. Elle marche par équation binaire (multiplication), et chaque permission a un nombre. On va calculer cette équation avec un site, qui le fait automatiquement :)

Pour l'instant, on va TOUT cocher, comme ça, pas de problème de permission.
Après avoir tout cocher, en bas on insert notre Client ID, disponible sur la page de votre application (bot)


2pps.gif

Vous invitez votre bot dans votre serveur, le mieux est d'en faire un de développement.

up55.png
Note : En général, évitez de mettre des projets pas finalisés en prod.

PREMIÈRE COMMANDE


Maintenant que ma TCHOIN a rejoins ma cham.. serveur, on va lui faire des choses :pedobear: Enfin, lui faire dire des choses !

On va faire que lorsque qu'on dit "!ping" le bot réponde avec un "Pong!"

Mais d'abord, on va demandé au bot de nous prévenir lorsqu'il est opérationnel dans la console. pour cela on va faire un event ready.

Code:
bot.on('ready', () => {
  console.log('TCHOIN est prête!');
});

Et quand on exécute le bot, on peut voir qu'il nous répond !:

ocip.png

Maintenant que notre bot nous répond, on peut créer la commande !Ping,

Code:
bot.on('message', message => {
    if (message.content === 'ping') {
    message.channel.sendMessage('pong');
  }
});

Donc, j'explique le code :

  • Sur la première ligne, on dit que notre event est un message
  • Sur la deuxième, de vérifier si la commande contient bien ping
  • Et la dernière, et d'envoyer un message dans le channel correspondant au message.
f3sq.png


Utilisation de Commando
Maintenant qu'on sait utiliser la libraires discord.js, on va utiliser Commando, qui est lui, plus rapide d'utilisation et plus facile a comprendre.

Pour télécharge Commando, on fait comme avec discord.JS !

Code:
npm install discord.js-commando --save

Maintenant, on peut supprimé notre ancienne constante Discord, et à la place: Commando !

On remplace aussi Discord.Client par Commando.Client.

Code:
const Commando : require('discord.js-commando');
const bot = new Commando.Client();

Avec Commando, on peut créer des groupes de commandes, telles que "random", "util", "admin", ou autre !


On va enregistré notre groupe, puis lui donner comme nom Random.

Code:
bot.registry.registerGroup('random', 'Random')

Et dire que nos commandes sont dans le répertoire /commands, cela nous permettra de mieux s'organiser.

Code:
bot.registry.registerCommandsIn(__dirname + "/commands");

Nous allons donc créer ce fameux dossier commands, et dedans le dossier de notre groupe, ici random.

Après, on va demander au bot de créer les commandes automatiquement par défaut, telle que !help ou autre.

Code:
bot.registry.registryDefaults();


COMMANDO - PREMIÈRE COMMANDE

On peux enfin créer notre commande facilement, pour l'instant on va faire un dice roll, c'est à dire qu'on va lancé un dès (virtuellement) et il va nous donner le chiffre sur le quel on est tombé ! Utile pour faire des loteries ou autre.

On créer notre fichier dice_roll.js dans le dossier random, et on appelle Commando, avec une constante, comme avant.

Code:
const Commando = require('discord.js-commando');

On créer notre class DiceRollCommand, et on va utilisé "extends", il sert a dire que notre class utilise un package, ici Commando.Command.

Code:
class DiceRollCommand extends Commando.Command {


}


Avant de commencer a écrire nos fonctions, on va écrire en bas (donc pas dans les accolades)

Code:
module.exports = DiceRollCommand;

On va dire que DiceRollCommand va être importé dans notre index, et donc le bot va le reconnaître.


On créer un constructor, il sert a créer et a démarrer un objet.

Code:
constructor(client) {

       super(client, {
 
});
}

On va lui donner une "carte d'identité", lui donner un nom, une description ect.. Tout ça dans le "super".

Code:
constructor(client) {

    super(client, {
        name: 'roll',
        group: 'random',
        memberName: 'roll',
        description: 'Loterie'

    });
}

Après ça, on va créer une fonction async, donc qui est asynchrone, qui renvoie a un objet. Ici, c'est quand on va taper "!roll" que la fonction va démarrer. Elle va démarrer avec un message, avec des arguments (args)

Code:
async run(message, args){


}

Désolé pour certains, mais on va faire des maths :o.O:. Avec une fonction Math.floor(x). A
l’intérieur on va dire de trouver un nombre aléatoire entre 0 et 1, va être multiplié par 6 et on rajoute +1. On créer une variable roll.

Code:
var roll = Math.floor(Math.random() * 6) + 1;

Et le bot répond à l'utilisateur avec son nombre + une petite phrase.

Code:
message.reply("Vous êtes tombé sur un" + roll);


t6bb.png


Il faut démarrer le bot désormais, mais pas comme avant avec "node ." mais avec "node --harmony .", harmony va se charger d'exécuter tout les modules nécessaire au bon déroulement de notre programme.

Donc on démarre TCHOIN !

Code:
node . --harmony

On va sur Discord, et TADA !

7dzv.gif
 

Fichiers joints

  • chrome_2017-02-18_21-48-16.png
    chrome_2017-02-18_21-48-16.png
    76.5 KB · Affichages: 340
  • header-2-bot.png
    header-2-bot.png
    57.1 KB · Affichages: 513
Dernière édition par un modérateur:

Lyrix

UX/UI Design
Ancien staff
Inscription
20 Août 2012
Messages
22 672
Réactions
8 160
Points
36 866
Tu connais déjà mon avis que j'ai donné en pv, super sujet très utile, bien développé même pour ceux qui n'ont pas vraiment de connaissances dans ce domaine donc intuitif.
De plus bien présenté niveau visuel, au top, continu comme ça :D
 
D

deleted732323

Tu connais déjà mon avis que j'ai donné en pv, super sujet très utile, bien développé même pour ceux qui n'ont pas vraiment de connaissances dans ce domaine donc intuitif.
De plus bien présenté niveau visuel, au top, continu comme ça :D
Merci ! ;)
 

Veetwo

Graphiste
Premium
Inscription
16 Avril 2012
Messages
1 025
Réactions
215
Points
20 138
vraiment utile mais je voulais savoir si tu pouvais faire un tuto pour le codage d'un bot discord pour la musique si tu sait comment faire :oui:
 

Post Malone

Premium
Inscription
2 Novembre 2012
Messages
2 464
Réactions
464
Points
18 189
Salut, merci pour ton tuto, mais j'ai cette erreur après avoir installé commando :/ :
Code:
pi@raspberrypi:~/Public/Discord $ node index.js
module.js:472
    throw err;
    ^

Error: Cannot find module 'discord.js/commando'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/home/pi/Public/Discord/index.js:1:80)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
 

Post Malone

Premium
Inscription
2 Novembre 2012
Messages
2 464
Réactions
464
Points
18 189
Salut, merci pour ton tuto, mais j'ai cette erreur après avoir installé commando :/ :
Code:
pi@raspberrypi:~/Public/Discord $ node index.js
module.js:472
    throw err;
    ^

Error: Cannot find module 'discord.js/commando'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/home/pi/Public/Discord/index.js:1:80)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
Et pareil quand je fais node --harmony .
 

Post Malone

Premium
Inscription
2 Novembre 2012
Messages
2 464
Réactions
464
Points
18 189
Ton code please?
Voila :
Code:
const Commando = require('discord.js/commando');
const Client = new Commando.Client();
const token = "Mjg2NTcyNDI0MDAxMjI0NzA0.C5mW-Q.BbRSnOXnUww5pTg_bsImr3IpjrU";
var prefix = ".";
var mention = "<@1930903359700619264>";
var memberCount = Client.users.size;
var servercount = Client.guilds.size;
var message = Clien*spam*ssage;
var roll = Math.floor(Math.random() * 6) + 1;

Client.on("ready", () => {
    var servers = Client.guilds.array().map(g => g.name).join(',');
    console.log("--------------------------------------");
    console.log("[!] Connexion... \n[!] Connecté !");
});

Client.on('message', message => {

    console.log("[Message] ["+message.guild.name+"] "+message.author.username+" > "+message.content+"");

    if (message.content === ("£help"))
    {
        message.channel.sendMessage('\n`Voici les commandes disponibles :\n£random : Retourne un nombre aléatoire\n£ping : Retourne avec "pong" pour voir votre latence\n£avatar : Retourne URL de votre avatar\n`');
    }

    if (message.content === ("£ping"))
    {
        message.channel.sendMessage('\npong !');
    }

    if (message.content === ("£roll"))
    {
        message.reply(roll);
    }

    if (message.content === ("£avatar"))
    {
        message.reply(message.author.avatarURL);
    }
});

Client.login(token)
 

Post Malone

Premium
Inscription
2 Novembre 2012
Messages
2 464
Réactions
464
Points
18 189
Ah ok, tu as appelé le PACKET discord.JS/commando alors que c'est discord.js-commando
Oui mais maintenant que j'ai mis le tiret j'ai ce code :
Code:
const Commando = require('discord.js-commando');
const Client = new Commando.Client();
const token = "Mjg2NTcyNDI0MDAxMjI0NzA0.C5mW-Q.BbRSnOXnUww5pTg_bsImr3IpjrU";
var prefix = ".";
var mention = "<@1930903359700619264>";
var memberCount = Client.users.size;
var servercount = Client.guilds.size;
var message = Clien*spam*ssage;
var roll = Math.floor(Math.random() * 6) + 1;

Client.on("ready", () => {
    var servers = Client.guilds.array().map(g => g.name).join(',');
    console.log("--------------------------------------");
    console.log("[!] Connexion... \n[!] Connecté !");
});

Client.on('message', message => {

    console.log("[Message] ["+message.guild.name+"] "+message.author.username+" > "+message.content+"");

    if (message.content === ("£help"))
    {
        message.channel.sendMessage('\n`Voici les commandes disponibles :\n£random : Retourne un nombre aléatoire\n£ping : Retourne avec "pong" pour voir votre latence\n£avatar : Retourne URL de votre avatar\n`');
    }

    if (message.content === ("£ping"))
    {
        message.channel.sendMessage('\npong !');
    }

    if (message.content === ("£roll"))
    {
        message.reply(roll);
    }

    if (message.content === ("£avatar"))
    {
        message.reply(message.author.avatarURL);
    }
});

Client.login(token)

Mais cette erreur :
Code:
C:\Users\IDK\Desktop\discord>node --harmony .
C:\Users\IDK\Desktop\discord\node_modules\discord.js-commando\src\client.js:144
        async setProvider(provider) {
              ^^^^^^^^^^^
SyntaxError: Unexpected identifier
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (C:\Users\IDK\Desktop\discord\node_modules\discord.js-
commando\src\index.js:4:10)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
 

Uchiwam

Membre
Inscription
11 Mars 2017
Messages
4
Réactions
0
Points
19
Bonjour o/

J'avais quelques petites question mon bot ne réagissant plus a mes commandes. Les dossiers "commands" et "random" sont sensé etre créé par le bot ou par nous même ?
Si c'est sensé être le premier cas mon bot ne m'as en aucun cas créé ces dossiers.

J'ai d'ailleurs du mal a situé dans quel fichier placer les commande bot.registry

Merci en tout cas pour ce tuto !
 

Uchiwam

Membre
Inscription
11 Mars 2017
Messages
4
Réactions
0
Points
19
Bonjour o/

J'avais quelques petites question mon bot ne réagissant plus a mes commandes. Les dossiers "commands" et "random" sont sensé etre créé par le bot ou par nous même ?
Si c'est sensé être le premier cas mon bot ne m'as en aucun cas créé ces dossiers.

J'ai d'ailleurs du mal a situé dans quel fichier placer les commande bot.registry

Merci en tout cas pour ce tuto !
 
D

deleted732323

Bonjour o/

J'avais quelques petites question mon bot ne réagissant plus a mes commandes. Les dossiers "commands" et "random" sont sensé etre créé par le bot ou par nous même ?
Si c'est sensé être le premier cas mon bot ne m'as en aucun cas créé ces dossiers.

J'ai d'ailleurs du mal a situé dans quel fichier placer les commande bot.registry

Merci en tout cas pour ce tuto !
Yo,

C'est toi qui dois créer les dossiers, les commandes bot.registry tu le mets dans le fichier principal de ton bot. Ici index.JS. :)
 

Uchiwam

Membre
Inscription
11 Mars 2017
Messages
4
Réactions
0
Points
19
Yo,

C'est toi qui dois créer les dossiers, les commandes bot.registry tu le mets dans le fichier principal de ton bot. Ici index.JS. :)

Merci !

J'ai bien suivit les instructions cependant mon bot n'apparait pas connecté sur mon serveur discord et ne reagit plus du tout : pas de "je suis prêt" dans la console et il ne reagit plus a la commande ping.
 
D

deleted732323

Merci !

J'ai bien suivit les instructions cependant mon bot n'apparait pas connecté sur mon serveur discord et ne reagit plus du tout : pas de "je suis prêt" dans la console et il ne reagit plus a la commande ping.
Aucune erreur dans la console?
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut