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

Discord.js机器人实现跟随特定用户加入语音频道的问题求助

Discord.js 机器人实现指定用户语音跟随的解决方案

核心优化思路

不用遍历频道成员列表,voiceStateUpdate事件的oldState和newState本身就对应单个用户的状态变更,直接通过newState.member.id判断是否为目标用户即可,逻辑更简洁高效。

完整实现步骤与代码

  1. 定义目标用户ID常量
const TARGET_USER_ID = '替换为你要跟随的用户ID';
  1. 完善语音状态监听逻辑
client.on('voiceStateUpdate', async (oldState, newState) => {
    // 仅处理目标用户的状态变更
    if (newState.member.id !== TARGET_USER_ID) return;

    // 目标用户离开语音频道时,机器人退出对应频道
    if (newState.channelId === null) {
        if (oldState.guild.members.me.voice.channelId) {
            await oldState.guild.members.me.voice.disconnect();
            console.log('目标用户离开,机器人退出频道');
        }
        return;
    }

    // 目标用户从无频道状态加入新频道时,机器人跟进
    if (oldState.channelId === null) {
        await newState.channel.join();
        console.log('目标用户加入频道,机器人已跟进');
        return;
    }

    // 目标用户切换频道时,机器人同步切换
    if (oldState.channelId !== newState.channelId) {
        if (oldState.guild.members.me.voice.channelId) {
            await oldState.guild.members.me.voice.disconnect();
        }
        await newState.channel.join();
        console.log('目标用户切换频道,机器人已跟进');
    }
});

关键细节说明

  • 用async/await处理异步操作:join()和disconnect()都是异步方法,确保操作执行顺序正确。
  • 避免重复操作:每次执行前判断机器人当前的语音状态,防止重复调用join()引发异常。
  • 覆盖全场景:包含用户加入、离开、切换频道三种核心场景,保证跟随逻辑完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:33:17