首页 > 解决方案 > discord.py - 在 bot 离开服务器后从 json 中删除公会

问题描述

我正在尝试公开我的机器人,因此我需要在 json 中存储多个 ID。

如果机器人加入公会,它将在 json 中创建一个条目:

{
    "token": "MY_TOKEN",
    "guilds": {
        "TiLiKas": {
            "rules_message": {
                "rules_id": 780729484931366912
            },
            "ticket_message": {
                "ticket_id": 778567282321391638
            }
        },
        "Darkness": {
            "rules_message": {
                "rules_id": 765132820049428481
            },
            "ticket_message": {
                "ticket_id": 798839023031549962
            }
        },
        "Bot-Test-Server": {
            "rules_message": {},
            "ticket_message": {}
        }
    }
}

我如何创建公会信息:

@commands.Cog.listener()
async def on_guild_join(self, ctx):

    default_prefix = "?"

    for guild in self.client.guilds:

        guildName = guild

    with open("data.json", "r") as f:
        data = json.load(f)

        tmpDict = {
            "rules_message": { },
            "ticket_message": { }
        }

        data["guilds"][str(guildName)] = tmpDict

        with open("data.json", "w") as f:
            json.dump(data, f, indent=4)

问题是,如果 bot 被服务器踢出,该条目仍保留在 json 中。

如果机器人离开公会,我如何从 json 中删除服务器?

谢谢您的帮助!

标签: pythonjsonpython-3.xdiscorddiscord.py

解决方案


正如我在评论中所说,有一个on_guild_remove事件,您可以从那里的 json 文件中删除公会

@commands.Cog.listener()
async def on_guild_remove(self, guild):
    with open("data.json", "r") as f:
        data = json.load(f)

    del data["guild"][str(guild)]
 
    with open("data.json", "w") as f:
        json.dump(data, f, indent=2)

参考:


推荐阅读