Как сделать разные ответы на кнопки в боте?

Как сделать в одном хендрере, чтобы бот отвечал по разному в зависимости от выбранной кнопки ?

from aiogram import types
from aiogram.dispatcher.filters import Text
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton

menu = ReplyKeyboardMarkup(
    keyboard=[
        [
            KeyboardButton(text='Расписание ?'),
            KeyboardButton(text='Программы ?'),
        ],
        [
            KeyboardButton(text='О проекте  ?')
        ],
    ],
resize_keyboard=True)

@dp.message_handler(Text(equals=['Расписание ?','Программы ?','О проекте  ?']))
async def menu1(message: types.Message)

Ответы (2 шт):

Автор решения: finally

не совсем мне понятно, как вы дошли до того кода, что вы написали, если не понимаете, как прочитать текст из "переменной", но опустим это.

т.к хэндлер это декоратор над функцией, функция принимает что-то. это что-то и есть ответ юзера ( о чем говорит нам типовая подсказка types.Message), и логично, текст сообщения можно прочитать - message.text.

if message.text == 'your button name':
    ...

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

→ Ссылка
Автор решения: Serg Bocharov

Вам останется только подставить ваш токен. Ну и тщательно прочитать документацию aiogram, уроки, примеры

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton


bot = Bot(token="Здесь ваш токен")
dp = Dispatcher(bot)
       

keyboard = InlineKeyboardMarkup()
menu_1 = InlineKeyboardButton(text='Расписание ?', callback_data="menu_1")
menu_2 = InlineKeyboardButton(text='Программы ?', callback_data="menu_2")
menu_3 = InlineKeyboardButton(text='О проекте  ?', callback_data="menu_3")
keyboard.add(menu_1, menu_2, menu_3)


@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.reply("Привет!\nНапиши мне что-нибудь!", reply_markup=keyboard)


@dp.callback_query_handler(text_contains='menu_')
async def menu(call: types.CallbackQuery):
    if call.data and call.data.startswith("menu_"):
        code = call.data[-1:]
        if code.isdigit():
            code = int(code)
        if code == 1:
            await call.message.edit_text('Нажата кнопка Расписание', reply_markup=keyboard)
        if code == 2:
            await call.message.edit_text('Нажата кнопка Программы', reply_markup=keyboard)
        if code == 3:
            await call.message.edit_text('Нажата кнопка О проекте', reply_markup=keyboard)
        else:
            await bot.answer_callback_query(call.id)


if __name__ == '__main__':
    executor.start_polling(dp)
→ Ссылка