И снова привет. Рассмотрим уже цель третьего урока. Рассмотрим как сделать отдельные команды для бота, а так же сделаем на них кнопки.
Начнём с того что в разработке функции кода есть два определения - message и call
Message - отвечает за сообщения, то есть кодировка рассматривает только отправленные сообщения.
Call - отвечает за отклик. Это как своеобразный активатор вызова функции.
Пример:
@bot.message_handler(func=lambda message: ...)
def func1(message):
Эта кодировка будет считывать именно отправленные сообщения в бота. С ними мы уже знакомы. message_hander осматривает только ТОЧНОЕ СХОДСТВО с заданной переменной, то есть если написать message.text == "Hello" кодировка не будет принимать hello (строчная буква в начале)
Так же есть обработчик message.text.lower() - он считывает заданную переменную без учёта пробелов в начале или в конце сообщения. (думаю тут понятна суть работы обработчика)
Приступим к практике. Сделаем сначала просто вызов команды:
@bot.message_handler(func=lambda message: message.text == "Привет")
def func_h(message):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(message.chat.id, 'Привет, я инфо-бот! <3')
connection.commit()
А теперь сделаем так, чтобы кодировка осматривала сразу несколько значений:
@bot.message_handler(func=lambda message: message.text in ["Здарова", "Привет", "Здравствуйте"]) # Так же можно добавить слова и со строчной буквы
def func_h(message):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(message.chat.id, 'Привет, я инфо-бот! <3')
connection.commit()
Так, обработку сообщений рассмотрели, теперь перейдём к созданию "сеткового" сообщения.
Для создания сети нам понадобится kb(types)
Приступим к развлечению!)
@bot.message_handler(func=lambda message: message.text == "Кнопочки")
def func_b(message):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
kb = types.InlineKeyboardMarkup(row_width=2) #выставляем размер сетки кнопок
kb.add(
types.InlineKeyboardButton(text='Создатель', callback_data='sozd'),
types.InlineKeyboardButton(text='Канал', callback_data='chan'),
types.InlineKeyboardButton(text='Урок №1', callback_data='les1')
) #добавляем кнопки к сообщению
bot.send_message(message.chat.id, "Сетка кнопок по команде вызвана!", reply_markup=kb) #Ответное сообщение с вызовом сетки через reply_markup
А теперь объясню что такое callback_data. Это вызов следующего обработчика, который будет записан следующим образом (заодно напишем кодировку к первой кнопке):
@bot.callback_query_handler(func= lambda call: call.data == 'sozd') #Обязательно call.data должно соответствовать написанному в кнопке callback_data!
def givedonate(call):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(call.message.chat.id, "Аккаунт создателя: \n@im_pirate")
connection.commit()
А теперь, по этому же принципу добавляем остальные две кнопки:
@bot.callback_query_handler(func= lambda call: call.data == 'chan')
def chan(call):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(call.message.chat.id, "Канал создателя: \nhttps://dzen.ru/id/66e2d2c75ede51145fec543c?share_to=link")
connection.commit()
@bot.callback_query_handler(func= lambda call: call.data == 'les1')
def les1(call):
with sqlite3.connect('database.db') as connection:
cursor = connection.cursor()
bot.send_message(call.message.chat.id, "Урок №1: \nhttps://dzen.ru/a/ZuLeaS_pDmf617MV?share_to=link")
connection.commit()
Вот и всё. Краткий, понятный урок окончен!)
Благодарю Вас за внимание!
*Если произошли какие-либо ошибки или появились вопросы - не стесняйтесь писать мне в ЛС Telegram (в профиле есть ссылка, или *КЛИК*)