Bot discord en js

Erreur d'undefined

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, j’ai un problème assez énervant : Quand je lance la commande de mon bot, il me met undefined. (Edit : Quand je dis il met undefined, je veux dire lors que j’execute la commande, il me creer un fichier nommé undefined et le console.log affiche undefined)

const Discord = require('discord.js');
const client = new Discord.Client();
const fs = require('fs');
const yaml = require('js-yaml');
const prefix = "*"

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', msg => {
    if(msg.content === prefix + "info"){
        const args = msg.content.split(' ').slice(1);
        const user = msg.mentions.users.first();
        console.log(user)
        if (!user) {
            msg.reply('Utilisateur non trouvé...')
        }
        fs.exists(`./data/${user.user.username}`,function(exists){ 
            if (exists){ 
                var fichier = yaml.safeLoad(fs.readFileSync(`./data/${user.user.username}.yml`, 'utf8')); 
'utf8'));
            }else { 
                var stream = fs.createWriteStream(`./data/${user.user.username}.yml`); 
                stream.once('open', function(fd) {
                stream.write(`version: 0.0.1\n`); 
                stream.write(`verdem: 1\n`); 
                stream.end(); 
            }) 
        } 
    }); 
}
});


client.login(j'ai fait exprès de ne pas mettre mon login)

Merci d’avance pour votre aide

Édité par acesomme1602

+0 -0

Cette réponse a aidé l’auteur du sujet

Salut !

As-tu le message d’erreur complet, au delà de simplement undefined ? À moins que tu ne parles du console.log de ton code ? Sinon, j’ai une piste sur la cause de ce problème.

Dans ce bout de code, tu vérifies initialement que msg.content vaut exactement "*info".

if(msg.content === prefix + "info"){
    const args = msg.content.split(' ').slice(1);
    // ...
}

Mais ensuite, dans le corps du if, tu lis à nouveau msg.content mais en cherchant cette fois à voir ce qu’il y aurait après *info (en séparant sur les espaces et en retirant le premier élément). Sauf que vu que c’est ce qu’exige ton test initial, msg.content vaut forcément et exactement *info, donc msg.content.split(' ') vaut ["*info"], et donc msg.content.split(' ').slice(1) vaut toujours [] (un tableau vide).

Bon d’un côté on pourrait se dire que ce n’est pas un drame vu que tu n’utilises jamais args (mais alors pourquoi le définir ?). Cela dit, d’un autre côté, et sauf méconnaissance de l’API de Discord, je me dis que si le message ne vaut que *info (sans rien derrière), il ne peut contenir de mentions. Et donc il est probable que msg.mentions.users.first(); retourne undefined (car s’il n’y a pas de mentions, il n’y a pas de première mention, c’est logique).

Ce qui expliquerait le log de undefined.

Si c’est bien ça, pour corriger, il faut vérifier dans ton if que msg.content commence par prefix + "info".

#JeSuisArius ⋅ Mon blog scientifiqueLe Pitit Bac

+1 -0
Auteur du sujet

Cette réponse a aidé l’auteur du sujet

Salut !

As-tu le message d’erreur complet, au delà de simplement undefined ? À moins que tu ne parles du console.log de ton code ? Sinon, j’ai une piste sur la cause de ce problème.

Dans ce bout de code, tu vérifies initialement que msg.content vaut exactement "*info".

if(msg.content === prefix + "info"){
    const args = msg.content.split(' ').slice(1);
    // ...
}

Mais ensuite, dans le corps du if, tu lis à nouveau msg.content mais en cherchant cette fois à voir ce qu’il y aurait après *info (en séparant sur les espaces et en retirant le premier élément). Sauf que vu que c’est ce qu’exige ton test initial, msg.content vaut forcément et exactement *info, donc msg.content.split(' ') vaut ["*info"], et donc msg.content.split(' ').slice(1) vaut toujours [] (un tableau vide).

Bon d’un côté on pourrait se dire que ce n’est pas un drame vu que tu n’utilises jamais args (mais alors pourquoi le définir ?). Cela dit, d’un autre côté, et sauf méconnaissance de l’API de Discord, je me dis que si le message ne vaut que *info (sans rien derrière), il ne peut contenir de mentions. Et donc il est probable que msg.mentions.users.first(); retourne undefined (car s’il n’y a pas de mentions, il n’y a pas de première mention, c’est logique).

Ce qui expliquerait le log de undefined.

Si c’est bien ça, pour corriger, il faut vérifier dans ton if que msg.content commence par prefix + "info".

Amaury

Salut, déjà, je te remercie de m’avoir aider. C’est vrai que l’erreur vient bien du message.content. Donc, j’ai essayer de le changer par if(msg.content.startsWith(prefix + "info")) mais ça me remets en mon premier malheur (oui j’ai réussis à mettre une phrase de poème haha) Je me suis donc dit qu’il fallait utiliser un autre moyen de detecter le début du message. J’ai donc essayer plusieurs techniques (if(String.prototype.startsWith(prefix + "info")){, etc…) mais sans succès. Malheureusement, je n’ai pas plus de details, juste le "undefined"… Et pour le args…. Qu’est-ce qu’il fout là ??? J’en sait rien haha :)

Voilà donc tout se que je peux dire.

+0 -0
Auteur du sujet

Cette réponse a aidé l’auteur du sujet

client.on('message', msg => {
    if(msg.content.startsWith(prefix + "info")){
        const args = msg.content.split(' ').slice(1);
        const user = msg.mentions.users.first();
        console.log(user)
        if (!user) {
            msg.reply('Utilisateur non trouvé...')
        }
        fs.exists(`./data/${user.username}`,function(exists){ 
            if (exists){ 
                var fichier = yaml.safeLoad(fs.readFileSync(`./data/${user.username}.yml`, 'utf8')); 
            }else { 
                var stream = fs.createWriteStream(`./data/${user.username}.yml`); 
                stream.once('open', function(fd) {
                stream.write(`version: 0.0.1\n`); 
                stream.write(`verdem: 1\n`); 
                stream.end(); 
            }) 
        } 
    }); 
}
});

C’etait une simple erreur de content et de args.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte