Comment ajouter des niveaux à un système de niveau d'expérience pour un bot discord.py. Voici le code que j'ai utilisé, toute aide serait appréciée
import discord
from discord.ext import commands
from discord.utils import get
import json
client = commands.Bot(command_prefix="!")
@client.event
async def on_message(message):
if not message.author.bot:
await open_account_level(message.author)
users = await get_level_data()
await add_experience(users, message.author, 5)
await level_up(users, message.author, message)
with open('users.json', 'w') as f:
json.dump(users, f)
await client.process_commands(message)
#commande pour vérifier les détails de votre niveau
@client.command()
async def level(ctx):
await open_account_level(ctx.author)
users = await get_level_data()
user = ctx.author
exp_level = users[str(user.id)]["Exp"]
bank_amt = users[str(user.id)]["Exp Level"]
em = discord.Embed(title=f"{ctx.author.name}'s balance", color=discord.Color.red())
em.add_field(name="Exp", value=exp_level)
em.add_field(name="Exp Level", value=bank_amt)
await ctx.send(embed=em)
#ajoute de l'expérience à votre compte
async def add_experience(users, user, exp):
users[f'{user.id}']['Exp'] += exp
#vous fait monter de niveau après une limite d'expérience
async def level_up(users, user, message):
with open('users.json', 'r') as g:
levels = json.load(g)
experience = users[f'{user.id}']['Exp']
lvl_start = users[f'{user.id}']['Exp Level']
lvl_end = int(experience ** (1 / 4))
if lvl_start < lvl_end:
await message.channel.send(f'{user.mention} a monté de niveau vers le niveau {lvl_end}')
users[f'{user.id}']['Exp Level'] = lvl_end
#crée un compte pour vous dans un fichier json
async def open_account_level(user):
users = await get_level_data()
if str(user.id) in users:
return False
else:
users[str(user.id)] = {}
users[str(user.id)]["Exp"] = 0
users[str(user.id)]["Exp Level"] = 0
with open("users.json", "w") as f:
json.dump(users, f)
return True
async def get_level_data():
with open("users.json", "r") as f:
users = json.load(f)
return users
TOKEN = 'token'
client.run(TOKEN)
Je veux les rangs de sorte qu'il montre qui a le plus haut niveau d'expérience et renvoie leur rang parmi les autres dans le serveur N'hésitez pas à signaler toute erreur dans mon code, toute aide serait appréciée.