discord.py Levels
@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', 'w') as f: json.dump(users, f) @client.event async def on_message(message): if message.author.bot == False: with open('users.json', 'r') as f: users = json.load(f) await update_data(users, message.author) 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) 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): with open('levels.json', 'r') as g: levels = json.load(g) 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'{user.mention} has leveled up to level {lvl_end}') users[f'{user.id}']['level'] = lvl_end @client.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}!')
Here is what the above code is Doing:
1. We're opening the users.json file in read mode and loading the data into a variable called users.
2. We're checking if the user's ID is in the users dictionary. If it isn't, we're adding it.
3. We're adding 5 experience points to the user's experience.
4. We're checking if the user's level has increased. If it has, we're sending a message to the channel.
5. We're saving the users dictionary back to the users.json file.