简体   繁体   中英

discord.py commands don't work when added leveling system with json file

I have a problem where my commands don't execute when I add leveling system into my bot. My solutions atm was to make 2nd bot only for the leveling system but then I can't make !level command and I know this is pretty begginer mistake or bad practice to make 2nd bot but that was my only solution atm. When I remove the leveling system everything works perfectly btw.

Here's my code:

@client.event
async def on_member_join(member):
    with open('users.json', 'r') as f:
        users = json.load(f)

    await update_data(users, member)

    with open('users.json', 'r') as f:
        users = json.load()

@client.event
async def on_message(message):
    with open('users.json', 'r') as  f:
        if not message.author.bot:
            users = json.load(f)
            expp = generated_xp()

            await update_data(users, message.author)
            await add_experience(users, message.author, expp)
            await level_up(users, message.author, message)


            with open('users.json', 'w') as f:
                json.dump(users, f)


async def update_data(users, user):
    if not f'{user.id}' in users:
        users[f'{user.id}'] = {}
        users[f'{user.id}']['experience'] = 0
        users[f'{user.id}']['level'] = 1


async def add_experience(users, user, exp):
    users[f'{user.id}']['experience'] += exp

async def level_up(users, user, message):
    guild = client.get_guild(684329516385959945)
    experience = users[f'{user.id}']['experience']
    lvl_start = users[f'{user.id}']['level']
    lvl_end = int(experience ** (1/3))
    if lvl_start < lvl_end:
        await message.channel.send(f'{user.mention} has leveled up to level {lvl_end}')
        users[f'{user.id}']['level'] = lvl_end
    lvl = users[f'{user.id}']['level']
    # Roles
    Alvl = get(guild.roles, id=684802308000841791) # 5
    Blvl = get(guild.roles, id=684803221671378972) # 10
    Clvl = get(guild.roles, id=684803359328174132) # 20
    Dlvl = get(guild.roles, id=684803458423062529) # 35
    Elvl = get(guild.roles, id=684803761679761409) # 50
    Flvl = get(guild.roles, id=684803911005372487) # 75
    Glvl = get(guild.roles, id=684804062847565863) # 100
    Hlvl = get(guild.roles, id=684804165930975283) # 150

    if lvl >= 5:
        await user.add_roles(Alvl)
    if lvl >= 10:
        await user.add_roles(Blvl)
    if lvl >= 20:
        await user.add_roles(Clvl)
    if lvl >= 35:
        await user.add_roles(Dlvl)
    if lvl >= 50:
        await user.add_roles(Elvl)
    if lvl >= 75:
        await user.add_roles(Flvl)
    if lvl >= 100:
        await user.add_roles(Glvl)
    if lvl >= 150:
        await user.add_roles(Hlvl)

@client.command()
async def level(ctx):
    current_lvl = users[f'{member.id}']['level']
    current_xp = users[f'{member.id}']['experience']
    member = ctx.message.author
    member_icon = member.avatar_url
    guild = client.get_guild(684329516385959945)
    with open('users.json', 'r') as f:
        json.dump(users, f)
    lvl_embed=discord.Embed(title=" " + member + " ♥ " + guild.name, color=0xcc2800)
    lvl_embed.set_thumbnail(member_icon)
    lvl_embed.add_field(name="🔻 " + current_lvl + " LVL", value="Gain more xp to level up.", inline=False)
    lvl_embed.add_field(name="🔺 " + current_xp + " XP", value="Type in chat fore more xp.", inline=True)
    print('printira')
    await ctx.send(embed=lvl_embed)

client.run(TOKEN)

My python version is 3.8.2 if that needs to be said :P

在 on_message 函数中传入“await client.process_commands(message)”

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM