首页 > 解决方案 > 为什么我的机器人在使用一次后会因未定义的错误而崩溃?

问题描述

我为我的不和谐机器人准备了这组代码,如果你知道那是什么,它应该可以通过说、拥抱或亲吻命令来工作。

问题是它工作一次然后由于显示名称未定义而崩溃?

这是我的代码:

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

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

client.on('message', message => { 
  let personTagged = message.mentions.members.first();
  message.channel.send(message.author.username + ' has shelled ' + personTagged.displayName + ' ' + doshellAction());
});

function doshellAction() {
    var rand = [
        'https://media.discordapp.net/attachments/690130408276230195/712567336971927582/ku-xlarge_2.gif',
        'https://media.discordapp.net/attachments/690127154742165504/712574767357493248/giphy_1.gif',
        'https://media.discordapp.net/attachments/690130408276230195/712586095908487168/SizzlingFrailItaliangreyhound-size_restricted.gif',
        'https://media.discordapp.net/attachments/690130408276230195/712586190418608149/NegligibleColorfulAfricanrockpython-size_restricted.gif',
        'https://media.discordapp.net/attachments/690130408276230195/712586220907003944/BruisedSparseButterfly-max-1mb.gif'

    ];
    return rand[Math.floor(Math.random() * rand.length)];
}

client.login('removed for privacy');

标签: javascriptdiscorddiscord.js

解决方案


您没有检查任何类型的前缀,因此您的代码被机器人看到的任何消息触发,这些消息并不总是提到某人。您可以采取的措施是在运行代码之前添加检查,以确保用户确实打算与您的机器人交互:

client.on('message', message => {
   if (!message.content.startsWith('shell')) return;
   let personTagged = message.mentions.members.first();
   message.channel.send(message.author.username + ' has shelled ' + personTagged.displayName + ' ' + doshellAction())
});

在上面的示例中,我们检查消息是否以 开头shell,如果不是则返回。为了触发您的代码,用户将发布shell @someone到机器人可以看到的任何频道。


推荐阅读