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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:48:32