【问题标题】: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 事件具有可用的完整成员对象。

    【讨论】:

    • 我编辑了我的答案,请尝试一下
    猜你喜欢
    • 2021-12-13
    • 2021-06-26
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2022-11-14
    • 2021-07-27
    相关资源
    最近更新 更多