使用一次后,为什么我的机器人崩溃并出现未定义的错误?

时间:2020-05-20 18:58:44

标签: javascript discord discord.js

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

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

这是我的代码:

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');

1 个答案:

答案 0 :(得分:0)

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

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发布到漫游器可以看到的任何频道。