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

discord.py机器人状态显示的服务器数量不更新如何解决

解决方案

你当前的代码仅在机器人启动触发on_ready事件时执行一次状态设置,后续机器人加入/退出服务器时没有对应逻辑触发状态更新,因此数值固定不变。你可以按以下步骤调整:

方法1:监听服务器进出事件触发更新(实时生效,资源占用低)

把更新状态的逻辑封装为独立函数,再绑定机器人加入、离开服务器的事件即可:

# 先封装通用的状态更新函数
async def update_guild_count_presence():
    activity = discord.Game(name=f"k.cmd for help! | {len(bot.guilds)} Guilds", type=3)
    await bot.change_presence(status=discord.Status.idle, activity=activity)

@bot.event
async def on_ready():
    # 启动时先初始化一次状态
    await update_guild_count_presence()
    print(f"logged in as {bot.user}")

# 机器人加入新服务器时触发更新
@bot.event
async def on_guild_join(guild):
    await update_guild_count_presence()

# 机器人离开/被踢出服务器时触发更新
@bot.event
async def on_guild_remove(guild):
    await update_guild_count_presence()

方法2:新增定时任务兜底更新(可选,避免事件漏触发的异常情况)

如果担心部分极端场景下事件未触发导致数值不准,可以搭配定时周期更新的逻辑,比如每10分钟自动刷新一次状态:

from discord.ext import tasks

# 定义定时任务,每10分钟执行一次
@tasks.loop(minutes=10)
async def presence_update_task():
    await update_guild_count_presence()

@bot.event
async def on_ready():
    await update_guild_count_presence()
    # 启动定时任务,避免重复启动
    if not presence_update_task.is_running():
        presence_update_task.start()
    print(f"logged in as {bot.user}")

注意事项

  • 若你使用的是discord.py v2.0+的分片模式,需要等待所有分片加载完成后再读取len(bot.guilds),避免统计数值不全
  • 不要在短时间内高频调用change_presence接口,否则可能触发Discord的接口限流

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:05