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

Posted

技术标签:

【中文标题】Discord Bot 回复自己,无法识别 message.author.bot【英文标题】:Discord Bot replying to itself, doesn't recognize message.author.bot 【发布时间】:2019-03-05 13:19:41 【问题描述】:

所以我有一个机器人,我试图用“我们爱 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: 无法读取未定义的属性“bot”

从discord.js bot replies to itself 之类的帖子看来,该解决方案适用于人们,但不适用于我。

我在做什么不同?

谢谢!

【问题讨论】:

您链接到的可能解决方案的线程是针对与您使用的不同的 discord JS 库 【参考方案1】:

嗯嗯....乍一看似乎是范围问题。不确定您正在构建什么,您可能想阅读MCV。需要清理我构建的小机器人并将其发布在github上,明天我会发布它。正在试验短期记忆阵列。但是通过快速查看和测试,它可以正常工作:

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 在你的我相信它会回复异步或返回,所以你只需要调用作为方法的一部分存在的内置原型方法。 API Docs 中还有很多其他内容。

【讨论】:

感谢您的回复!如果该信息有帮助,我会将完整代码添加到帖子中。 快速浏览后我会说切换到discord.js。社区回声听起来好像 io 不再得到很好的支持。 js 是 rad 并且在大门外工作得很好......偷了这个Gist并建造了一个东西。试试看,ES6 也是,这是新的 javascript,你应该用什么写... 感谢您的建议,在此之前我真的不知道 discord.io 和 discord.js 之间有区别(这是我的第一个机器人,我遵循了一些在线教程)但是 discord.js容易多了。谢谢! 是的,不用担心,如果您想查看,请清理 repo。这是对该要点的扩展,当时正在构建一个 python 脚本以仅根据用户输入构建响应,但放弃了它......有趣的东西。【参考方案2】:

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

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

【讨论】:

"如果 (message.userID === mybot.userID) 返回;"不返回错误,但机器人也不回复任何人 P.S.我将尝试在 discord.js 中重建机器人,因为当我将来添加更多代码时,这将不那么令人头疼,但我想我仍然很好奇我必须做些什么才能使其工作它代表了(将来查看此主题的其他人也可能如此) 这个答案是直接的问题。 message.author 是未定义的元素。如果您继续使用discord.io 进行构建,则希望控制台注销message 变量并查看其中存储的内容...

以上是关于Discord Bot 回复自己,无法识别 message.author.bot的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Discord bot 无法识别命令?

Discord bot没有回复消息[重复]

Python,Discord bot 未回复消息且终端未更新

JS Discord Bot 上线但不回复消息 [重复]

Discord bot命令不起作用返回错误

Discord Bot JS:编辑来自先前斜杠命令交互的回复