Bot discord en js

Erreur d'undefined

Le problème exposé dans ce sujet a été résolu.

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

+0 -0

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".

+1 -0

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.

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.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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