Bonjour,

Je me suis lancé dans la création d'un bot....
Ce qui n'est pas une tâche aisée.

Je n'ai aucune base en nodejs, quelques unes en python et javascript.
Et je suis complètement perdu.

Actuellement, je n'ai essayé d'ajouter qu'un option, elle permettrait d'alerter par message privé les personnes avec le role staff que quelqu'un a rejoins le channel vocal 'attente staff'.
Seulement, je n'ai trouvé que comment envoyer la "notification" dans un channel texte sur le discord (et encore, je ne suis pas sûr du résultat :( ).

const Discord = require('discord.js');
const uchiha = new Discord.client();

uchiha.on('ready', () => {
    console.log('Je suis prêt !')
});

uchiha.on('voiceStateUpdate', (newMember) => {
  let newUserChannel = newMember.voiceChannel
  if(newUserChannel === /*'attente staff'*/){
    channels.find(ch => ch.name === /*'prive staff'*/).sendMessage('Un ticket est ouvert @Staff')
  }
})

uchiha.login('NjUyNTMyMTMxNjA3NjA5MzU2.Xe47jQ.YQ6n7VleFQ0hTbjSan-SLiFYMh4')

Si vous pouviez m'aider à ne serait-ce que faire cela, je vous serait reconnaissant :) mais si en plus, vous pouviez me renseigner sur quelques questions :

  • C'est quoi "async" ?
  • Quelle est la différence entre "var", "let" et "const" ?
  • C'est quoi les évenements (events) ?
  • "Require (.....)" je sais que c'est pour charger un module mais dites m'en plus...
  • J'ai déjà vu dans des vidéos des f.readdir ou f.length.... et en même temps, un "const fs = require('fs.js')" <- à quoi sert ce module dans la programmation d'un bot discord ?
  • Les .then etc. j'y comprend riennnn
  • J'ai aussi vu des trucs du style qqlqchose = new Discord.Collection (); <- à quoi ça sert ???

Merci beaucoup pour vos réponses :))))

8 réponses


Shizey
Réponse acceptée

Ne laisse pas ton token libre n'importe qui peut "hack" ton bot avec cette donnée.

Sinon, la personne en haut à répondu plus ou moins à tes questions mais je vais répondre précisement à tes interrogations :
C'est quoi "async" ? C'est une fonction qui va s'executer de manière asynchrone, en gros tu peux lancer une fonction qui va s'executer dans 10 secondes et faire ce que tu veux entre temps voici un exemple (source):

var resolveAfter2Seconds = function() {
  console.log("Initialisation de la promesse lente");
  return new Promise(resolve => {
    setTimeout(function() {
      resolve("lente");
      console.log("La promesse lente est terminée");
    }, 2000);
  });
};

var resolveAfter1Second = function() {
  console.log("Initialisation de la promesse rapide");
  return new Promise(resolve => {
    setTimeout(function() {
      resolve("rapide");
      console.log("La promesse rapide est terminée");
    }, 1000);
  });
};

var sequentialStart = async function() {
  console.log('==Début séquentiel==');

  // 1. L'exécution atteint ce point quasi-instantanément
  const lente = await resolveAfter2Seconds();
  console.log(lente); // 2. cela s'exécute 2s après 1.

  const rapide = await resolveAfter1Second();
  console.log(rapide); // 3. cela s'exécute 3s après 1.
}

Quelle est la différence entre "var", "let" et "const" ? Les 3 permettes de déclarer une variable, le let est limitée au bloc courant.
Exemple (source):

function test(){
  if( 1 === 1 ){
    let maVar = true;
    console.log(maVar);
    // Retourne true
  }console.log(maVar);
  // Retourne une erreur, let n'existe pas hors du bloc "if"
}

const est une variable qui à les même caracteristiques que let au niveau de sa porter sauf qu'il est impossible de changer sa valeur une fois declarer
exemple (même source que plus haut) :

function test(){
  if( 2 === 2 ){
    const CONFIG = 12;
    console.log(CONFIG);
    // Retourne 12
  }  console.log(CONFIG);
  // Retourne une erreur, config n'existe que dans le bloc courant
}

const CONFIG = true;const CONFIG = false;
// Retourne une erreur, on ne peut pas déclarer une autre constante avec le même nomlet CONFIG = false;
// Retourne aussi une erreur, cela ne fonctionne pas non plus en déclarant une variable avec le même nom

Var est une variable simple. La portée de la variable est celle du contexte dans lequel elle est déclarée :

  • Si elle est déclarée dans une fonction, la portée est celle de la fonction, qu’importe le bloc dans lequel elle se trouve.

  • Si elle est déclarée hors d’une fonction, la portée sera celle du contexte global.

La déclaration sans instruction var (exemple : maVar = ‘test’) revient à écrire var maVar = ‘test’ dans un contexte global. La variable devient donc une propriété de l’objet global

Exemple (encore même source) :

function test(){
  maVar = 'valeur';
}
test();
console.log(maVar);
// Retourne 'valeur'
console.log(window.maVar);
// Retourne 'valeur'

C'est quoi les évenements (events) ? Un event c'est quelque chose qui s'execute sous une certaine condition de l'utilisateur (ne pas confondre avec if !).
Par exemple dans le cas de discord JS :

client.on('message', msg => {
//Le client.on est un event, il s'execute lorsque que quelqu'un envoie un msg et comme parametre de fonction msg qui correspond au message envoyer.
  if (msg.content === 'ping') {
    msg.reply('Pong!');
  }
});

"Require (.....)" je sais que c'est pour charger un module mais dites m'en plus... Comme tu l'a dit require sert à charger un module, c'est une portion de code que tu appeler sous forme de fonction (en gros). Des tonnes de modules utile comme sont trouvable sur NPM.

Exemple :

//Un fichier comprenant un module qui permet de verifier si la valeur est un email.
var check_that_email= function(email_to_check){

  // définition d'une expression régulière matchant les emails
  var regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

  // on retourne le test de notre chaine de caractère (email_to_check)
    return regex.test(email_to_check);

}

module.exports = {
  check_that_email: check_that_email
}

On peut ensuite appeler cette fonction avec un require

var email_checker = require("chemin/vers/le/dossier/email_checker");

var email_checker = require("chemin/vers/le/dossier/email_checker");

Source

**J'ai déjà vu dans des vidéos des f.readdir ou f.length.... et en même temps, un "const fs = require('fs.js')" <- à quoi sert ce module dans la programmation d'un bot discord ?*** Ce module est ULTRA UTILE ! Il sert à manipuler ton espace : créer des dossiers, des fichiers (text ou autre) les manipuler (supprimer, copier) etc tu peux trouver un tuto d'utilisation de FS ici

Petit exemple pour la route (source au dessus):

var fs = require('fs');
//Créer un ficher nouveautext.txt et écris HEY! dedans
fs.writeFile('nouveautext.txt', 'HEY !', function (err) {
  if (err) throw err;
  console.log('Saved!');
}); 

Les .then etc. j'y comprend riennnn Pas de panic... Le then sert a executer quelque chose après l'execution d'une autre (plus claire avec un exemple). imaginons que tu souhaite que ton bot envoie un message pour demander confirmation via reaction Discord. Tu utilisera alors le then pour recuperer les reactions placer sur le message après l'envoie. Rassure toi, c'est le genre de chose que tu utilise que si tu en a besoin et dans ce cas là tu comprendra.

J'ai aussi vu des trucs du style qqlqchose = new Discord.Collection (); <- à quoi ça sert ??? Ce lien (envoyer déjà au dessus) répondra à ta question

Bonjour.
Il y a plusieurs Tutoriels vidéos concernant NodeJS sur le site, dont un spécifique pour Créer un bot Discord.
En ce qui concerne la plupart de tes questions, tu y trouvera leurs réponses dans des tutoriels sur le JavaScript (toujours sur le site).
Pour ce qui est de fs, je dirais tout simplement que c'est l'abbréviation de Files System, donc la manipulation de fichiers.
Tu dis que tu as des notions en JavaScript, mais j'ai du mal à le croire étant donné que tu demandes la différence entre var, let et const.

J'ai aussi vu des trucs du style qqlqchose = new Discord.Collection (); <- à quoi ça sert ???

Par exemple : discord.js » Collection.

Hizuoh
Auteur

Merci bcp ^^

Hizuoh
Auteur

Quand je parle de base, je veux simplement parler de créer des alertes et d'effectuer des calculs, où j'utilisais uniquement var...

Hizuoh
Auteur

Un grand merci Shizey, tu gères ^^

Hizuoh
Auteur

Et pas de panique, j'ai changé mon token depuis ^^

C'est gentil pour lui Shizey, mais si je n'ai pas répondu à toutes ses questions, c'est tout simplement qu'il les aurait trouvé dans les tutoriels sur le JavaScript, dont pour la majeure partie dans tout au plus trois tutoriels vidéos de la formation sur le JavaScript.

Je sais bien Lartak, mais ce genre d'info c'est la base et c'est pas ça qui va faire de lui un codeur. Répondre a de simple question va selon moi lui permettre de se motiver et de se pencher sur la question du code et de sont aprentissage. Faut bien se motiver si on veut faire quelque chose ;)