How to create a leveling system with discord.py with python?
17,582
Here is a level sytem code that might help you:
@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}!')
Author by
ProstoChelovek
Updated on June 27, 2022Comments
-
ProstoChelovek about 2 years
I tried to make a levelling system into my bot but something went wrong. The level rose after each message and not after the specified parameter. How to make it work properly? How to create a leveling system with
discord.py
?Here is my code:
@client.event async def on_message( message ): if message.author.bot: return else: member = message.author.name msg_len = len(message.content) rand_number_1 = randint( 1, 10 ) exp_first = msg_len * rand_number_1 coins_first = exp_first // 10 data_levels_member_first = { 'exp': 0, 'coins': 0, 'level': 0} filename = f'./Data/Profiles/Profile{message.author.name}{message.guild}.json' try: data = load( filename ) except Exception: dump( filename, data_levels_member_first ) data = load( filename ) exp_member = data['exp'] coins_member = data['coins'] lvl_member = data['level'] exp = exp_first + exp_member coins = coins_first + coins_member lvl = exp ** (1/4) if lvl_member < lvl: lvl_member += 1 print('You lvl up!') data_levels_member = { 'exp': exp, 'coins': coins, 'level': lvl_member} dump( filename, data_levels_member ) await client.process_commands(message)
-
TheOneMusic about 4 yearsCan you share your code please?
-
Eric Jin about 4 yearsPlease edit your question to include your existing code, any tracebacks if needed, and your intended behavior (like how much XP to the next level for example)
-
-
M-Chen-3 over 3 yearsPlease explain what your code does and how it does it. Never post code on its own.
-
Blue Guy almost 3 yearsIt restricts old members.