【问题标题】:Can't find a way to make my discord.js bot detect messages [duplicate]找不到让我的 discord.js 机器人检测消息的方法 [重复]
【发布时间】: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
任何帮助表示赞赏,在此先感谢。
【问题讨论】:
标签:
javascript
node.js
discord.js
【解决方案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_CREATE 和 MESSAGE_UPDATE 事件具有可用的完整成员对象。