我正在尝试为我的等级系统制作排行榜,但它不起作用,这是我的代码:
Bolivar 2:0 CD Real Tomayapo
CD Real Tomayapo 2:1 Blooming
Guabira 0:2 CD Real Tomayapo
CD Real Tomayapo 0:0 Real Potosi
Royal Pari 4:2 CD Real Tomayapo
CD Real Tomayapo 1:0 Always Ready
Aurora 3:0 Independiente Petrolero
Aurora 1:1 Bolivar
Blooming 1:0 Aurora
Aurora 2:1 Guabira
Real Potosi 1:1 Aurora
Aurora 0:8 Royal Pari
<块引用>
这就是等级系统,现在这是我正在尝试制作的排行榜,请记住我的 json 文件如下所示:
@client.event
async def on_message(message):
if not message.author.bot:
with open('level.json','r') as f:
users = json.load(f)
xp = random.randint(1, 3)
await update_data(users, message.author,message.guild)
await add_experience(users, message.author, xp, message.guild)
await level_up(users, message.author,message.channel, message.guild)
with open('level.json','w') as f:
json.dump(users, f, indent=2)
await client.process_commands(message)
async def update_data(users, user,server):
if not str(server.id) in users:
users[str(server.id)] = {}
if not str(user.id) in users[str(server.id)]:
users[str(server.id)][str(user.id)] = {}
users[str(server.id)][str(user.id)]['experience'] = 0
users[str(server.id)][str(user.id)]['level'] = 1
elif not str(user.id) in users[str(server.id)]:
users[str(server.id)][str(user.id)] = {}
users[str(server.id)][str(user.id)]['experience'] = 0
users[str(server.id)][str(user.id)]['level'] = 1
async def add_experience(users, user, exp, server):
users[str(user.guild.id)][str(user.id)]['experience'] += exp
async def level_up(users, user, channel, server):
experience = users[str(user.guild.id)][str(user.id)]['experience']
lvl_start = users[str(user.guild.id)][str(user.id)]['level']
lvl_end = int(experience ** (1/4))
if str(user.guild.id) != '757383943116030074':
if lvl_start < lvl_end:
channel = client.get_channel(841191976053374997)
await channel.send('{} has leveled up to Level {} in {}!'.format(user.name, lvl_end, user.guild.name))
users[str(user.guild.id)][str(user.id)]['level'] = lvl_end
@client.command()
@commands.is_owner()
async def restart(ctx):
await ctx.send("Restarting bot..")
await client.logout()
await client.login()
@client.command(aliases = ['rank','lvl', 'r'])
async def level(ctx,member: discord.Member = None):
if ctx.author.id in blacklist:
return
if not member:
user = ctx.message.author
with open('level.json','r') as f:
users = json.load(f)
lvl = users[str(ctx.guild.id)][str(user.id)]['level']
exp = users[str(ctx.guild.id)][str(user.id)]['experience']
embed = discord.Embed(title = 'Level {}'.format(lvl), description = f"{exp} XP " ,color = discord.Color.blue())
embed.set_author(name = ctx.author, icon_url = ctx.author.avatar_url)
await ctx.send(embed = embed)
else:
with open('level.json','r') as f:
users = json.load(f)
lvl = users[str(ctx.guild.id)][str(member.id)]['level']
exp = users[str(ctx.guild.id)][str(member.id)]['experience']
embed = discord.Embed(title = 'Level {}'.format(lvl), description = f"{exp} XP" ,color = discord.Color.green())
embed.set_author(name = member, icon_url = member.avatar_url)
await ctx.send(embed = embed)
下面是我试图制作的“排行榜”。
{
"739861800769552525": {
"791583999361155092": {
"experience": 7,
"level": 1
},
"689461924038967346": {
"experience": 626,
"level": 5
},
"814226043924643880": {
"experience": 538,
"level": 4
},
我正在尝试为它制作排行榜,这有点困难.. 我不知道它是否可以是特定于服务器的,但我在这里寻求帮助。