You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Discord机器人无法记录含*quota的消息

问题排查与修复方案

核心问题分析

你的代码无法工作主要有以下几个原因:

  1. 事件名称过时:Discord.js v14及以上版本已将原message事件更名为messageCreate,旧事件名不会触发任何逻辑。
  2. 频道获取方法失效:v12+版本中,client.channels.get()已被废弃,需改用client.channels.cache.get()来获取频道。
  3. 冗余判断逻辑:代码中先通过if (!message.guild) return;排除了非服务器消息,后续的if (message.guild)判断完全多余。

修正后的代码

以下是适配Discord.js v14+的可用代码:

client.on('messageCreate', message => {
    // 跳过私人消息
    if (!message.guild) return;
    // 仅处理包含"*quota"的消息
    if (!message.content.includes('*quota')) return;

    // 格式化日志内容
    const msgLog = `[MESSAGE] [${message.guild.name}] [#${message.channel.name}] ${message.author.username}#${message.author.discriminator}: ${message.content}\n`;
    
    // 获取目标日志频道
    const logChannel = client.channels.cache.get('1146474290624081950');
    
    // 发送日志并处理可能的错误
    if (logChannel) {
        logChannel.send(msgLog).catch(err => console.error('日志发送失败:', err));
    } else {
        console.error('未找到指定的日志频道,请检查ID是否正确');
    }
});

额外注意事项

  • 确保机器人在目标服务器中拥有读取消息、发送消息的权限,且能正常访问日志频道。
  • 若使用Discord.js v12-v13版本,事件名仍使用message,但频道获取仍需保留client.channels.cache.get()。
  • 添加错误捕获可以帮你快速定位问题(比如频道ID错误、权限不足等)。

内容的提问来源于stack exchange,提问作者Anonymous learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:42:42