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

如何为discord.py机器人经济系统实现各服务器独立余额存储

实现分服务器独立余额的代码修改方案

核心逻辑

  • 调整JSON存储结构:将原结构{用户ID: {"bal": 余额}}改为{服务器ID: {用户ID: {"bal": 余额}}},从存储层面实现不同服务器的经济数据隔离
  • 所有涉及余额读写的函数新增guild(服务器对象)入参,用于定位当前操作所属的服务器数据分区

修改后的代码

async def oAcc(user, guild):
    users = await get_bank_data()
    guild_id = str(guild.id)
    # 若当前服务器未初始化过数据,先创建服务器数据分区
    if guild_id not in users:
        users[guild_id] = {}
    
    user_id = str(user.id)
    if user_id in users[guild_id]:
        return False
    else:
        users[guild_id][user_id] = {}
        users[guild_id][user_id]["bal"] = 100

    with open("bank.json", "w") as f:
        json.dump(users, f)
    return True

async def get_bank_data():
    with open("bank.json", "r") as f:
        users = json.load(f)
    return users

使用注意事项

  • 调用oAcc时必须同步传入当前交互/消息对应的guild对象,否则会出现参数缺失报错
  • 后续所有余额查询、增减的操作都需要先定位到对应服务器分区,参考查询余额的示例:
async def get_user_bal(user, guild):
    users = await get_bank_data()
    return users[str(guild.id)][str(user.id)]["bal"]
  • 私信场景下不存在服务器对象,可额外添加逻辑提示用户经济功能仅支持在服务器内使用
  • 若不需要保留原有全服通用的余额数据,可直接删除旧的bank.json文件,程序运行时会自动生成符合新结构的存储文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:27:04