【发布时间】:2021-09-22 11:42:40
【问题描述】:
最近我一直在尝试使用 discord.py(不使用 Cog,使用 bot.command)创建一个调平机器人。该代码实际上可以在每条消息之后更新级别,但 rank 命令不起作用。
我有一个类似json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)的消息错误
请问有人有办法解决吗?
这是我的完整代码(json 和 discord 库已经导入):
with open("users.json", "ab+") as ab:
ab.close()
f = open('users.json','r+')
f.readline()
if os.stat("users.json").st_size == 0:
f.write("{}")
f.close()
else:
pass
with open('users.json', 'r') as f:
users = json.load(f)
@bot.event
async def on_message(message):
if message.author.bot == False:
with open('users.json', 'r') as f:
users = json.load(f)
await add_experience(users, message.author)
await level_up(users, message.author, message)
with open('users.json', 'w') as f:
json.dump(users, f)
await bot.process_commands(message)
async def add_experience(users, user):
if not f'{user.id}' in users:
users[f'{user.id}'] = {}
users[f'{user.id}']['experience'] = 0
users[f'{user.id}']['level'] = 0
users[f'{user.id}']['experience'] += 6
print(f"{users[f'{user.id}']['level']}")
async def level_up(users, user, message):
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':tada: {user.mention} has reached level {lvl_end}. Congrats! :tada:')
users[f'{user.id}']["level"] = lvl_end
@bot.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[str(id)]['level']
await ctx.send(f'You are at level {lvl}!')
else:
id = member.id
with open('users.json', 'r') as f:
users = json.load(f)
lvl = users[str(id)]['level']
await ctx.send(f'{member} is at level {lvl}!')
【问题讨论】:
标签: python discord discord.py bots