HartX
@HartX
Студент, красавчик, плохой программист=)

Как зациклить выполнение функции до нажатия определённой кнопки в aiogram?

Я хочу сделать такуюю систему: Пользователь выбирает время, источники, актуальность и получает выдачу по желанию. Я сделал следующее:
class StateBot(StatesGroup):
    main_state = State()
    filter_date_state = State()
    filter_source_state = State()
    filter_actual_state = State()


@dp.message_handler(lambda message: message.text and 'Фильтр' in message.text)
async def get_date(message: types.Message):
    await message.reply("Выберите дату", reply_markup=date_keyboard)
    await StateBot.filter_date_state.set()


@dp.message_handler(state=StateBot.filter_date_state)
async def get_source(message: types.Message, state: FSMContext):
    await message.reply("Выберите источники", reply_markup=source_keyboard)
    global CURRENT_DATA
    message = message['text'].lower()
    if 'день' in message:
        CURRENT_DATA = DATE.DAY
    elif 'неделя' in message:
        CURRENT_DATA = DATE.WEEK
    elif 'месяц' in message:
        CURRENT_DATA = DATE.MONTH
    elif 'год' in message:
        CURRENT_DATA = DATE.YEAR
    await StateBot.filter_source_state.set()

@dp.message_handler(text='Далее', state=StateBot.filter_source_state)
async def get_actual(message: types.Message, state: FSMContext):
    await message.reply("Выберите актуальность", reply_markup=actual_keyboard)
    global CURRENT_SOURCE
    CURRENT_SOURCE = list(set(CURRENT_SOURCE))
    await StateBot.filter_actual_state.set()


И вот тут начинается проблема. Когда он доходит до источников, я хочу что бы пользователь мог выбрать несколько источников Для чего пишу функцию ниже, но бот упорно не входит в эту функцию не при каких условиях и я не понимаю почему

@dp.message_handler(lambda message: message.text and 'YouTube' in message.text or 'VK' in message.text)
async def add_source(message: types.Message, state: FSMContext):
    global CURRENT_SOURCE
    message = message['text'].lower()
    if 'youtube' in message:
        CURRENT_SOURCE.append(SOURCE.YOUTUBE)
    if 'vk' in message:
        CURRENT_SOURCE.append(SOURCE.VK)


Я так же пробовал:
@dp.message_handler(lambda message: message.text and 'YouTube' in message.text or 'VK' in message.text, state=StateBot.filter_source_state)

@dp.message_handler(text=['YouTube', 'VK'])

@dp.message_handler(filters.Text(contains=['YouTube', 'VK'], ignore_case=True))


Но он, как и раньше просто не заходил в эту функцию при нажатии на кнопки YouTube или VK, что я делаю не так?
P.S. При этом если с самого начала ввести YouTube то он войдёт в эту функцию, но если выбрать дату, а потом нажать на кнопочку YouTube он опять игнорирует эту функцию
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы