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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:31:04