Найти в Дзене
developer

Как написать Телеграм-бота? Часть 4. Ответы на сообщения и клавиатура.

Привет, сразу к делу Комментим прошлый хендлер и пишем в файле: @dp.message_handler(commands="start")
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = ["Кнопка слева", "Кнопка справа"]
keyboard.add(*buttons)
button2 = ["Кнопка снизу"]
keyboard.add(*button2)
await message.answer("Привет,я твой бот\nEnter\n\nДвойной Enter", reply_markup=keyboard)
keybord = types.ReplyKeyboardRemove() Получается примерно так. Теперь подробнее про каждую строчку: 1.@dp.message_handler(commands="start") Эта строчка как фильтр, если в сообщении будет одно слово start (а его придется написать при первом контакте с ботом ), то начнут выполняться команды прописанные снизу 2.async def cmd_start(message: types.Message): Для нас особо не важна, просто пишем 3.buttons = ["Кнопка слева", "Кнопка справа"]
keyboard.add(*buttons)
button2 = ["Кнопка снизу"]
keyboard.add(*button2) Это, как ни странно, сами кнопки. Стоит один р

Привет, сразу к делу

Комментим прошлый хендлер и пишем в файле:

@dp.message_handler(commands="start")
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = ["Кнопка слева", "Кнопка справа"]
keyboard.add(*buttons)
button2 = ["Кнопка снизу"]
keyboard.add(*button2)
await message.answer("Привет,я твой бот\nEnter\n\nДвойной Enter", reply_markup=keyboard)
keybord = types.ReplyKeyboardRemove()

Получается примерно так. Теперь подробнее про каждую строчку:

1.@dp.message_handler(commands="start") Эта строчка как фильтр, если в сообщении будет одно слово start (а его придется написать при первом контакте с ботом ), то начнут выполняться команды прописанные снизу

2.async def cmd_start(message: types.Message): Для нас особо не важна, просто пишем

3.buttons = ["Кнопка слева", "Кнопка справа"]
keyboard.add(*buttons)
button2 = ["Кнопка снизу"]
keyboard.add(*button2)

Это, как ни странно, сами кнопки. Стоит один раз разобраться в структуризации, есть несколько методов, но этот понравился мне больше всех.

4.await message.answer("Привет,я твой бот\nEnter\n\nДвойной Enter", reply_markup=keyboard)

Она дает команду боту на отправку ответа после того сообщения "start" и отображение клавиатуры, которую мы написали выше.

5.keybord = types.ReplyKeyboardRemove()

Позволяет удалить эту клавиатуру после нажатия по ней

-2

Так все это выглядит сейчас и не несет никакого функционала.

Создадим диалог;

@dp.message_handler(lambda message: message.text == "Меню")

Это новая команда которая позволяет писать без этой /скобки/

@dp.message_handler(commands="start")
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = ["Кнопка слева", "Кнопка справа"]
keyboard.add(*buttons)
button2 = ["Кнопка снизу"]
keyboard.add(*button2)
await message.answer("Привет,я твой бот\nEnter\n\nДвойной Enter", reply_markup=keyboard)
keybord = types.ReplyKeyboardRemove()

@dp.message_handler(lambda message: message.text == "Кнопка слева")
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = ["Меню"]
keyboard.add(*buttons)
await message.answer("Да, это кнопка слева,а ты не верил?!", reply_markup=keyboard)
keybord = types.ReplyKeyboardRemove()

@dp.message_handler(lambda message: message.text == "Кнопка справа")
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
button2 = ["Меню"]
keyboard.add(*button2)
await message.answer("Да, это кнопка справа, давай завязывай", reply_markup=keyboard)
keybord = types.ReplyKeyboardRemove()

@dp.message_handler(lambda message: message.text == "Кнопка снизу")
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
button2 = ["Меню"]
keyboard.add(*button2)
await message.answer("На серьезных щщах думаешь что тут что-то по-другому?", reply_markup=keyboard)
keybord = types.ReplyKeyboardRemove()

@dp.message_handler(lambda message: message.text == "Меню")
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = ["Кнопка слева", "Кнопка справа"]
keyboard.add(*buttons)
button2 = ["Кнопка снизу"]
keyboard.add(*button2)
await message.answer("Привет,я твой бот\nEnter\n\nДвойной Enter\nИ несколько кнопок)", reply_markup=keyboard)
keybord = types.ReplyKeyboardRemove()

-3

Вот мы и создали простейший функционал, который уже можно где-нибудь применить

-4

А чтобы вы не расслаблялись и качнули технический английский про второй тип кнопок предлагаю почитать самостоятельно по ссылке https://docs.aiogram.dev/en/latest/examples/index.html

Это официальная документация и в любом случае стоит ознакомиться)