J'essaie de faire en sorte que le bot me mette un DM chaque fois que quelqu'un signale un problème avec ledit bot, mais chaque fois que la commande est exécutée, je continue à recevoir l'erreur de console suivante:

               user.send('An issue was reported by ' + message.author.username + ' in ' + message.channel.name + ', ' + message.guild.name + ':\n' + args[1-100]);
                 ^

TypeError: Cannot read property 'send' of undefined
    at Client.<anonymous> (C:\Users\me\Desktop\Bot\index.js:50:18)
    at Client.emit (events.js:310:20)
    at MessageCreateAction.handle (C:\Users\me\Desktop\Bot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:\Users\me\Desktop\Bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (C:\Users\me\Desktop\Bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)
    at WebSocketShard.onPacket (C:\Users\me\Desktop\Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22)
    at WebSocketShard.onMessage (C:\Users\me\Desktop\Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
    at WebSocket.onMessage (C:\Users\me\Desktop\Bot\node_modules\ws\lib\event-target.js:125:16)
    at WebSocket.emit (events.js:310:20)
    at Receiver.receiverOnMessage (C:\Users\me\Desktop\Bot\node_modules\ws\lib\websocket.js:800:20)

Voici mon code:

const user = bot.users.cache.get('698238773657483344');
 case 'report':
            message.channel.bulkDelete(1);
            message.channel.send('report sent')
            console.log('An issue was reported by ' + message.author.username + ' in ' + message.channel.name + ', ' + message.guild.name + ': ' + args);

            user.send('An issue was reported by ' + message.author.username + ' in ' + message.channel.name + ', ' + message.guild.name + ':\n' + args[1-100]);
            break;

Remarque: ce n'est pas mon ID utilisateur réel.

Une autre note: l'extrait de code fait partie d'une boucle de commutation et le const est en haut de mon code, pas dans la boucle elle-même

J'apprécierais vraiment si quelqu'un connaissait la solution à ce problème.

0
Dark Encrypter 19 mai 2020 à 15:49

3 réponses

Meilleure réponse

Il semble que l'utilisateur visé ne soit pas mis en cache, vous pouvez utiliser .fetch() method pour être sûr de l'obtenir au cas où il ne serait pas mis en cache (s'il est disponible dans le cache, le bot utilisera le cache à la place)

// This will fetch the user with the 698238773657483344 ID.
bot.users.fetch("698238773657483344").then(user => {
    // Up to you here to adapt to your code, at this state, if user is undefined
    // it means the ID is wrong / there is an issue while fetching.
});

Si vous n'avez besoin que de la variable user dans votre cas report, vous pouvez le faire comme ceci:

case 'report':
    bot.users.fetch("698238773657483344").then(user => {
        message.channel.bulkDelete(1);
        message.channel.send('report sent');
        console.log('An issue was reported by ' + message.author.username + ' in ' + message.channel.name + ', ' + message.guild.name + ': ' + args);

        user.send('An issue was reported by ' + message.author.username + ' in ' + message.channel.name + ', ' + message.guild.name + ':\n' + args[1-100]);
    });

    break;
1
Draityalan 19 mai 2020 à 15:08

Êtes-vous sûr que ce bot est votre client? const bot = new Discord.Client (options); bot.users.cache.get ('698238773657483344'); si vous avez un client comme client, essayez client.users.cache.get('id')

Regardez ici

1
Blobslam 19 mai 2020 à 13:14

Je l'ai essayé de mon côté et cela a bien fonctionné, ma seule hypothèse est que cet utilisateur n'a pas encore été mis en cache par le bot. L'utilisateur de cet identifiant partage-t-il une guilde avec le bot? Lisez ici

.users - Tous les objets User qui ont été mis en cache à tout moment, mappés par leurs ID

1
Viriato 19 mai 2020 à 13:27