找不到让我的 discord.js 机器人检测消息的方法 [重复]

Posted

技术标签:

【中文标题】找不到让我的 discord.js 机器人检测消息的方法 [重复]【英文标题】:Can't find a way to make my discord.js bot detect messages [duplicate] 【发布时间】:2021-10-29 00:36:39 【问题描述】:
import  Client, Intents  from 'discord.js';
const client = new Client( intents: [Intents.FLAGS.GUILDS] );

client.once('ready', () => 
    console.log('Ready!');
);
client.on("message", async msg => 
    if (msg.content === "ping") 
        console.log("ping")
        msg.reply("pong")
    
);

client.login(token);

我正在使用 discord.js v13,机器人正确登录并输出“Ready!”然后当我在服务器中输入一条消息时,它甚至没有console.log

任何帮助表示赞赏,在此先感谢。

【问题讨论】:

也复制了:“message event listener not working properly”、“Having trouble sending a message to a channel with Discord.js”、“Discord bot is not replying to messages”。 【参考方案1】:

您需要启用GUILD_MESSAGES Intent 才能接收消息事件。此外,正如 CcmU 所说,message 事件已被弃用,应替换为messageCreate

// ...
const client = new Client( intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] );
// ...
client.on("messageCreate", async msg =>  /* ... */ )
// ...

【讨论】:

【参考方案2】:

从docs 可以看出,事件message 已被弃用。如果您想监听任何新消息,您可以使用事件 messageCreated 的监听器。

所以你可以尝试类似的东西

client.on('messageCreate', async msg => 
  if (msg.content === "ping") 
    console.log("ping");
    msg.reply("pong");
  
);

编辑:

正如@chickensalt 所指出的,您必须在您的Intents 中声明用于处理消息的适当的Intents.FLAGS.GUILD_MESSAGES。因此,在创建 Client 时:

const client = new Client( intents: [Intents.FLAGS.GUILDS, Intent.FLAGS.GUILD_MESSAGES] );

但请记住根据您的需要使用正确的 Intent,因为您在正确处理内存方面可能会遇到一些麻烦。正如docs 建议的那样:

对于较大的机器人,客户端状态可能会变得非常大。我们建议仅将对象存储在机器人操作所需的内存中。例如,许多机器人只是通过聊天命令响应用户输入。这些机器人可能只需要在内存中保存公会信息(如公会/频道角色和权限),因为 MESSAGE_CREATEMESSAGE_UPDATE 事件具有可用的完整成员对象。

【讨论】:

我编辑了我的答案,请尝试一下

以上是关于找不到让我的 discord.js 机器人检测消息的方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 Discord.JS 机器人对其自己的直接消息做出反应?

Discord.js:机器人看不到消息

Discord js检测其他机器人的消息

Discord.js V13 使用斜线命令时添加角色

Discord.js 我的机器人在 Heroku 上托管时找不到任何父或子频道

如何让我的 discord.py 机器人提及我的消息中提到的某人?