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

Python Discord bot 根据输入GrowID查询JSON文件中用户数据实现问题

错误原因
  • 你接收的GrowID是用户输入的字符串类型参数,并非Discord成员对象,直接调用.user_id属性属于非法操作,必然报错
  • 你的JSON数据以Discord用户ID为顶级键,GrowID存储在次级字段中,无法直接通过顶级键匹配传入的GrowID参数,需要遍历所有账号数据匹配次级字段
修复后完整代码
@client.command(aliases=["p"])
async def profile(ctx, GrowID=None):
    # 读取账号数据
    with open('account.json', 'r') as f:
        account = json.load(f)
    
    target_data = None
    # 未传入GrowID,查询触发者自己的账号
    if GrowID is None:
        user_id = str(ctx.author.id)
        if user_id in account:
            target_data = account[user_id]
        else:
            await ctx.send("你还没有创建账号,请先发送`.start`指令初始化!")
            return
    # 传入了GrowID,匹配对应账号
    else:
        # 遍历所有账号匹配GrowID
        for user_data in account.values():
            # 如果需要不区分大小写匹配,可改为 user_data["GrowID"].lower() == GrowID.lower()
            if user_data["GrowID"] == GrowID:
                target_data = user_data
                break
        # 遍历完没找到匹配项
        if target_data is None:
            await ctx.send(f"未找到GrowID为`{GrowID}`的账号,请检查输入是否正确!")
            return
    
    # 此处写你要展示账号数据的逻辑,比如发嵌入卡片
    # 示例输出:
    await ctx.send(f"""
GrowID: {target_data['GrowID']}
等级: {target_data['Level']}
经验: {target_data['XP']}/{target_data['XPLevel']}
宝石: {target_data['Gems']}
世界锁: {target_data['World Locks']}
钻石锁: {target_data['Diamond Locks']}
""")
补充说明
  • 如果存在多个账号绑定同一个GrowID的情况,可以根据需求调整逻辑,比如返回所有匹配项,或者在start初始化时就做GrowID唯一性校验
  • 频繁读写JSON文件在用户量大的时候会有性能问题,后续可以考虑换成SQLite之类的轻量数据库优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:45:03