Discord.js v12开发modmail系统message.author.id返回botID如何解决
Discord.js v12 Modmail 消息ID异常修复方案
问题根因
message事件会捕获所有Bot可见的消息,包含Bot自身向用户DM发送的回复消息,这部分消息的message.author就是Bot本身,因此会出现打印的ID始终是BotID的问题,未加过滤还可能导致消息循环发送的异常。
修复代码
在事件回调开头新增Bot消息过滤逻辑,同时补充异常判空避免报错:
client.on('message', message => { // 过滤所有Bot发送的消息,优先跳过自身消息处理 if (message.author.bot) return; if(db.has(`ticket-${message.author.id}`)){ console.log(message.author.id) if(message.channel.type === "dm"){ const channel = client.channels.cache.find(c => c.name === `ticket-${message.author.id}` && c.type === 'text'); // 频道不存在时跳过发送,避免报错 channel?.send(message.content) } } })
版本适配注意事项
- Discord.js v12 需要主动配置
DIRECT_MESSAGES意图才能正常接收DM消息,初始化Client时参考配置如下:
const client = new Discord.Client({ ws: { intents: ['GUILDS', 'GUILD_MESSAGES', 'DIRECT_MESSAGES'] } });
- 若需要实现客服在工单频道的回复反向转发给用户,可额外添加工单频道的消息判断逻辑,同样需要先过滤Bot消息避免循环。
内容的提问来源于stack exchange,提问作者Cmb
相关产品推荐
相关产品推荐

