My discord.my rank command is not working

Hi, pls help me for my rank command and my rank system.

My /rank command does not work (my code is below). My link with the image does not work and I would like to have a code allowing me to modify the level and the xp.
THANKS

Code :

import discord
from discord import app_commands
from discord.ext import commands
import json
import asyncio
import random

intents = discord.Intents.default()
intents.typing = False  # Désactive la réception d'événements de saisie
intents.presences = False  # Désactive la réception d'événements de présence (statut)

bot = commands.Bot(command_prefix="?", intents=intents)

client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)


m = {}


@bot.event
async def on_ready():
    global m
    try:
        with open("users.json", "r") as j:
            m = json.load(j)
    except FileNotFoundError:
        m = {}
    # Initialisez xp_required pour les utilisateurs qui n'ont pas cette clé
    for user_id, user_data in m.items():
        if "xp_required" not in user_data:
            user_data["xp_required"] = 100
    print("Bot is ready")
    try:
        synced = await bot.tree.sync(guild=discord.Object(id=1155538848630194236))
        print(f"Synced {len(synced)} commands")
    except Exception as e:
        print(e)


@bot.event
async def on_message(message):
    global m
    if message.author != bot.user:
        user_id = str(message.author.id)
        if user_id not in m:
            m[user_id] = {"xp": 0, "level": 1, "xp_required": 100}
        xp_per_message = random.randint(
            1, 10
        )  # Génère un nombre aléatoire entre 1 et 10 pour chaque message
        m[user_id]["xp"] += xp_per_message
        await check_level_up(message.author.id, user_id)
        await save_data()
    await bot.process_commands(message)


async def check_level_up(author_id, user_id):
    current_xp = m[user_id]["xp"]
    current_level = m[user_id]["level"]
    required_xp = m[user_id]["xp_required"]

    if current_xp >= required_xp:
        m[user_id]["level"] += 1
        m[user_id]["xp"] = 0  # Réinitialisez l'XP à zéro
        m[user_id]["xp_required"] = 100 * (
            current_level + 1
        )  # Mettez à jour l'XP nécessaire pour le prochain niveau
        user = await bot.fetch_user(author_id)  # Obtenez l'utilisateur à partir de l'ID
        await send_level_up_embed(
            user, current_level + 1, m[user_id]["xp"], required_xp
        )


async def send_level_up_embed(user, new_level, current_xp, xp_required):
    # Construisez l'URL de l'image en intégrant les informations de l'utilisateur
    avatar_url = user.avatar.url  # Obtenez l'URL de l'avatar de l'utilisateur
    image_url = f"https://agg-api.vercel.app/rankcard?username={user.name}&xp={current_xp}&maxxp={xp_required}&level={new_level}&avatar={avatar_url}&blur=true&background=https://cdn.discordapp.com/attachments/1125453826489598014/1128268449060237342/Untitled_design_2.png&xpcolor=C1AFEB"

    embed = discord.Embed(
        title="Félicitations !",
        description=f"{user.mention}, vous êtes passé au niveau {new_level} !",
        color=discord.Color.green(),
    )
    # Ajoutez l'URL de l'image personnalisée à l'embed
    embed.set_image(url=image_url)

    channel = bot.get_channel(1155893201329197076)  # Remplacez par l'ID de votre salon
    if channel:
        await channel.send(embed=embed)


@bot.tree.command(
    guild=discord.Object(id=1155538848630194236),
    name="rank",
    description="Affiche votre rank sur le serveur",
)
async def rank(ctx):
    user_id = str(ctx.author.id)
    if user_id in m:
        user_data = m[user_id]
        level = user_data["level"]
        xp = user_data["xp"]
        xp_required = user_data["xp_required"]
        await ctx.send(
            f"{ctx.author.mention}, Votre niveau est {level}, votre XP est {xp}, et"
            f" l'XP requise pour le niveau suivant est {xp_required}."
        )
    else:
        await ctx.send(
            "Vous n'avez pas encore gagné d'XP. Commencez à discuter pour gagner de"
            " l'XP !"
        )


async def save_data():
    with open("users.json", "w") as j:
        json.dump(m, j)


TOKEN = "hidden"
bot.run(TOKEN)

My code is in french.
Thanks

:x: please store your token in secrets. Your repl’s code is public by default


what goes wrong? Are there any error logs?

2 Likes