【问题标题】:message event listener not working properly消息事件侦听器无法正常工作
【发布时间】:2021-01-31 06:16:48
【问题描述】:

我目前有以下代码:

const Discord = require('discord.js');
const client = new Discord.Client({
    partials: ['MESSAGE', 'CHANNEL', 'REACTION']
});
const db = require('quick.db')

client.on('message', async message => {
    const DmLogger = require('./MainServer/dmRecieving.js');
    DmLogger(client, message, Discord);
    const levels = require('./MainServer/levels/main.js');
    levels(client, message)


    if (message.channel.id === configFile.LoggingChannel) return;
    if (message.author.bot) return;
    if (!message.guild) return;
    let prefix = db.get(message.guild.id + '.prefix') || '~'
    if (!message.content.startsWith(prefix)) return;
    let args = message.content
      .slice(prefix.length)
      .trim()
      .split(/ +/g);
    if (message.content.toLowerCase() == prefix + 'info') {
      const commandFile = require(`./Embeds/info.js`);
      return commandFile(client, message);
    }
    if (message.content.toLowerCase() == prefix + 'help') {
      const commandFile = require(`./Embeds/help.js`);
      return commandFile(client, prefix, message);
    }
    if (message.content.toLowerCase() == prefix + 'fonts') {
      const commandFile = require(`./Commands/font.js`);
      return commandFile(client, msg, args, prefix, message);
    }
    if (message.content.toLowerCase().startsWith(prefix + 'setup')) {
      const commandFile = require(`./Commands/setup/main.js`);
      return commandFile(client, message, db);
    }
  });

每当我发送包含命令的消息时,事件侦听器都会触发,但它不会检测到消息内容。
这个模块在过去的几个月里一直运行良好,只是在我重新安装 discord.js 模块后突然出错。

【问题讨论】:

  • 我不知道这个模块,但如果你刚刚更新到 Discord.js v12,它可能会破坏一些东西。尝试查看模块在 v12 上的工作方式是否有所不同
  • 我从未使用过低于 12 版的 discord.js

标签: discord.js


【解决方案1】:

在 discord.js v13 中,需要在 new discord.Client() 中指定意图。不接收指定意图以外的事件。
ClientOptions
Intents#FLAGS

要接收message 事件,您需要GUILDSGUILD_MESSAGES 意图。

你是说……

const client = new Discord.Client({
    partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
    intents: [Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES]
});

或者接收所有(包括特权意图)事件...

const client = new Discord.Client({
    partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
    intents: Object.keys(Discord.Intents.FLAGS)
});

另外,在 discord.js v13 中,message 事件已被弃用,因此建议将其替换为 messageCreate

- client.on('message', async message => {
+ client.on('messageCreate', async message => {

【讨论】:

    【解决方案2】:

    从 discord.js v13 开始,您需要声明您的机器人正在使用 Intents 做什么

    以下是您声明它们的方式:

    const client = new Discord.Client({ 
       partials: ['MESSAGE', 'CHANNEL', 'REACTION'], 
       intents: ['GUILD_MESSAGES']        
    })
    

    GUILD_MESSAGES Intent 是必不可少的,因为它允许您的机器人阅读和回复公会中的消息。 但是,您应该检查 documentation 以查看您的机器人是否需要更多 Intents

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2017-06-08
      • 1970-01-01
      相关资源
      最近更新 更多