Найти в Дзене
🌠 СМЕРТНИК dev

Telegram-бот | Инфо-бот | Урок №2 (Python)

Всем привет, второй урок на подходе. Сегодня разберем то, как сделать меню кнопок для удобной работы с ботом.

На прошлом уроке мы создали подключение кодировки к боту и создали базу данных. Если вы ещё не ознакомились с первым уроком, ссылка ниже:
https://dzen.ru/a/ZuLeaS_pDmf617MV?share_to=link

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

from telebot import types

-2

После db.commit() в обработчике start вписываем следующие строки:

markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2) # создаем саму клавиатуру и ставим сетку 2 в ряд
buttons = [
types.KeyboardButton(text="Создатель"),
types.KeyboardButton(text="Канал"),
types.KeyboardButton(text="Урок №1")
] # создаем и называем кнопки, назовите и выбирайте нужный Вам функционал
markup.add(*buttons) # активируем клавиатуру.

-3

Теперь, новые пользователи будут видеть меню после команды start.
Сделаем так, чтобы меню можно было включить и выключить пользователям, которые уже есть в базе данных (эти строки нужно вписать после обработчика start:

@bot.message_handler(func=lambda message: message.text.lower() == 'off') # обработчик сообщения с содержанием "off"
def menu_off (message): # создаем функцию, отключающую меню
sr = types.ReplyKeyboardRemove()
bot.send_message(message.chat.id, "Меню отключено", reply_markup=sr)



@bot.message_handler(func=lambda message: message.text.lower() == 'on') # обработчик сообщения с содержанием "on"
def menu_on (message): # создаем функцию, активирующую меню
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
buttons = [
types.KeyboardButton(text="Создатель"),
types.KeyboardButton(text="Канал"),
types.KeyboardButton(text="Урок №1")
]
markup.add(*buttons)
bot.send_message(message.chat.id, "Меню открыто", reply_markup=markup)

-4

Теперь, если в чат с ботом написать on то меню будет запущено, а если off - отключено:

-5
-6

А теперь настроим сами кнопки, а конкретно сделаем так, чтобы по нажатию кнопки - вызывалась определённая команда. Мой принцип, который я хочу сделать в пробном боте:
1. Создатель (будет выдаваться ссылка на мой аккаунт)
2. Канал (будет выдаваться ссылка на мой канал дзен)
3. Урок №1 (будет выдаваться ссылка на мой урок №1)

Все кнопки вы можете настраивать как хотите, то есть просто изменить названия кнопок и их содержимое для себя.

Начнём с обработки кнопки "Создатель".

@bot.message_handler(func=lambda message: message.text == 'Создатель')
def func1(message):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(message.chat.id, 'Аккаунт создателя: \n@im_pirate')
connection.commit()

А теперь поясняю что, зачем и почему.

with sqlite3.connect('database.db') as connection - отвечает за подключение к бд (вообще не нужна, но пусть будет)
cursor = connection.cursor() - создается курсор действия
connection.commit() - отключает подключение курсора

Проворачиваем всю эту работу и с остальными кнопками:

@bot.message_handler(func=lambda message: message.text == 'Канал')
def func2(message):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(message.chat.id, 'Канал создателя: \nhttps://dzen.ru/id/66e2d2c75ede51145fec543c?share_to=link')
connection.commit()


@bot.message_handler(func=lambda message: message.text == 'Урок №1')
def func3(message):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(message.chat.id, 'Урок №1: \nhttps://dzen.ru/a/ZuLeaS_pDmf617MV?share_to=link')
connection.commit()

-7

Ну вот и всё, тыкаем по кнопкам для того, чтобы убедиться о работоспособности кнопок.

-8
-9

Все работает! Наш с Вами урок окончен. Всем спасибо за внимание! На случай если у Вас появятся дополнительные вопросы или будут какие-либо проблемы с кодом - пишите, всегда буду рад помочь!
https://t.me/im_pirate

Дорогу молодым!