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

如何获取指令发送者所在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:17:19