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

响应remove指令随机踢群组语音成员的Discord Bot开发问题

Discord机器人随机移出语音频道成员实现方案

前置条件

首先确认你的机器人已经开启了对应服务器的「移动成员」权限,否则无法执行断开语音的操作。

现有代码问题修正

你的现有代码存在几个需要调整的点:

  • 生成的随机数x未被使用,固定取peope[0]无法实现随机选人的效果
  • 直接从全局用户缓存取User对象不包含服务器内的语音状态信息,需要取服务器内的GuildMember对象
  • user.kick是踢人出服务器的方法,和你移出语音频道的需求不符,且你没有加括号执行该方法
  • 循环容错逻辑冗余,可以优化

完整可运行代码示例

// 适配discord.js v14版本,旧版本API会有差异
if(message.content == "remove"){
    // 过滤私聊消息
    if(!message.guild) return;
    try {
        // 按peope数组实际长度生成随机数,不要写死固定值
        const x = Math.floor(Math.random() * peope.length);
        // 从当前服务器成员缓存中查找目标用户
        const targetMember = message.guild.members.cache.find(member => member.user.username === peope[x]);
        // 校验用户状态:存在且已加入语音频道
        if(!targetMember || !targetMember.voice.channel) {
            return console.log("目标用户不存在或未加入语音频道");
        }
        // 断开语音连接,即实现移出语音频道效果
        targetMember.voice.disconnect();
        console.log(`已移出语音频道:${targetMember.user.username}`);
    } catch (err) {
        console.error("操作失败:", err);
    }
}

补充说明

  • 如果你的peope数组存储的是用户ID而非用户名,查找时可以直接用message.guild.members.cache.get(peope[x]),匹配效率更高,也不会出现用户名重复的问题
  • 如果成员缓存里找不到目标用户,可以开启服务器成员缓存,或者调用message.guild.members.fetch()主动拉取成员列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:04