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
相关产品推荐
相关产品推荐

