aiogram обработчик реагирует только один раз

Рейтинг: 0Ответов: 1Опубликовано: 24.03.2023

Пишу бота на aiogram. Давно написал функцию с рассылкой и она работа нормально(а может я просто проглядел). В общем и целом, обработчик реагирует только один раз на отправленное фото/команду для рассылки текста/видео. Т.е. Если я отправляю фото - оно отлично рассылается, но если отправить снова фото - то бот не реагирует. Код:

def register_handlers_admin(dp : Dispatcher):
    dp.register_message_handler(ras_text, Command("text_all"))
    dp.register_message_handler(send_to_admin, content_types=types.ContentTypes.PHOTO)
    dp.register_message_handler(video_send, content_types=types.ContentTypes.VIDEO)


async def ras_text(message: types.Message):
found_admin = False
for admin in ADMINS:
    if message.from_user.id == admin[0]:
        found_admin = True
        break
if found_admin:
    text = message.text[10:]
    users = db.get_users()
    for row in users:
        try:
            await asyncio.sleep(.05)
            await bot.send_message(row[0],text)
            await bot.send_message(chat_id=row[0], text='Нужна помощь? Записывайтесь на консультацию', reply_markup=main_menu_keyboard)
            if int(row[1]) != 1:
                db.set_active(row[0], 1)
        except:
            db.set_active(row[0], 0)
    await bot.send_message(message.from_user.id, 'Razoslal')

Думаю, примера с текстом хватит, ведь видео/фото имеют аналогичный код. Если тут ошибка связанная с каким-нибудь условным register_message_handl - то не кидайте камни, я правда очень устал, чтобы долго искать решение проблемы (я искал, но даже подобных вопросов не увидел) (run_task=True пробовал - не помогло)

Ответы

▲ 0

Я разобрался почему у меня не отправляется фото/видео/текст(ну и некоторые команды не работают). Я все никак не мог понять, почему некоторые хендлеры работают сколько угодно раз, а какие-то только 1 раз? Суть в моей проверке на админа:

found_admin = False
for admin in ADMINS:
    if message.from_user.id == admin[0]:
        found_admin = True
        break
if found_admin:

После первого вызова этой функции found_admin принимает теперь постоянно True, и цикл больше не проходит.