javascript - 为什么我的机器人在使用一次后会因未定义的错误而崩溃?
问题描述
我为我的不和谐机器人准备了这组代码,如果你知道那是什么,它应该可以通过说、拥抱或亲吻命令来工作。
问题是它工作一次然后由于显示名称未定义而崩溃?
这是我的代码:
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');
解决方案
您没有检查任何类型的前缀,因此您的代码被机器人看到的任何消息触发,这些消息并不总是提到某人。您可以采取的措施是在运行代码之前添加检查,以确保用户确实打算与您的机器人交互:
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
到机器人可以看到的任何频道。
推荐阅读
- android - Android io.card:android-sdk 警告
- mysql - 分组行时选择MySQL中最旧的时间戳
- swift - The begining of a day (not today)
- sql-server - 下面的动态 SQL 失败,但当我手动运行它时工作正常
- c++ - 如何在 openCL 中运行 hello world 程序?
- python - 使用列的唯一值作为索引对数据框进行分组
- jquery - 带有 Bootstrap 切换和切换事件的 Laravel 6 不适用于 jQuery
- python-requests - 为什么响应在 python 中发送 400 错误?
- python - 为什么 Haar 级联嘴检测不起作用?
- javascript - 从 promise 导出结果然后阻塞