【问题标题】:How do I separate my discord.py balance for different servers?如何区分不同服务器的 discord.py 余额?
【发布时间】:2021-11-25 09:04:12
【问题描述】:

我的 discord.py 机器人里面有一个经济系统,你可以得到硬币,但是每个人的余额(硬币数量)都连接到每个服务器。这是我处理 .json 的代码

async def oAcc(user):
    users = await get_bank_data()

    if str(user.id) in users:
        return False
    else:
        users[str(user.id)] = {}
        users[str(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

如何更改此设置,以便每个服务器都有不同的“数据库”。

【问题讨论】:

    标签: python json discord.py


    【解决方案1】:

    您始终可以将您的 users 字典嵌套在服务器对象中,并将它们全部分开保存在同一个文件中。

    import json
    
    # reading
    def get_bank_data(server_name):
        with open("bank.json", "r") as f:
            database = json.load(f)
            users = database.get(server_name, {})
        return users
    
    # writing
    def put_bank_data(server_name, users):
        with open("bank.json", "r") as f:
            database = json.load(f)
        database[server_name] = users
        with open("bank.json", "w") as f:
            json.dump(database, f)
    
    server_name = "test_server"
    server2_name = "test_server2"
    user_id = '101'
    
    
    users = get_bank_data(server_name)
    users2 = get_bank_data(server2_name)
    users[user_id] = {}
    users[user_id]['bal'] = 100
    users2[user_id] = {}
    users2[user_id]['bal'] = 200
    put_bank_data(server_name, users)
    put_bank_data(server2_name, users2)
    
    users_get = get_bank_data(server_name)
    print(users_get[user_id]['bal'])
    
    users2_get = get_bank_data(server2_name)
    print(users2_get[user_id]['bal'])
    

    另外,请注意我没有使用async。当您不在其中使用 await 时,没有太多理由使函数异步。如果您想了解如何异步加速文件 io,请查看这篇文章,因为您没有更改任何内容。 https://www.twilio.com/blog/working-with-files-asynchronously-in-python-using-aiofiles-and-asyncio

    【讨论】:

    • 好的,我认为我使用此信息错误,但是当我尝试这样做时,我得到一个 KeyError 并且它只是发送服务器 ID(我将服务器名称更改为服务器 ID,以防万一,希望不是问题)
    • 我很抱歉我没有用一个完整的例子来测试这个。我已经为您提供了一个可以使用 KeyErrors 自动纠正一些潜在缺陷的方法。
    • Ty Ty Ty,我几乎连续 2 天一直在尝试解决这个问题。我没有考虑将服务器与 get 数据库分开,哈哈
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2016-01-01
    • 1970-01-01
    • 2020-11-07
    • 2021-07-20
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多