如何在discord.py的on_ready()中获取服务器ID并加载JSON信息
解决方法
在on_ready()事件中无法通过ctx获取服务器ID,因为ctx只有在处理用户消息等交互事件时才存在。你可以直接通过bot.guilds获取机器人已加入的所有服务器列表,遍历列表就能拿到每个服务器的ID,再和JSON文件中的标识匹配。
修正后的代码示例:
import json @bot.event async def on_ready(): print(f"已登录为 {bot.user}") with open("server_info.json", "r") as infoRaw: infoJson = json.load(infoRaw) # 遍历机器人加入的所有服务器 for guild in bot.guilds: # 遍历JSON内的服务器信息进行ID匹配 for server in infoJson["Servers"]: # 注意JSON中的ID可能是字符串,需统一类型后对比 if int(server["id"]) == guild.id: data = server # 原代码server[data]为语法错误,直接获取匹配到的服务器信息 print(f"匹配到服务器 {guild.name} 的配置:{data}") break
关键注意点
bot.guilds返回机器人当前加入的所有Guild对象列表,每个对象的id属性是服务器的整数ID。- 若JSON文件中存储的服务器ID是字符串类型,对比时要转成整数(或把
guild.id转成字符串),避免类型不匹配导致匹配失败。 - 原代码中
data = server[data]属于语法错误,直接赋值data = server即可获取对应服务器的配置信息。
内容的提问来源于stack exchange,提问作者DataGraph
相关产品推荐
相关产品推荐

