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

Discord.py中tasks.loop定时任务内Guild成员计数无法同步更新

discord.py 定时任务获取的服务器成员数不刷新问题

问题根源

当前代码中client_channel.guild取自本地缓存对象,其member_count属性仅在机器人收到对应网关事件时更新:

  • 若未显式开启members网关意图,机器人无法接收成员加入、退出的事件推送,本地缓存的member_count会一直停留在机器人启动时的初始值,只有重启机器人重新拉取初始数据才会刷新

解决方法

可根据你的场景二选一:

方法1:开启members意图,自动同步缓存

适合需要实时响应成员变更的场景,无需额外API请求:

  1. 代码初始化时配置意图:
    intents = discord.Intents.default()
    intents.members = True  # 显式开启成员意图
    bot = commands.Bot(command_prefix="你的前缀", intents=intents)
    
  2. 同步到Discord开发者门户的机器人管理页,开启Server Members Intent开关(平台强制要求,代码配置不生效的话先检查这里)

方法2:定时任务执行时主动拉取实时数据

适合仅需定期拉取数据、不想开启全量成员事件监听的场景:
修改你的定时任务代码:

@tasks.loop(hours=1)
async def update_embed(self):
    await self.bot.wait_until_ready()
    client_channel = self.bot.get_channel(channel_id)
    # 跳过本地缓存,主动拉取实时guild数据
    guild = await self.bot.fetch_guild(client_channel.guild.id)
    member_count = guild.member_count
    print(member_count)

注意事项

  • 方法1缓存自动同步,API调用少,适合需要频繁读取成员数的场景
  • 方法2每次定时任务仅多一次API请求,无常驻事件开销,适合低频率拉取的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 16:24:03