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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:06