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

Discord语音频道成员计数机器人优化:修复管理员移人计数失效问题

修正Discord机器人语音频道计数问题的方案

原代码存在几个核心问题导致计数失效:

  • 用局部变量members维护计数,每次事件触发都会重置为0,根本没法累积统计
  • 错误地把Channel对象和字符串ID直接比较(比如before.channel != "id"),正确的做法应该比较频道的id属性
  • 逻辑覆盖不全,管理员移动用户的场景没被正确识别

直接获取目标语音频道的实时成员数是最可靠的方案,不用手动维护计数,能完全覆盖用户自主进出、管理员移动用户的所有场景。修正后的代码如下:

@bot.event
async def on_voice_state_update(member, before, after):
    # 替换成你的目标语音频道ID(注意是整数类型,不要加引号)
    target_voice_channel_id = 123456789012345678
    # 替换成你的目标文本频道ID
    target_text_channel_id = 987654321098765432
    
    # 获取目标语音频道对象
    target_voice_channel = bot.get_channel(target_voice_channel_id)
    if not target_voice_channel:
        return  # 如果频道不存在,直接返回
    
    # 获取频道内的成员数量(排除机器人)
    member_count = len([m for m in target_voice_channel.members if not m.bot])
    
    # 当成员数刚好等于3时发送消息
    if member_count == 3:
        target_text_channel = bot.get_channel(target_text_channel_id)
        if target_text_channel:
            await target_text_channel.send("目标语音频道现在有3名成员啦!")

代码说明:

  • 直接通过target_voice_channel.members获取频道内的所有成员,过滤掉机器人后统计数量,完全同步真实成员状态
  • 不管用户是自主进出、被管理员移动,只要频道成员数变化,都会触发统计,不会遗漏任何场景
  • 用整数类型的ID(不要加引号),因为Discord的频道ID是整数,原代码里的字符串ID会导致比较错误
  • 增加了频道存在性判断,避免因频道不存在导致报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:09:13