How to get discord.py bot to show different stats for every player?

后端 未结 1 1978
青春惊慌失措
青春惊慌失措 2020-12-04 01:06

So, I tried to make a currency bot a while back, but it ended up that everyone in the server shared the same amount of currency.

How would I make the users of a bot

相关标签:
1条回答
  • 2020-12-04 02:03

    You can set up a dictionary of Members to amounts of currency. I would probably use the member ids, so that you can save the file when you want to shut off your bot.

    from discord.ext import commands
    import discord
    import json
    
    bot = commands.Bot('!')
    
    amounts = {}
    
    @bot.event
    async def on_ready():
        global amounts
        try:
            with open('amounts.json') as f:             
                amounts = json.load(f)
        except FileNotFoundError:
            print("Could not load amounts.json")
            amounts = {}
    
    @bot.command(pass_context=True)
    async def balance(ctx):
        id = ctx.message.author.id
        if id in amounts:
            await bot.say("You have {} in the bank".format(amounts[id]))
        else:
            await bot.say("You do not have an account")
    
    @bot.command(pass_context=True)
    async def register(ctx):
        id = ctx.message.author.id
        if id not in amounts:
            amounts[id] = 100
            await bot.say("You are now registered")
            _save()
        else:
            await bot.say("You already have an account")
    
    @bot.command(pass_context=True)
    async def transfer(ctx, amount: int, other: discord.Member):
        primary_id = ctx.message.author.id
        other_id = other.id
        if primary_id not in amounts:
            await bot.say("You do not have an account")
        elif other_id not in amounts:
            await bot.say("The other party does not have an account")
        elif amounts[primary_id] < amount:
            await bot.say("You cannot afford this transaction")
        else:
            amounts[primary_id] -= amount
            amounts[other_id] += amount
            await bot.say("Transaction complete")
        _save()
    
    def _save():
        with open('amounts.json', 'w+') as f:
            json.dump(amounts, f)
    
    @bot.command()
    async def save():
        _save()
    
    bot.run("TOKEN")
    
    0 讨论(0)
提交回复
热议问题