每台服务器的特定经济

时间:2021-03-05 18:01:17

标签: python discord.py

有人可以帮我处理这个代码吗? 我想更改此代码,以便在多台服务器上,一个用户没有来自另一台服务器的数据,因为现在不同服务器上的每个用户都有相同数量的钱,并且顶级用户表是相同的,我希望它不是以便用户可以在不同的服务器上分别赚取。

这是我的经济代码:

async def portfel(ctx):
    await open_account(ctx.author)
    user = ctx.author
    users = await get_bank_data()

    wallet_amt=users[str(user.id)]["portfel"]
    bank_amt=users[str(user.id)]["bank"]

    em=discord.Embed(color=0xFFFF00)
    em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
    em.add_field(name="?Portfel:", value=wallet_amt)
    em.add_field(name="?Bank:",value=bank_amt)
    await ctx.send(embed=em)








@client.command()
@commands.cooldown(1, 120, commands.BucketType.user)
async def work(ctx):
    await open_account(ctx.author)

    users = await get_bank_data()

    user = ctx.author

    earnings=random.randrange(101)

    variable=[
        f"Posprzątałeś dom sąsiada! Sąsiad ci daje {earnings}",
        f"Znalazłeś {earnings} pieniędzy na ulicy!",
        f"Pracowałeś dodatkowo na wakacjach w Żabce, lecz twoje hot-dogi często były nie dobre, więc otrzymujesz {earnings}",
        f"Pracowałeś na polu pomagając rolnikom. Otrzymujesz {earnings}",
        f"Rozdawałeś dodatkowo na ulicy gazety dla pobliskiego kiosku. Zarobiłeś {earnings}",
        f"Poszedłeś na konkurs fotografii i wygrałeś {earnings}",
        f"Skosiłeś trawnik. Otrzymujesz {earnings}",
        f"Pomogłeś starszym sąsiadom z internetem. Dali ci za to {earnings}"]

    em=discord.Embed(description="{}".format(random.choice(variable)), color=0x33FF66)
    em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
    await ctx.send(embed=em)


    users[str(user.id)]["portfel"] += earnings

    with open("mainbank.json","w") as f:
        json.dump(users,f)




@work.error
async def work_error(ctx, error):
    if isinstance(error, commands.CommandOnCooldown):
        em=discord.Embed(description='Poczekaj **%.2fs** zanim znów użyjesz tej komendy!' % error.retry_after, color=0xFF0000)
        em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
        await ctx.send(embed=em)



@client.command()
@commands.cooldown(1, 240, commands.BucketType.user)
async def crime(ctx):
    await open_account(ctx.author)

    users = await get_bank_data()

    user = ctx.author

    earnings=random.randrange(300)

    variable=[
        "slabo",
        "dobrze",
        "dobrze"]

    if random.choice(variable)=="slabo":

        variable=[
            f"Próbowałeś coś ukraść ale cię przyłapano! Tracisz {earnings}",
            f"Zbierałeś ekipę na skok na bank ale twoi towarzysze cię zdradzili. Tracisz {earnings}",
            f"Próbowałeś oscamować kogoś w internecie, lecz ci się nie udało. Tracisz {earnings}",
            f"Zrobiłeś napad na pobliski sklep, lecz okazało się że w środku była Policja i cię aresztowała. Tracisz {earnings}",]

        em=discord.Embed(description="{}".format(random.choice(variable)), color=0xFF3333)
        em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
        await ctx.send(embed=em)


        users[str(user.id)]["portfel"] -= earnings

        with open("mainbank.json","w") as f:
            json.dump(users,f)

    else:

        variable=[
            f"Okradłeś sklep, zyskujesz {earnings}",
            f"Napadłeś na kogoś i ten ktoś dał ci {earnings}"]

        em=discord.Embed(description="{}".format(random.choice(variable)), color=0x33FF66)
        em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
        await ctx.send(embed=em)

        users[str(user.id)]["portfel"] += earnings

        with open("mainbank.json","w") as f:
            json.dump(users,f)



@crime.error
async def crime_error(ctx,error):
    if isinstance(error, commands.CommandOnCooldown):
        em = discord.Embed(description='Poczekaj **%.2fs** zanim znów użyjesz tej komendy!' % error.retry_after,
                           color=0xFF0000)
        em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
        await ctx.send(embed=em)




@client.command()
@commands.cooldown(1, 1250, commands.BucketType.user)
async def slut(ctx):
    await open_account(ctx.author)

    users = await get_bank_data()

    user = ctx.author

    earnings = random.randrange(500)

    variable = [
        "slabo",
        "dobrze"]

    if random.choice(variable) == "slabo":

        variable = [
            f"Przebrałeś się za dziewczynę żeby kusić chłopaków, lecz ci się nie udało i cię okradli! Tracisz {earnings}",
            f"Zrobiłeś to tamto, ale klient oraz pracodawca nie był zadowolony! Tracisz {earnings}",
            f"Twój przyjaciel cię zaprosił do klubu tanecznego, lecz okazało się że to oszustwo i jak byłeś pijany, okradli cię! Tracisz {earnings}",
            f"Śledziłeś swoje znajome, lecz te cię przyłapały i pobiły! Tracisz {earnings}"]

        em = discord.Embed(description="{}".format(random.choice(variable)), color=0xFF3333)
        em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
        await ctx.send(embed=em)

        users[str(user.id)]["portfel"] -= earnings

        with open("mainbank.json", "w") as f:
            json.dump(users, f)


    else:
        earnings = random.randrange(5000)
        variable = [
            f"Zrobiłeś to tamto, i klient ci dał {earnings}!",
            f"Przebrałeś się za dziewczynę żeby kusić chłopaków, a ci zapłacili tobie {earnings} żebyś się odczepił!",
            f"Twój znajomy ci polecił klub taneczny i się okazało że to był dobry pomysł. Wszystkim się spodobał twój taniec. Zyskujesz {earnings}"]

        em = discord.Embed(description="{}".format(random.choice(variable)), color=0x33FF66)
        em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
        await ctx.send(embed=em)

        users[str(user.id)]["portfel"] += earnings

        with open("mainbank.json", "w") as f:
            json.dump(users, f)



@slut.error
async def slut_error(ctx, error):
    if isinstance(error, commands.CommandOnCooldown):
        em = discord.Embed(description='Poczekaj **%.2fs** zanim znów użyjesz tej komendy!' % error.retry_after,
                           color=0xFF0000)
        em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
        await ctx.send(embed=em)


@client.command()
@commands.has_permissions(administrator=True)
async def addmoney(ctx, user:discord.User, *,count):
    await open_account(ctx.author)

    users = await get_bank_data()

    user = user
    users[str(user.id)]["portfel"] += count
    em=discord.Embed(description=f"Dodano {count}zł {member.mention}", color=0xFFFF00)
    em.set_footer(text=f"Komenda wywołana przez {ctx.message.author.name}", icon_url=ctx.author.avatar_url)
    await ctx.send(embed=em)

    with open("mainbank.json", "w") as f:
        json.dump(users, f)

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

    if str(user.id) in users:
        return False
    else:

        users[str(user.id)] = {}
        users[str(user.id)]["portfel"] = 0
        users[str(user.id)]["bank"] = 0

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


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

    return users






@client.command(aliases = ["lb"])
async def top(ctx,x = 1):
    users = await get_bank_data()
    leader_board = {}
    total = []
    for user in users:
        name = int(user)
        total_amount = users[user]["portfel"] + users[user]["bank"]
        leader_board[total_amount] = name
        total.append(total_amount)

    total = sorted(total,reverse=True)

    em = discord.Embed(title = f"Top najbogatszych użytkowników!" , description = "Tabela najbogatszych osób:",color = 0xFFFF00)
    index = 2
    for amt in total:
        id_ = leader_board[amt]
        member = client.get_user(id_)
        name = member.name
        em.add_field(name = f"{index}. **{name}**" , value = f"?{amt}",  inline = False)
        em.set_footer(text="Komenda wywoałana przez {}".format(ctx.message.author.name), icon_url=ctx.author.avatar_url)
        if index == x:
            break
        else:
            index += 1

    await ctx.send(embed = em)

Python 3.8.4 Discord.py-最新版本

1 个答案:

答案 0 :(得分:0)

你应该使用嵌套字典,这样每个公会都有自己的用户字典,然后像这样访问它:

bank[guild][user]

让我们创建一个函数来更新用户余额:

async def update_balance(member, amount):
    server = member.guild

    with open("mainbank.json","w") as f:
        bank = json.load(f)

    if server not in bank:
        bank[server] = {}

    if member in not bank[server]:
        bank[server][member] = 0

    bank[server][member] += amount

    with open("mainbank.json", "w") as f:
        json.dump(bank, f)

那么无论何时你想更新用户的余额,你都可以调用这个函数。 不过要小心,您需要提供 discord.Member 对象而不是 discord.User 对象。