为啥我的不和谐机器人不知道它的@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().idclient.user.id

最好的问候 不和谐专家

【讨论】:

嗯,还是不行……我会编辑帖子来采纳你的建议。 你可以试试message.mentions.users.first,而不是message.isMentioned(client.user)【参考方案2】:

好的,我在这里回答我自己的帖子,因为我发现了问题。出于某种原因,使用 === 而不是 == 会阻止它工作。我不知道为什么。

【讨论】:

这两个运算符的区别见here。 要回答为什么它不适用于===:在定义command 变量的行的末尾,你有.split(/ +/g);.split 创建一个段数组,因此您的 command 变量是一个数组。在这种情况下,它只包含 1 个字符串“帮助”。因此,当您尝试 === 时,您正在将数组与字符串进行比较,但失败了。

以上是关于为啥我的不和谐机器人不知道它的@Mention?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的不和谐机器人命令不起作用

为啥我的不和谐机器人只执行一次我的命令,而且只执行一次?

为啥当我输入 node main.js 时我的不和谐机器人无法上线?

Heroku 部署了我的不和谐机器人,但它的命令不起作用

为啥我托管在 heroku 上的不和谐机器人随机关闭?

试图制作一个命令页面来列出我的不和谐机器人上的所有命令,但不知道如何[关闭]