Aiogram. Как сделать так, что бы если сообщение равнялось хотя бы одному элементу из списка, то чето запускалось
Мне нужно, что бы селектор запускалался, если я отправляю в бота одно из этих сообщений. по итогу приходится вставлять этот кусок кода, который внутри функции 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 шт):
Автор решения: Aleksandr Fetisov
→ Ссылка
Если вопрос понял верно, то можно использовать декоратор @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()