Discord.js多Bot异常:clientHook触发逻辑却由client执行
问题分析与解决办法
问题出在你调用joinVoiceChannel时指定的adapterCreator是从client实例获取的,而非clientHook。这就导致不管监听的是哪个Bot的消息事件,最终都是client执行加入语音频道的操作,和事件触发的实例无关。
修正方案
把adapterCreator的来源改成clientHook对应的服务器实例,或者更稳妥的方式是直接使用消息事件里的message.guild来获取,避免硬编码服务器ID:
clientHook.on("messageCreate", async (message) => { if (message.author.bot && message.content.startsWith("You casted")) { // 先判断服务器是否存在,避免报错 if (!message.guild) return; joinVoiceChannel({ channelId: Fishgame[castStrength], guildId: message.guild.id, adapterCreator: message.guild.voiceAdapterCreator, }); } });
额外注意事项
- 确认
clientHook已正常登录,且拥有目标服务器的语音频道访问权限 - 检查
clientHook的Intents是否包含GUILD_VOICE_STATES等语音相关必要权限 - 验证
Fishgame[castStrength]返回的频道ID是有效的、存在的语音频道ID
内容的提问来源于stack exchange,提问作者TheKamek
相关产品推荐
相关产品推荐

