python - 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 中删除服务器?
谢谢您的帮助!
解决方案
正如我在评论中所说,有一个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)
参考:
推荐阅读
- ansible - 如何使用复制模块在ansible中复制
- r - 从 R 中经过训练的 randomForest 获取因子水平
- php - CSV 字段中的子数组并使用 PHP 读取
- apache-spark - 我是否尽可能地使用 Apache Spark?
- python - 在 Python Pandas DataFrame 中设置索引名称的最佳方法
- javascript - 为什么 ScrollTop 位置在移动 Safari 上不起作用?
- python - Numpy - 根据数组提取 array2d 列
- sql - 使用 STRING_SPLIT() 评估列
- python - 第一个标题不出现(Matplotlib)
- javascript - 循环内的 if 语句有效。但不是在我添加“循环”/“重复”获取之后