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

