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
相关产品推荐
相关产品推荐

