Ошибка системы уровней
этот код должен проверять, достиг ли xp участника количества, необходимого для его повышения (2500 + 100 * на уровень участника) В конце концов он выводит эту ошибку :
2328 2 774143521568718849 0 - принт
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\путь\bot-main\venv\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users\путь\bot-main\cogs\other.py", line 354, in on_message
uxp = self.collection.find_one({'_id': user.id})['xp']
TypeError: 'NoneType' object is not subscriptable
Вот код:
@commands.Cog.listener()
async def on_message(self, message):
if self.bot.user == message.author:
return
user = message.author
data = self.collection.find_one({'_id': user.id})
msg_len = len(message.content)
rn = random.randint(1, 3)
exp1 = msg_len * rn
exp = round(exp1)
uxp = self.collection.find_one({'_id': user.id})['xp']
ulvl = self.collection.find_one({'_id': user.id})['lvl']
ubal = self.collection.find_one({'_id': user.id})['balance'] #для теста брала
print(uxp, ulvl, user.id, ubal)
if uxp >= 2500 + 100 * ulvl:
self.collection.update_one({'_id': user.id}, {'$set': {'lvl': data['lvl'] + 1}})
self.collection.update_one({'_id': user.id}, {'$set': {'xp': 0}})
emb = discord.Embed(title=f"**{user.name} поднял уровень!**", description=f'Теперь у него {data["xp"]}',
colour=discord.Color.random())
emb.set_thumbnail(url=user.avatar_url)
await message.channel.send(emb=emb, delete_after=20)
await message.add_reaction("✅")
await asyncio.sleep(20)
await message.delete()
else:
self.collection.update_one({'_id': user.id}, {'$set': {'xp': data['xp'] + exp}})
Ответы (1 шт):
Автор решения: Yachoy
→ Ссылка
Возможно, код не совсем полон. Но по тому что есть, функция по нахождению записи self.collection.find_one() не нашла совпадений. Проверьте правильно ли вы вписали в эту функции данные. Возможно опечатка? Или попросту пользователь еще не был добавлен в бд, а уже идет проверка его xp