Aiogram. Как сделать так, что бы если сообщение равнялось хотя бы одному элементу из списка, то чето запускалось

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

Мне нужно, что бы селектор запускалался, если я отправляю в бота одно из этих сообщений. по итогу приходится вставлять этот кусок кода, который внутри функции selector, в остальные функции, а это очень некрасиво

funcs = ['🎬','🔋','🎹','👂']
@dp.message_handler(lambda msg: (sexy(msg)),state='*')
async def selector(message: types.Message, state: FSMContext):
    if message.text == "🎬":
        await state.finish()
        await message.answer("===== CINEMA MENU =====", reply_markup=cinema_keyboard)
        await UserState.cinema.set()
    elif message.text == "🔋":
        await state.finish()
        await message.answer("===== POWER MENU =====", reply_markup=power_keyboard)
        await UserState.power.set()
    elif message.text == "🎹":
        await state.finish()
        await message.answer("===== MEDIA MENU =====", reply_markup=media_keyboard)
        await UserState.media.set()
    elif message.text == "👂":
        await state.finish()
        await message.answer("===== VOLUME MENU =====", reply_markup=volume_keyboard)
        await UserState.volume.set()

def sexy(msg):
    if msg.text in funcs:
        return True
    else: return False

Ответы

▲ 1

Если вопрос понял верно, то можно использовать декоратор @dp.message_handler для каждой функции меню, которая будет вызываться при нажатии соответствующей кнопки

@dp.message_handler(lambda msg: msg.text == "🎬", state='*')
async def cinema_menu(message: types.Message, state: FSMContext):
    await state.finish()
    await message.answer("===== CINEMA MENU =====", reply_markup=cinema_keyboard)
    await UserState.cinema.set()

@dp.message_handler(lambda msg: msg.text == "🔋", state='*')
async def power_menu(message: types.Message, state: FSMContext):
    await state.finish()
    await message.answer("===== POWER MENU =====", reply_markup=power_keyboard)
    await UserState.power.set()

@dp.message_handler(lambda msg: msg.text == "🎹", state='*')
async def media_menu(message: types.Message, state: FSMContext):
    await state.finish()
    await message.answer("===== MEDIA MENU =====", reply_markup=media_keyboard)
    await UserState.media.set()

@dp.message_handler(lambda msg: msg.text == "👂", state='*')
async def volume_menu(message: types.Message, state: FSMContext):
    await state.finish()
    await message.answer("===== VOLUME MENU =====", reply_markup=volume_keyboard)
    await UserState.volume.set()