Discord机器人无法从JSON文件加载自定义前缀,求技术协助
问题分析与解决
你的代码里有两个关键错误,导致输出的是字符串"prefix"而不是JSON文件中存储的实际前缀:
1. 变量逻辑完全搞反
你写的prefixes[str(ctx.guild.id)] = prefix是往字典里存值的操作,但你根本没定义prefix变量——这行不仅毫无意义,还会引发NameError(除非你在代码其他地方偷偷定义了这个变量,但从你给出的片段看并没有)。你真正需要做的是从字典里取值:把当前服务器ID对应的前缀从prefixes字典中取出来,赋值给prefix变量。
2. 未正确获取并使用前缀值
你的embed.add_field里用了f"{prefix}",但如果prefix变量没被正确赋值,要么会直接报错,要么如果是你不小心把字符串写成了"prefix"(漏掉了花括号),就会直接输出这个固定字符串。
修正后的完整代码
import json import discord @client.command() async def test(ctx): # 加载JSON文件中的前缀字典 with open('main code\\pp.json', 'r') as f: prefixes = json.load(f) # 从字典中获取当前服务器对应的前缀,加默认值避免无对应ID时崩溃 prefix = prefixes.get(str(ctx.guild.id), "默认前缀") # 创建Embed并输出正确前缀 embed = discord.Embed(colour = discord.Color.red()) embed.set_author(name="test") embed.add_field(name="testing", value=f"{prefix}") await ctx.send(embed=embed)
额外注意事项
- 确保你的
pp.json是标准的字典结构,键为字符串类型的服务器ID,值为对应前缀,示例格式如下:{"123456789012345678": "!", "987654321098765432": "?"} - 使用
dict.get()方法比直接用prefixes[str(ctx.guild.id)]更安全,当JSON文件中没有当前服务器的ID时,程序会使用你指定的默认值,而不是直接崩溃。
内容的提问来源于stack exchange,提问作者bat beat
相关产品推荐
相关产品推荐

