如何获取指令发送者所在VC用户数并添加VC使用权限校验
解决Discord机器人语音频道指令问题
需求说明
- 限制指令仅允许处于语音频道(VC)的用户使用,未在VC的用户执行时提示:
你不在语音频道中,无法执行此指令 - 正确获取用户所在VC的当前用户数量,显示为「当前人数/频道上限」的格式
问题原因
你之前的代码直接使用interaction.user.voice.channel.members,这个属性返回的是频道内成员的对象集合,不是数量,所以拼接后会显示对象的字符串表示,而非预期的数字。
修正后的代码实现
1. 先做VC权限校验
# 检查用户是否处于语音频道 if not interaction.user.voice or not interaction.user.voice.channel: await interaction.response.send_message("你不在语音频道中,无法执行此指令", ephemeral=True) return
2. 正确获取并格式化人数信息
# 获取用户所在的语音频道对象 vc = interaction.user.voice.channel # 获取当前频道内的用户数量(可选择排除机器人) current_member_count = len([member for member in vc.members if not member.bot]) # 如果不需要排除机器人,直接用: # current_member_count = len(vc.members) # 处理频道上限:0表示无人数限制 channel_limit = vc.user_limit if vc.user_limit != 0 else "无上限" # 格式化目标字符串 value = f"{current_member_count}/{channel_limit}" # 发送结果 await interaction.response.send_message(f"当前语音频道人数:{value}")
说明
- 使用
len(vc.members)获取频道内成员的总数,这是实现数字显示的核心 - 针对无上限的频道(
user_limit=0)做了友好处理,显示为「无上限」 - 先校验用户是否在VC,避免后续调用
voice.channel时触发空指针异常
内容的提问来源于stack exchange,提问作者French fry with a fade
相关产品推荐
相关产品推荐

