求助:Discord机器人无法记录含*quota的消息
问题排查与修复方案
核心问题分析
你的代码无法工作主要有以下几个原因:
- 事件名称过时:Discord.js v14及以上版本已将原
message事件更名为messageCreate,旧事件名不会触发任何逻辑。 - 频道获取方法失效:v12+版本中,
client.channels.get()已被废弃,需改用client.channels.cache.get()来获取频道。 - 冗余判断逻辑:代码中先通过
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
相关产品推荐
相关产品推荐

