discord.py是否有on_bot_leave事件?机器人离开服务器时如何重置Toggle变量
Discord.py机器人离开服务器的触发事件及状态重置方案
1. 机器人离开服务器的触发事件
discord.py中存在机器人离开服务器时触发的事件:on_guild_remove,当机器人被服务器移除、主动退出服务器时,该事件会被触发。
2. 修复全局状态的问题(替换全局变量)
你当前使用全局Toggle变量会导致所有服务器共用同一状态,这显然不符合需求。建议改用字典存储单服务器状态,每个服务器的开关独立生效,同时在机器人离开服务器时清理对应状态:
# 初始化字典,存储每个服务器的开关状态,键为服务器ID,值为布尔值 guild_toggles = {} @client.command(pass_context=True) async def channel(ctx): # 针对当前服务器设置开关为True guild_toggles[ctx.guild.id] = True await ctx.send("Channel messages enabled!") @client.event async def on_guild_channel_create(channel): # 检查当前服务器的开关状态,默认False(未开启) if guild_toggles.get(channel.guild.id, False): await channel.send("HELLO :D") @client.event async def on_guild_remove(guild): # 机器人离开服务器时,移除该服务器的开关状态 if guild.id in guild_toggles: del guild_toggles[guild.id] # 或者也可以设置为False,根据需求选择 # guild_toggles[guild.id] = False
补充说明
- 使用字典存储单服务器状态,避免了全局变量的跨服务器污染问题
on_guild_remove事件参数中的guild对象包含离开的服务器信息,通过guild.id可以精准定位要清理的状态
内容的提问来源于stack exchange,提问作者4m w31rd
相关产品推荐
相关产品推荐

