我目前正在编写我的第一个discord bot,它已经可以播放YouTube音乐了。
if (message.content.includes("Good Job") ||
message.content.includes("good job")) {
message.channel.sendMessage("Good Job everyone :smirk:");
}
如你所见,如果有人打字,那么好工作" (这只是一个例子)然后机器人将回答"好工作每个人:smirk :),然后垃圾邮件将开始:机器人读取他自己的消息并回复它。
如何防止机器人自行回答?
答案 0 :(得分:15)
在消息事件中使用此项:
"test1","test2","test3","test4","test5"
了解更多信息: https://anidiotsguide.gitbooks.io/discord-js-bot-guide/coding-guides/a-basic-command-handler.html
答案 1 :(得分:4)
您的机器人回复自己的原因是因为您放置的位置:
if(message.content.includes(“Good Job”)|| message.content.includes(“good job”))
如果一段文字包含“好工作”或“好工作”,基本上是检查聊天。你的机器人发送:
message.channel.sendMessage(“Good job everyone:smirk:”);
作为答案,它会创建一个循环,因为该消息包含单词 “Good Job”,基本上是一次又一次地运行代码。
当然,解决这个问题的最简单方法是让你改变答案,不要包含 Good Job 这两个词,但有更好的解决方案可以确保它不会发生你可能做的所有命令。
正如@Jörmungandr所说,在消息事件中包括:
if(message.author.bot)return;
确保不会发生。它基本上检查消息的作者是否是机器人,如果是,则忽略它。
答案 2 :(得分:0)
您只需检查发送邮件的用户是否为机器人。例如:
if (!msg.author.bot) {
<Your code to execute if the user is not a bot.>
}
希望这很有帮助,谢谢!
答案 3 :(得分:0)
// In message event
if(message.author.id === client.user.id) return;
// I would recommend a variable like this for splits on words
// const args = message.content.trim().split(/\s+/g);
// You could also .slice() off a prefix if you have one
if(/good job/i.test(message.content)) {
message.channel.send('Good job everyone :smirk:'); // sendMessage is deprecated, use send instead
}
答案 4 :(得分:0)
如果作者是机器人,则可以使用以下代码避免执行任何操作:
if(message.author.bot) return;