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: 361
  • header-2-bot.png
    header-2-bot.png
    57.1 KB · Affichages: 535
Dernière édition par un modérateur:
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
 
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 ! ;)
 
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:
 
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)
 
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 .
 
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)
 
Ah ok, tu as appelé le PACKET discord.JS/commando alors que c'est discord.js-commando
 
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)
 
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 !
 
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 !
 
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. :)
 
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.
 
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.
Retour
Haut