Основы создания telegram bot Python

Основы создания telegram bot Python

В этой статье вы узнаете основы создания telegram бота на python. Сначала создается бот в приложении telegram, а затем с помощью python прописывается его функционал. Соединение между кодом из python и ботом происходит за счет специального токена, который вы получите при создании бота в приложении telegram. И так по порядку.

Работа с BotFathe

Для создания бота в приложении нужно перейти в BotFathe и в текстовом поле ввести команду  /newbot или выбрать её из меню.

  1. После этого нужно указать боту имя. Имя может быть любое, его потом можно будет поменять.
  2. Теперь нужно придумать ему логин, названи по которому мы сможем обращаться к вашему боту. Здесь нужно придумать имя на латинице, без пробелов, специальных символов и в конце обязательно дописать bot. Например, test_itsfera_bot.
  3. После успешного добавления вам выдадут уникальный токен. С помощью него мы будем управлять нашим ботом и поэтому никому нельзя говорить и показывать этот токен. Если с токеном что-то случилось, то его можно сгенерировать заново.

Для изменения бота  в BotFather есть много различных команд. В таблице ниже я предоставил список часто используемых.

Основные команды BotFather
/newbot создание нового бота (create a new bot)
/mybots вывести список созданных ботов с возможностью редактировать
/token сгенерировать новый API токен для бота
/setname изменить имя бота
/setdescription изменить описание бота
/setuserpic установить изображение бота (добавить аватарку)
/setcommands Добавить команду для бота
/setdomain привязать домен сайта к боту
/deletebot удалить бота
/cancel отменить (позволяет вернуться к началу)

 

Библиотека python для создания бота telegram

Самые распространённые библиотеки — это aiogram и telebot. Они практически одинаковы и отличие их лишь в том, что aiogram позволяет делать асинхронные функции. Но telebot намного проще в освоении и для большинства проектов его вполне достаточно. В этой статье мы будем использовать библиотеку telebot. Документацию по этой библиотеке можно почитать здесь. Документация telebot на русском языке здесь (на момент написания переведено всё кроме Types of API).

Устанавливаем библиотеку в наш проект: pip install pyTelegramBotAPI

Код для бота

Создаем два python файла. В одном мы будем писать весь код, а в другом будем хранить переменную с нашим токеном. Для примера я создам bot.py, где будет находится основной код и config.py, где будет содержаться токен нашего бота.

Для начала в config.py прописываем переменную в которую помещаем наш токен:

token = ‘Ваш токен из BotFathe’

Теперь переходим в bot.py, импортируем установленную библиотеку в наш проект import telebot и подключаем наш config.py from config import token

Теперь создаем и подключаем нашего бота. Для этого создаем переменную и прописываем следующее:

mybot = telebot.TeleBot(token)
где mybot #  название переменной (может быть любой)
    telebot # обращаемся к модулю
    TeleBot(token) #  обращаемся к классу TeleBot и в () передаем токен

Обработчик сообщений

При написании любого телеграм бота мы в основном всегда создаем обработчики. Эти обработчики обрабатывают сообщения, которые пользователь пишет боту. Разберем это на примере команды start. Когда пользователь введет эту команду, то получит определенный ответ.

@mybot.message_handler(commands=['start'])
def start_mess(message):
    mybot.send_message(message.chat.id, 'Привет!')

mybot.infinity_polling()
# Пояснение:
@mybot.message_handler # обращаемся к нашему боту и вызываем 
                        # метод обработки сообщения
   (commands=['start']) # фильтр по которому идет отслеживание, 
                         # список других фильтров в таблице ниже
      commands= # означает, что будем обрабатывать команду
      ['start'] # указываем какую команду будем обрабатывать, 
                 # ели хотим обрабатывать сразу несколько команд, 
                 # то перечисляем их через запятую.
def start_mess(message): # создаем функцию
   mybot.send_message # говорим боту отправить сообщение
      mybot # имя нашего бота
     .send_message # метод, который отправляет сообщение текстом,
                    # ниже вы найдете другие методы отправки.
    (message.chat.id, 'Привет!') # выводим в чат сообщение Привет!
     .chat # обращаемся к чату
     .id # это id чата куда нужно отправить сообщение
     'Привет!' # сообщение, которое будет отправлено в чат
mybot.infinity_polling() # указываем чтобы наш бот постоянно работает

Сохраняем и запускаем наш python файл. Переходим в нашего бота и пробуем написать  команду /start. Если вы всё сделали правильно, то каждый раз при вводе этой команды, бот будет отвечать Привет!

Фильтры обработки

При обработки сообщения (message_handle), мы применили фильтр commands и отслеживали команды. Также можно использовать и другие фильтры отслеживания.

NAME ARGUMENT(S) CONDITION
content_types список строк (по умолчанию [‘text’]) True, если message.content_type находится в списке строк
regexp регулярное выражение в виде строки True, если re.searh(regexp_arg) возвращает True и message.content_type==’text’
commands список строк команд True, если message.content_type == ‘text’ и message.text начинается с команды, которая находится в списке строк
chat_types список типов чатов True, если message.content_type в вашем фильтре
func функция (лямбда или ссылка на функцию) True, если лямбда или ссылка на функцию возвращается True

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

content_types может быть:
text обычное текстовое поле
audio аудио-файл
document документ
photo фотография или изображение
sticker стикер
video видео
voice голосовое сообщение
location геолокация
contact контакт

Отправка сообщений

В примере на команду /start наш бот отправлял пользователю сообщение (send_message). Но можно отправлять не только текст. За счет функций send вы можете отправлять разные типы файлов. Рассмотрим основные:

  • .send_photo – отправка фотографии
  • .send_audio – отправка звука / мелодии
  • .send_video – отправка видео
  • .send_message – отправка сообщения

Создание кнопок

В Telegram вы можете создать два типа кнопок:

  • telebot.types.InlineKeyboardMarkup – встроенные кнопки, что отображаются возле сообщения
  • telebot.types.ReplyKeyboardMarkup – кнопки, что отображаются возле клавиатуры

Оба типа работают по схожему принципу. Разница лишь в месте где они отображаются и способе обработки нажатия. Для встроенных кнопок используется параметр callback_data для каждой отдельной кнопки. Для reply кнопок используется регистрация следующего действия.

Встроенные кнопки

Разберём пример создания встроенных кнопок. Для начало необходимо создать клавиатуру. Создаем переменную и прописываем ей команду:

my_keyboard = telebot.types.InlineKeyboardMarkup()
Теперь можно создавать кнопки:
ey_one = telebot.types.InlineKeyboardButton(text='Больше 18', callback_data='1')
# Пояснение:
#  InlineKeyboardButton - создание кнопки
#  text='Больше 18?' - название кнопки
#  callback_data='1' - значение, которое будет возвращать кнопка

# Создадим вторую кнопку:
key_two = telebot.types.InlineKeyboardButton(text='Меньше 18', callback_data='2')

# После создания кнопок их нужно добавить в клавиатуру:
my_keyboard.add(key_one)
my_keyboard.add(key_two)

#Теперь мы можем вывести эти кнопки пользователю:
mybot.send_message(message.chat.id, 'Сколько вам лет?', reply_markup=my_keyboard)
 

Обработчик кнопок

Кнопки мы создали, но теперь нужно сделать чтобы при их нажатии пользователь получал информацию.

@mybot.callback_query_handler(func=lambda call: True)
def callbackboard(call):
    if call.data == '1':
        mybot.send_message(call.message.chat.id, 'Доступ открыт')
    if call.data == '2':
        mybot.send_message(call.message.chat.id, 'Доступ пока закрыт')

Пишите в комментариях нужно ли больше информации по созданию telegram bot на python?

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

Чтобы оставить комментарий, пожалуйста, войдите или зарегистрируйтесь.