【问题标题】:Leveling system discord.py调平系统 discord.py
【发布时间】:2021-07-28 17:13:39
【问题描述】:

我需要关于 discord.py 上调平系统的帮助。 我知道验证是async def add_experience 的错误,但我不知道如何修复它。我只是要求有人向我解释整个代码是多么可惜

@client.event
async def on_message(message):
    if message.author.bot == False:
        with open('users.json', 'r') as f:
            users = json.load(f)

       
        lastMessage[message.author.id] = time.time()
        await add_experience(users, message.author, 6)
        await update_data(users, message.author)
        await level_up(users, message.author, message)
        

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

          

    await client.process_commands(message)



async def add_experience(users, user, exp):
  if time.time() - lastMessage[user.id] > 300:
  users[f'{user.id}']['experience'] += exp


async def update_data(users, user):
    if not f'{user.id}' in users:
        users[f'{user.id}'] = {}
        users[f'{user.id}']['experience'] = 0
        users[f'{user.id}']['level'] = 1





async def level_up(users, user, message):
    with open('levels.json', 'r') as g:
        levels = json.load(g)
    experience = users[f'{user.id}']['experience']
    lvl_start = users[f'{user.id}']['level']
    lvl_end = int(experience ** (1 / 4))
    if lvl_start < lvl_end:
        await message.channel.send(f'{user.mention} Awansowałes na level {lvl_end}. Gratulacje!')
        users[f'{user.id}']['level'] = lvl_end

@client.command()
async def level(ctx, member: discord.Member = None):
    if not member:
        id = ctx.message.author.id
        with open('users.json', 'r') as f:
            users = json.load(f)
        lvl = users[id]['level']
        await ctx.send(f'Posiadasz aktualnie {lvl} level.')
    else:
        id = member.id
        with open('users.json', 'r') as f:
            users = json.load(f)
        lvl = users[id]['level']
        await ctx.send(f'{member} is at level {lvl}!')
    ```

【问题讨论】:

  • add_experience 的明显问题是缩进错误。
  • lastMessage 未在 add_experience() 中定义此外,如果您重新使用 lastMessage time.time() 会立即评估两次,这意味着它永远不会大于 300(秒)。这样if 条件总是失败。

标签: python discord discord.py bots


【解决方案1】:

此处可能出现的问题汇总:

Python 很遗憾缩进,确保所有缩进良好,并且都是制表符或 4 个空格。

根据 Tin 的说法,是的,您必须以某种方式定义/传递到变量 lastMessage,否则将是另一个错误(如果之后有任何错误,请务必在此处发表评论!)。

第三,为了可读性,也许将user定义为users[user.id],这样你就不必把两个“[]”放在一起,但这更多的是个人喜好。

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2020-09-14
    • 2021-11-25
    • 1970-01-01
    • 2021-03-25
    • 2020-08-06
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多