因此,我有一个机器人正在尝试通过“我们爱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之类的线程看来,该解决方案适用于人们,但不适用于我。
我在做什么不同的事情?
谢谢!
答案 0 :(得分:2)
错误告诉您message.author
是undefined
,因此bot
不是有效的属性。您正在尝试使用另一个Discord库中的解决方案。
相反,请尝试检查用户或用户ID是否与漫游器匹配,然后返回。
答案 1 :(得分:1)
Hmmmmm ....乍看起来似乎是一个范围界定问题。不确定要使用的是什么,您可能需要阅读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文档中还有很多其他内容。