Aiogram Получение значения из KeyBoard
Как мне осуществить переход по функциям через меню? Например, если я нажал 'Посмотреть доступные каналы' выполнилась функция channels(). И как в данном случае реализовать FSM вместе с InlineButtons?
Пример кода:
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
await message.answer_sticker(f'{config.STICKER_START}')
await message.reply("? Добро пожаловать в спам бота! Напишите /menu, чтобы войти в меню | made by kapitanov", reply_markup=kb.menu)
async def channels(message: types.Message):
channels = db.channels()
await message.answer(f"? [{current_date}] ?\n✅ Состояние каналов на текущий момент:\n{channels}")
# ========================================
''' Удаление канала '''
async def delete_channel(message: types.Message, state=None):
await bot.send_message(message.from_user.id, "✏️ Введите ID канала, который хотите удалить\n(P.S можно посмотреть в Меню->Каналы")
await Delete_Channel.Channel_id.set()
@dp.message_handler(state=Delete_Channel.Channel_id)
async def answer_delete_channel_id(message: types.Message, state: FSMContext):
channel_id = message.text
await state.update_data(channel_id=channel_id)
data = await state.get_data()
channel_id = data.get("channel_id")
db.delete_channel(channel_id)
await message.answer("✅ Канал успешно удалён!")
await state.finish()
# ========================================
@dp.callback_query_handler(lambda timing: timing.data == "timing", state=None)
async def change_time(callback_query: types.CallbackQuery):
await bot.answer_callback_query(callback_query.id)
timing = db.view_message_timing()
timing = round(int(timing) / 1000)
await bot.send_message(callback_query.from_user.id, f"? [{current_date}] ?\n\nУстановленное сейчас время: {timing} сек.⏱\n\nВведите интервал в секундах (тайминг между сообщениями)")
await Change_Time.Message_time.set()
@dp.message_handler(state=Change_Time.Message_time)
async def answer_change_time(message: types.Message, state: FSMContext):
message_time = message.text
await state.update_data(message_time=message_time)
data = await state.get_data()
message_time = data.get("message_time")
db.edit_message_time(message_time)
await message.answer("⏱ Время между сообщениями успешно изменено!")
await state.finish()
@dp.message_handler(commands=['menu'])
async def menu(message: types.Message):
if message.text == "?? Посмотреть все доступные каналы":
await channels()
Ответы (1 шт):
Автор решения: rocinante
→ Ссылка
@dp.message_handler(commands="help")
async def cmd_help(message: types.Message, state: FSMContext):
await state.reset_state()
await OrderSupport.start_support.set()
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
stop_button = types.InlineKeyboardButton(
text="Завершить общение",
)
keyboard.add(stop_button)
await message.answer("Начат чат со службой тех-поддержки", reply_markup=keyboard)