Discord Bot 自我回复,无法识别 message.author.bot

Discord Bot replying to itself, doesn't recognize message.author.bot

所以我有一个机器人,我正在尝试使用 "We love Dan!" 对我所在的服务器响应 "Dan":

var Discord = require('discord.io');
var logger = require('winston');
var auth = require('./auth.json');
// Configure logger settings
logger.remove(logger.transports.Console);
logger.add(new logger.transports.Console, {
    colorize: true
});
logger.level = 'debug';
// Initialize Discord Bot
var mybot = new Discord.Client({
    token: auth.token,
    autorun: true
});
mybot.on('ready', function (evt) {
    logger.info('Connected');
    logger.info('Logged in as: ');
    logger.info(mybot.username + ' - (' + mybot.id + ')');
});
mybot.on('message', function (user, userID, channelID, message, evt) {
    if (message.author.bot) return;
    if (message.includes("Dan")) {
            mybot.sendMessage({
                to: channelID,
                message: 'We love Dan!',
            });
     }
});

我查过如何让机器人不回应自己,许多人建议这行代码

if (message.author.bot) return;

但是当我输入它时,我在命令提示符中收到此错误:

TypeError: Cannot read property 'bot' of undefined

从像 discord.js bot replies to itself 这样的帖子看来,该解决方案对人们有效,但不适合我。

我有什么不同之处?

谢谢!

Hmmmmm....乍一看像是范围界定问题。不确定您正在构建什么,您可能需要阅读 MCV。需要清理我构建的小机器人并 post 它在 github 上,明天我会 post 它。正在试验短期记忆阵列。但快速浏览一下并进行测试后,它就可以正常工作了:

const Discord = require("discord.js");
const client = new Discord.Client();
...
client.on("message", async message => {
  if (message.content.includes("Dan")){
    // right that is needed to kill the loop ->
    if(message.author.bot) return; 
    return message.reply("We love you Dan!");
    // could also use -> message.channel.send("We love you Dan!")
  } 
}

client 在我的例子中是 bot 我相信在你的例子中它会回复异步或 return 所以你只需要调用内置的原型方法作为方法的一部分存在。 API 文档中还有很多其他内容。

错误告诉您 message.authorundefined,因此 bot 不是有效的 属性。您正在尝试使用来自另一个 discord 库的解决方案。

相反,请尝试检查用户或用户 ID 是否与机器人匹配,然后 return。