Не работает система начисления опыта в discord.py
У меня есть код который работал и после добавления системы варнов на его основе(в плане я скопировал нужные строки и переименовал их) перестал начислять опыт. Т.е. добавляет в json файл но не добавляет опыт.(про лвл-up не знаю)
Код лвл-ов:
json_file_path = "users.json"
@bot.event
async def on_member_join(member):
if message.channel.id == 885939833166512198:
return
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 bot.process_commands(message)
@bot.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)
@bot.event
async def on_message(message):
if message.channel.id == 885939833166512198:
return
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 bot.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('users.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}! Теперь у тебя {lvl_end} уровень')
users[f'{user.id}']['level'] = lvl_end
@bot.command(aliases=['level', 'уровень', 'лвл'])
async def lvl(ctx, member: discord.Member = None):
await ctx.channel.purge(limit = 1)
if not member:
id = ctx.message.author.id
with open('users.json', 'r') as f:
users = json.load(f)
lvl = users[str(id)]['level']
exp = users[str(id)]['experience']
emb = discord.Embed(title=f'Меню Уровней {ctx.author}',timestamp=ctx.message.created_at)
emb.add_field(name='> **Уровень:** ', value=f'`{lvl}`')
emb.add_field(name='> **Опыта:** ', value=f'`{exp}`')
await ctx.send(embed = emb)
else:
id = member.id
with open('users.json', 'r') as f:
users = json.load(f)
lvl = users[str(id)]['level']
exp = users[str(id)]['experience']
emb = discord.Embed(title=f'Меню Уровней {member}',timestamp=ctx.message.created_at)
emb.add_field(name='> **Уровень:** ', value=f'`{lvl}`')
emb.add_field(name='> **Опыта:** ', value=f'`{exp}`')
await ctx.send(embed = emb)
Код системы уровней даже не хочет читать изменения в файле которые я сделал в ручную. Помогите пожалуйста заставить читать и писать в файле.
Код системы варнов:
@bot.event
async def on_message(message):
if message.author.bot == False:
with open(json_file_path_warn, 'r') as f:
warn = json.load(f)
await update_data_warn(warn, message.author)
with open(json_file_path_warn, 'w') as f:
json.dump(warn, f)
await bot.process_commands(message)
async def update_data_warn(warn, user):
if not f'{user.id}' in warn:
warn[f'{user.id}'] = {}
warn[f'{user.id}']['warn'] = 0
Система варнов отлично работает и с ней нареканий нет. Добавление варнов сделано пока что в ручную.