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

Discord.py中读取JSON数据实现服务器自定义前缀查询的问题

代码修改方案

原有代码错误点

  • json.load(f())语法错误,json.load()接收文件对象直接传f即可,额外加括号会触发对象调用报错
  • 你的JSON结构没有外层数组,无需加[0]取第一个元素
  • 变量名不匹配:读取结果存在prfxs变量中,后续错误使用了未定义的data变量
  • 服务器ID获取错误:JSON的键为字符串格式的服务器ID,需通过str(ctx.guild.id)获取当前服务器的ID,不能写固定字符串'guild.id'
  • 消息发送方法错误:直接调用ctx.send()即可,无需通过ctx.message调用
  • 缺失异常兜底逻辑:没有处理服务器ID不在配置文件、私聊场景触发命令的情况

修复后完整代码

import json

@client.command()
async def prf(ctx):
    # 过滤私聊场景
    if not ctx.guild:
        await ctx.send("该命令仅可在Discord服务器内使用")
        return
    try:
        with open('./config/prefixes.json', 'r') as f:
            prefixes = json.load(f)
        # 取不到对应服务器前缀时默认返回!,可自行修改默认值
        current_prefix = prefixes.get(str(ctx.guild.id), "!")
        await ctx.send(f"当前服务器的自定义前缀为:`{current_prefix}`")
    except IOError:
        await ctx.send("前缀配置读取失败,请稍后重试")

优化建议

如果该命令调用频率较高,建议将前缀配置加载到内存中存储,修改前缀时同步更新内存和JSON文件,避免每次调用都读取磁盘IO,提升响应速度。

内容的提问来源于stack exchange,提问作者Articial

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:39:04