В этой статье мы разберём, как создать простой Telegram bot на языке программирования Python, но тут будут только основы, которые скорее для новичков, чем для профессионалов.
Также если вас интересует разработка ботов, но на JavaScript, то можете посмотреть статью: «Telegram bot на JavaScript», ещё скажу, что по сути мы будем делать бота из этой статьи, только на Python.
Установка Telegram API:
Для начала нужно скачать нужный API, для создания бота, но перед этим рекомендуется сделать виртуальное окружение, для этого прочитайте статью «Создание Virtual Environments Python».
После того как это сделали скачиваем telegram bot API на Python, это делается как обычно через pip install.
1 | pip install pyTelegramBotAPI |
На этом установка закончилась.
Регистрация Telegram бота:
Перед созданием, нужно получить токен для бота, для этого напишите боту @BotFather.
Там пишем команду «/newbot», после вам нужно будет выбрать имя бота, которое будет отображается в списке чатов, потом имя для обращения к чату, которое через знак собаки, после этого получите токен.
Там где замазано, это и есть токен который вы получаете.
Создание Telegram bot на Python:
Теперь перейдём к самому интересному, это к написанию кода, для этого создадим файл где всё будет хранится, я его назову «main.py», в начале в нём делаем импорт и создаём переменную для токена.
1 2 3 4 5 6 7 8 | # Подключаем Telegram API import telebot # Подключаем библиотеку для создания кнопок from telebot import types token = 'Ваш_токен' # Объявляем бота bot = telebot.TeleBot(token) |
Здесь мы подключаем API и специальную библиотеку «types», которая нам нужна для создания кнопок к сообщениям, но кроме этого у неё есть и другие возможности.
Потом объявляем переменную для токена, и создаём бота.
Следующие, пишем не большую функцию для создания кнопок.
1 2 3 4 5 6 7 8 9 10 11 12 13 | def create_keyboard(): # Создаём тип для кнопок keyboard = types.InlineKeyboardMarkup() # Создаём первую кнопку drink_btn = types.InlineKeyboardButton(text="Хочу пить", callback_data="1") # Создаём вторую кнопку eat_btn = types.InlineKeyboardButton(text="Хочу есть", callback_data="2") # Добавляем первую кнопку в специальный список keyboard.add(drink_btn) # Добавляем вторую кнопку в специальный список keyboard.add(eat_btn) # Возвращаем кнопки return keyboard |
Здесь первым делом мы должны сделать специальный массив, для хранения кнопок, используя types.InlineKeyboardMarkup()
, потом делаем две кнопки, тут самое интересное, то какие параметры используются при создание, первый, это текст кнопки, а второе, callback_data
, то какое значение оно будет возвращать при нажатие.
После через метод add()
, добавляем их в массив и возвращаем его. После можно создать функцию, которая будет срабатывать при запуске бота.
1 2 3 4 5 6 7 8 9 10 11 12 | # Обозначаем чтобы функция срабатывала при команде /start @bot.message_handler(commands=['start']) # Объявляем функцию def start_bot(message): # Создаём кнопки keyboard = create_keyboard() # Отправляем сообщение пользователю bot.send_message( message.chat.id, # Идентификатор ID "Добрый день, чего хотите?", # Текст сообщения reply_markup=keyboard # Кнопки ) |
Первым делом у нас идёт декоратор, который срабатывает при получение команды «/start», которые обозначаются в параметре commands, который является списком и можно обозначить таким образом несколько команд.
Потом создаём функцию для отправки сообщения, в ней первым делом получаем наши кнопки, потом через функцию send_message()
, мы отправляем сообщение.
Примечание:
Название функции после декоратора может быть любое, это не имеет значение.
Последняя функция которая осталось сделать, это для получения значений их кнопки, она делается точно таким же способом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # Декоратор который означает для получения каких-то значений @bot.callback_query_handler(func=lambda call: True) # Создаём функцию def callback_inline(call): # Делаем кнопки keyboard = create_keyboard() # Проверяем есть ли сообщение if call.message: # Если значение кнопки равно одному то if call.data == "1": # Открываем картинку с водой img = open('calm-2315559_640.jpg', 'rb') # Отправляем картинку bot.send_photo( chat_id=call.message.chat.id, # Идентификатор чата photo=img, # Картинка caption="Вот вам вода? ещё чего-нибудь хотите?", # Текст к картинки reply_markup=keyboard # Кнопки ) # Закрываем картинку img.close() elif call.data == "2": Если значение равно двум то # Открываем картинку с блинчиками img = open('pancakes-2020863_640.jpg', 'rb') # Отправляем картинку bot.send_photo( chat_id=call.message.chat.id, # Идентификатор чата photo=img, # Картинка caption="Вот вам вода? ещё чего-нибудь хотите?", # Текст к картинки reply_markup=keyboard # Кнопки ) # Закрываем картинку img.close() |
Здесь мы уже в качестве декоратора обозначаем получение информации от кнопок, но это может быть и что-то другое не обязательно кнопки.
Внутри функции мы создаём кнопки и проверяем, есть ли вообще сообщение, если да, то идёт проверка, что значение сообщения рано одному, это параметр callback_data, который мы использовали при создание кнопок.
Если все верно, то открываем картинку и отправляем её с помощью функции send_photo()
, тут все такие же параметры как и при отправки обычного сообщения, только есть photo, которому задаём картинку и вместо text
, для текста сообщения, используем caption
, дальше закрываем картинку.
Если же первое условие не верно, то проверяем второе, то там нужно значение два, если правильно, то делаем всё также, единственное вместо картинки с водой, используем картинку с блинчиками.
Последние что осталось добавить, это код для запуска бота.
1 2 | if __name__ == '__main__': bot.polling(none_stop=True) |
Тут я даже комментировать не стал, так как всё понятно, давайте теперь посмотрим что получилось, для этого запустим его.
Как видите всё работает, если хотите протестировать самостоятельно, то вы сможете скачать этот Telegram bot на Python.
Вывод:
В этой статье вы узнали как создать Telegram bot на Python, если вам понравилась библиотека благодаря которой мы это сделали, то посмотрите её документацию.