Я сделал код для отображения уровня, который отлично работает, за исключением того, что когда новые участники присоединяются, код не работает, потому что он принимает только информацию о том, что уже находится в файле. json. Я хочу сделать так, чтобы при присоединении новых участников тоже появлялся их уровень.
#THE LEVEL SYSTEM ITSELF
@client.event
async def on_member_join(member):
with open(r"C:\Users\Frank\Desktop\BOTZS\test.py", 'r') as f:
users = json.load(f)
await update_data(users, member)
with open('LvlUP.json', 'w') as f:
json.dump(users, f)
@client.event
async def on_message(message):
if message.author.bot == False:
with open('LvlUP.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('LvlUP.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):
experience = users[f'{user.id}']['experience']
lvl_start = users[f'{user.id}']['level']
lvl_end = int(experience ** (1 / 4))
if lvl_start < lvl_end:
embed = discord.Embed(title="**LEVEL UP!**",description=f'{user.mention} has leveled up to level {lvl_end}! :fire: 'f'\n Soundwave Superior,{user.mention} Inferior ',color=discord.Color.dark_red())
embed.set_thumbnail(url=user.avatar_url)
users[f'{user.id}']['level'] = lvl_end
await message.channel.send(embed=embed)
#MY CODE
@client.event
async def on_message(message):
global m
with open(r"C:\Users\Frank\Desktop\BOTZS\LvlUP.json", 'r') as f:
m = json.load(f)
if message.content == "Level":
embed=discord.Embed(title="**Current Level**", description=(str(m[str(message.author.id)]["level"])),color=discord.Color.dark_red())
await message.channel.send(embed=embed)
Большое спасибо!