discord.js bot回复自己

git*_*hub 10 javascript bots node.js discord discord.js

我目前正在编写我的第一个discord bot,它已经可以播放YouTube音乐了.

if (message.content.includes("Good Job") || 
    message.content.includes("good job")) {
    message.channel.sendMessage("Good Job everyone :smirk:");
}
Run Code Online (Sandbox Code Playgroud)

如你所见,如果有人输入"好工作"(这只是一个例子),那么机器人将回复"每个人都很好:smirk :),但随后垃圾邮件将开始:机器人读取他自己的消息并回复它.

如何防止机器人自行回答?

The*_*ion 7

你的机器人回复你自己的原因是因为你把:

if (message.content.includes("Good Job") || 
    message.content.includes("good job"))
Run Code Online (Sandbox Code Playgroud)

如果一段文本包含“干得好”或“干得好”的话,它基本上是在检查聊天。当您的机器人发送:

if (message.content.includes("Good Job") || 
    message.content.includes("good job"))
Run Code Online (Sandbox Code Playgroud)

作为答案,它创建了一个循环,因为该消息包含单词 "Good Job",基本上一次又一次地运行代码。

当然,解决此问题的最简单方法是更改​​它给出的答案,使其不包含Good Job一词,但有更好的解决方案来确保您可能执行的所有命令都不会发生这种情况。

正如@Jörmungandr 所说,在消息事件下包括:

message.channel.sendMessage("Good Job everyone :smirk:");
Run Code Online (Sandbox Code Playgroud)

以确保它不会发生。它本质上检查消息的作者是否是机器人,如果是,则忽略它。


小智 6

// 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
}
Run Code Online (Sandbox Code Playgroud)