响应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
相关产品推荐
相关产品推荐

