Почему не выводит сообщение о повышении уровня?
У меня есть такой код:
from discord.ext import commands
import pymongo as mg
import discord as ds
import config
import math
bot = commands.Bot(command_prefix='!', intents=ds.Intents.all())
client = mg.MongoClient(config.mongo_uri)
db = client.levelling
level_ratio = 50
levels = {
5: '?Bronze?',
10: '?Iron?',
20: '?Gold?',
30: '?Diamond?',
50: '?Elite?',
}
def get_level(xp: int) -> float:
return (math.sqrt(4*xp/level_ratio + 1) - 1) / 2
def get_current_level(xp: int) -> float:
return (math.sqrt(4*xp/level_ratio + 1) - 1) // 2
def get_xp(level: int) -> int:
return level_ratio*level*(level + 1)
@bot.event
async def on_ready():
print('ready!')
@bot.event
async def on_message(message):
if message.channel.id not in config.talk_channels:
return
if message.author.bot:
return
if message.content.startswith(bot.command_prefix):
return await bot.process_commands(message)
user = db.levelling.find_one_and_update(
{'_id': message.author.id}, {'$inc': {'xp': 27}},
return_document=mg.ReturnDocument.AFTER
)
if user is None:
new_user = {'_id' : message.author.id, 'xp' : 100}
db.levelling.insert_one(new_user)
else:
level = get_level(user['xp'])
if level.is_integer():
await message.channel.send(
f'У {message.author.mention} повысился уровень до **{int(level)}**!'
)
if rank := levels.get(level):
await message.author.add_roles(ds.utils.get(message.author.guild.roles, name=rank))
embed = ds.Embed(description=f'{message.author.mention} ты получил роль **{rank}**!')
embed.set_thumbnail(url=message.author.avatar_url)
await message.channel.send(embed=embed)
@bot.command()
async def ранг(ctx):
if ctx.channel.id != config.bot_channel:
return
stats = db.levelling.find_one({'_id' : ctx.author.id})
if stats is None:
embed = ds.Embed(description='Вы не отправляли ни одного сообщения!')
await ctx.channel.send(embed=embed)
else:
xp = stats['xp']
lvl = get_current_level(xp)
next_xp = get_xp(lvl + 1)
rank = db.levelling.count_documents({'xp': {'$gt': xp}}) + 1
length_bar = 20
boxes = int(length_bar * xp / next_xp)
embed = ds.Embed(title=f'{ctx.author.name} статистика уровней')
embed.add_field(name='Имя', value=ctx.author.mention, inline=True)
embed.add_field(name='XP', value=f'{xp}/{next_xp}', inline=True)
embed.add_field(name='LvL', value=int(lvl), inline=True)
embed.add_field(name='Ранг', value=f'{rank}/{ctx.guild.member_count}', inline=True)
embed.add_field(
name='Progress Bar [lvl]',
value=boxes * ':blue_square:' + (length_bar-boxes) * ':white_large_square:',
inline=False
)
embed.set_thumbnail(url=ctx.author.avatar_url)
await ctx.channel.send(embed=embed)
@bot.command()
async def лидеры(ctx):
if ctx.channel.id != config.bot_channel:
return
embed = ds.Embed(title='Рейтинг участнков:')
rankings = db.levelling.find().sort('xp', mg.DESCENDING).limit(10)
for rank, user in enumerate(rankings, start=1):
xp = user['xp']
lvl = get_current_level(xp)
lvl = int(lvl)
member = ctx.guild.get_member(user['_id'])
embed.add_field(
name=f'{rank}: {member.name}',
value=f'Всего опыта: {xp} | Уровень: {lvl}',
inline=False
)
await ctx.channel.send(embed=embed)
bot.run(config.ds_token)
Но не работает эта строчка: await message.channel.send(f'У {message.author.mention} повысился уровень до **{int(level)}**!'). Тоесть не выводит это сообщение.
Почему не работает? Если что пишу на replit