为啥我的不和谐机器人不知道它的@Mention?
Posted
技术标签:
【中文标题】为啥我的不和谐机器人不知道它的@Mention?【英文标题】:Why doesn't my discord bot know its @Mention?为什么我的不和谐机器人不知道它的@Mention? 【发布时间】:2019-10-03 11:21:56 【问题描述】:我正在开发一个不和谐的机器人(这只是 AI 模块,还有另一个连接到同一个机器人以获取命令和东西),但它不知道自己的@Mention。
const token = process.env.PixelBot_token;
const keep_alive = require('./keep_alive.js');
const sendReply = require('./sendReply.js');
const Discord = require('discord.js');
const client = new Discord.Client();
// Set the client user's presence
client.on('ready', () =>
var prefix = client.user.tag;
console.log('PixelBot AI Loaded!');
console.log(prefix);
);
client.on('message', message =>
if (message.author.bot) return;
var prefix = + client.user.tag;
console.log(prefix);
if (message.content.substring(0, prefix.length) === prefix)
//useful variables
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
if (command === "help")
console.info("Help Message Sent!\n");
;
;
);
client.login(token);
上面的代码打印出来:
PixelBot AI Loaded!
PixelBot#9188
但是当我发送@PixelBot 帮助时什么都不做。但是,如果我将前缀更改为字符串,例如:“pb”,它就可以工作。它显然在“client.on('ready')”中知道它,因为它被打印出来了。有什么想法吗?
编辑:这是@Discord Expert 建议的代码:
const token = process.env.PixelBot_token;
const keep_alive = require('./keep_alive.js');
const sendReply = require('./sendReply.js');
const Discord = require('discord.js');
const client = new Discord.Client();
// Set the client user's presence
client.on('ready', () =>
console.log('PixelBot AI Loaded!');
);
client.on('message', message =>
if (message.author.bot) return;
if (message.mentions.users.first() === client.user)
//useful variables
const command = message.content.slice(message.mentions.users.first().length).trim().split(/ +/g);
const identifier = command.shift().toLowerCase();
console.log('identifier = "' + identifier + '"');
console.log('command = "' + command +'"');
console.log('message content = "' + message.content + '"');
if (command === "help")
console.info("Help Message Sent!\n");
;
;
);
client.login(token);
打印出来:
PixelBot AI Loaded!
identifier = "<@569971848322744320>"
command = "help"
message content = "<@569971848322744320> help"
所以它知道command === "help",那为什么不执行if语句呢?
【问题讨论】:
【参考方案1】:当人们在 discord 上 ping 你时,一个 ID 会跟 discord 上的所有内容一样, 所以实际上是:
我建议探索message.mentions.users.first()
并将其与您的 client.user
进行比较
或者message.mentions.users.first().id
和client.user.id
最好的问候 不和谐专家
【讨论】:
嗯,还是不行……我会编辑帖子来采纳你的建议。 你可以试试message.mentions.users.first
,而不是message.isMentioned(client.user)
【参考方案2】:
好的,我在这里回答我自己的帖子,因为我发现了问题。出于某种原因,使用 ===
而不是 ==
会阻止它工作。我不知道为什么。
【讨论】:
这两个运算符的区别见here。 要回答为什么它不适用于===
:在定义command
变量的行的末尾,你有.split(/ +/g);
。 .split
创建一个段数组,因此您的 command
变量是一个数组。在这种情况下,它只包含 1 个字符串“帮助”。因此,当您尝试 ===
时,您正在将数组与字符串进行比较,但失败了。以上是关于为啥我的不和谐机器人不知道它的@Mention?的主要内容,如果未能解决你的问题,请参考以下文章