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

Discord Bot能否通过member.activity判断活动?匹配VS Code活动失败求助

解决方法

你的两种写法都存在逻辑错误,导致无法正确判断成员活动:

错误原因分析

  • 第一种写法:直接将member.activity和新创建的discord.Activity(name='Visual Studio Code')对象做对比。即使两者的name属性相同,它们是不同的对象实例,所以永远不会相等。
  • 第二种写法:member.activity是Activity类型的对象,而discord.ActivityType.playing是枚举值,类型不匹配,对比结果永远为False。

正确实现步骤

  1. 启用必要的网关意图
    要获取成员的活动状态,需要在Discord开发者门户的Bot设置中开启Server Members Intent和Presence Intent,并在代码中启用:
intents = discord.Intents.default()
intents.members = True
intents.presences = True

bot = commands.Bot(command_prefix='!', intents=intents)
  1. 修正判断逻辑
    遍历成员时,先判断member.activity是否不为空,再检查活动名称是否匹配,还可以根据需要筛选活动类型(比如Playing类型):
@tasks.loop(seconds=5)
async def task_loop():
    channel = bot.get_channel(1120312276579266590)
    # 确保频道存在
    if not channel:
        return
    for member in bot.guilds[0].members:
        # 先判断活动是否存在
        if member.activity:
            # 检查活动名称是否匹配,可根据需要添加类型判断
            if member.activity.name == 'Visual Studio Code':
                # 可选:仅匹配Playing类型的活动
                # if member.activity.type == discord.ActivityType.playing and member.activity.name == 'Visual Studio Code':
                await channel.send(member.mention)
                await channel.send(str(member.activity))

额外注意事项

  • 确保Bot有查看成员活动的权限,并且目标服务器中Bot的角色位置高于要查看的成员角色(避免无法获取部分成员的信息)。
  • 部分自定义活动的名称可能带有额外后缀或格式,可根据实际获取到的member.activity.name调整匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:22:36