【发布时间】: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()中定义此外,如果您重新使用lastMessagetime.time()会立即评估两次,这意味着它永远不会大于 300(秒)。这样if条件总是失败。
标签: python discord discord.py bots