为什么我的不和谐机器人不知道它的@Mention?

时间:2019-05-16 08:31:55

标签: javascript node.js discord.js

我正在开发一个不和谐的机器人(这只是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"

所以它知道命令===“ help”,所以为什么不执行if语句?

2 个答案:

答案 0 :(得分:1)

当人们对您发出不和谐的声音ping时,ID就会跟不和谐的内容一样出现, 所以实际上是:

  

<@ USERID>

我建议您探索message.mentions.users.first() 并将其与您的client.user

进行比较

或者message.mentions.users.first().idclient.user.id

最好的问候 不和谐专家

答案 1 :(得分:0)

好的,我在这里回答自己的帖子,因为我发现了问题。由于某些原因,使用===而不是==使其无法工作。我不知道为什么。