如何使用discord.py创建rank命令?



最近我一直在尝试用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}!')

json错误意味着你的json文件是完全空的,你至少需要在你的json文件{}

在名为users.json的文件中它必须是这样的:

{

}

最新更新