Не происходит проверка aiogram
Сделал проверку, которая должна изменять статус пользователя:
async def status_up(msg: Message):
print('started')
status = db.status(msg.from_user.id).fetchone()[0] # Какой статус на данный момент
refs = db.count_referals(msg.from_user.id).fetchone()[0] # Кол-во рефов
states = ['? Гость', '? Новичек', '? Освоившийся', '? Профессионал', '? Просветлённый', '? Ветеран', '?PREMIUM'] # Список со статусами
frase= msg.answer(f'Ваш статус был повышен! Подробнее в вашем профиле.\nВаш новый статус - {status}')
# Если статус еще не равен первому в списке, ранг равен 1 и рефералов 0, то начисляется
# новый статус и всякие плюшки(см. ниже)
if status != states[0] and db.rang(msg.from_user.id).fetchone()[0]==1 and refs == 0:
db.status(msg.from_user.id, status=1)
await frase
db.RPC(msg.from_user.id, count=0.01) # Кол-во заработка
db.clicks(msg.from_user.id, limit=100) # Кол-во кликов
if status != states[1] and db.rang(msg.from_user.id).fetchone()[0]==2 and refs == 3:
db.status(msg.from_user.id, status=2)
await frase
db.RPC(msg.from_user.id, count=0.07)
db.clicks(msg.from_user.id, limit=100)
if status != states[2] and db.rang(msg.from_user.id).fetchone()[0]==3 and refs == 5:
db.status(msg.from_user.id, status=3)
await frase
db.RPC(msg.from_user.id, count=0.14)
db.clicks(msg.from_user.id, limit=150)
if status != states[3] and db.rang(msg.from_user.id).fetchone()[0]==4 and refs == 25:
db.status(msg.from_user.id, status=4)
await frase
db.RPC(msg.from_user.id, count=0.25)
db.clicks(msg.from_user.id, limit=150)
if status != states[4] and db.rang(msg.from_user.id).fetchone()[0]==5 and refs == 75:
db.status(msg.from_user.id, status=5)
await frase
db.RPC(msg.from_user.id, count=0.33)
db.clicks(msg.from_user.id, limit=200)
if status != states[5] and db.rang(msg.from_user.id).fetchone()[0]==6 and refs == 120:
db.status(msg.from_user.id, status=6)
await frase
db.RPC(msg.from_user.id, count=0.40)
db.clicks(msg.from_user.id, limit=200)
if status != states[6] and db.rang(msg.from_user.id).fetchone()[0]==7 and refs == 350:
db.status(msg.from_user.id, status=7)
await frase
db.RPC(msg.from_user.id, count=0.55)
db.clicks(msg.from_user.id, limit=275)
# Цикл который я запускаю для запуска функции
async def test(msg: Message):
while True:
print('working...')
await status_up(msg)
await asyncio.sleep(1)
Вот таким кодом я изменяю статусы в БД:
def status(self, usd, status=None):
'''Смена статуса для пользователей'''
states = ['? Гость','? Новичек','? Освоившийся','? Профессионал','? Просветлённый','? Ветеран', '?PREMIUM']
if status is not None:
if status == 1:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[0], usd))
return self.conn.commit()
elif status == 2:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[1], usd))
return self.conn.commit()
elif status == 3:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[2], usd))
return self.conn.commit()
elif status == 4:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[3], usd))
return self.conn.commit()
elif status == 5:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[4], usd))
return self.conn.commit()
elif status == 6:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[5], usd))
return self.conn.commit()
elif status == 7:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[6], usd))
return self.conn.commit()
else:
"""Выводит значение в остальных случаях"""
return self.conn.execute("SELECT status FROM users WHERE user_id=?", (usd,))
ошибок не выводит, бот в целом работает после запуска этой функции, пока что запускаю в /start и может подскажете как запускать проверку при старте бота? Заранее спасибо!
Ответы (2 шт):
Автор решения: Nqweqweqwe
→ Ссылка
Перед тем как выложить не заметил что у меня есть вторая функция как status но с рангом, и я забыл изменить в "UPDATE users SET ststus ..." status на rang
Автор решения: NTA
→ Ссылка
На aiogram 2.x:
from aiogrma import Bot, Dispatcher, executor, types
''' код '''
executor.start_polling(dp, on_startup=status)
На aiogram 3.x:
from aiogram import Bot, Dispatcher, types
import asyncio
''' код '''
async def main():
await dp.start_polling(bot)
status()
asyncio.run(main())
status() - проверка, нужно ли повысить статус, как я понял.