You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用discord.py检测语音频道成员视频开启状态及全员开启验证

使用discord.py检测语音频道成员的视频状态

没问题,我来帮你搞定这两个关于语音频道视频状态检测的问题:

1. 检测单个成员是否开启视频

在discord.py中,每个成员的语音状态都封装在VoiceState对象里,其中的video属性就是用来判断该成员是否开启视频的——它会返回一个布尔值(True表示开启,False表示未开启)。

不过要注意:只有当成员确实在某个语音频道里时,member.voice才会有值,否则会是None,直接访问video会报错,所以一定要先做判断。

这里有个简单的命令示例:

@bot.command()
async def check_video(ctx, member: discord.Member):
    # 先判断成员是否在语音频道
    if not member.voice:
        await ctx.send(f"{member.display_name} 目前不在任何语音频道中哦!")
        return
    # 检查视频状态
    status = "已经开启了视频" if member.voice.video else "还没开启视频"
    await ctx.send(f"{member.display_name} {status}。")

2. 检测频道内所有成员是否均开启视频

当然可行!核心思路就是遍历目标语音频道里的所有成员,逐一检查他们的video状态。你可以根据需求过滤掉机器人(毕竟机器人一般不会开视频),然后收集未开启视频的成员列表,最后判断这个列表是否为空。

下面是一个实用的命令示例,会检查你当前所在的语音频道:

@bot.command()
async def check_all_video(ctx):
    # 先判断发送命令的用户是否在语音频道
    if not ctx.author.voice:
        await ctx.send("你得先加入一个语音频道才能使用这个命令呀!")
        return
    
    target_channel = ctx.author.voice.channel
    # 收集未开视频的成员(排除机器人)
    no_video_members = []
    for member in target_channel.members:
        if member.bot:
            continue
        if not member.voice.video:
            no_video_members.append(member.display_name)
    
    # 根据结果发送不同消息
    if not no_video_members:
        await ctx.send("太棒了!频道里所有成员都已经开启视频啦 🎉")
    else:
        await ctx.send(f"注意:以下成员还没开启视频:{', '.join(no_video_members)}")

额外注意事项

  • 确保你使用的是discord.py v2.x及以上版本VoiceState.video属性是在较新版本中加入的,旧版本可能没有这个属性。
  • 机器人需要有访问语音频道成员列表的权限,一般默认的权限就足够,但如果你的服务器设置了严格的权限,记得给机器人开启“查看频道”和“连接语音频道”的权限。

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

火山引擎 最新活动