Telegram Bot на Python

Telegram bot

Чат-бот - це автоматизований багатофункціональний помічник, який може показувати інформацію підписникам і збирати інформацію за запитом згідно із заздалегідь підготовленими сценаріями.

Як створити нового бота в Telegram

Відкрийте месенджер Telegram, увійдіть у ваш обліковий запис або створіть новий.

  1. Введіть у поле пошуку @BotFather і виберіть бота.
  2. Натисніть “Запустити” для активації бота BotFather. У відповідь ви отримаєте список команд з управління ботів.
  3. Виберіть або надрукуйте та надішліть команду /newbot.
  4. Дайте ім’я боту - клієнти побачать це ім’я під час спілкування з ботом. І нікнейм бота - за ним можна буде знайти бота в Telegram. Нікнейм має бути унікальним, не повторювати ті, що існують у базі, і закінчуватися на слово “bot”. Після того як ви оберете відповідне ім’я, бот буде створений. Ви отримаєте повідомлення з посиланням на бота t.me/<нікнейм_бота>, токен, рекомендації з налаштування аватарки, опис бота і список команд для налаштування бота. Ніколи і нікому не повідомляйте токен свого бота! Інакше до нього може отримати доступ будь хто.

Програмування бота на Python

Для роботи з API Телеграм ми будемо використовувати одну з популярних бібліотек PyTelegramBotApi. Для її встановлення використовуємо команду:

pip install PyTelegramBotApi

В новому проекті створюємо файл з довільною назвою, наприклад bot.py і підключаємо необхідні бібліотеки:

import telebot
import requests

Для того щоб бот працював потрібно в GET запиті який буде робити бібліотека, передати токен нашого бота. Всі звернення які ми будемо робити в подальшому, будуть проходити через змінну bot. В залежності від типу звернення, ми будемо передавати певний метод та аргументи для нього.

Створюємо змінну bot:

bot = telebot.TeleBot("Token") # Замість Token підставляємо свій токен бота

Тепер нам потрібно написати обробку дій користувача в боті по основним командам. Сама головна команда бота, команда /start. Вона не тільки запускає бота, а щей робить його перезавантаження. Обробку функцій ми зробимо з-за допомогою декораторів.


@bot.message_handler(commands=['start']) # Декоратор який приймає нашу команду
## Функція обробки повідомлень. Приймає аргумент message від телеграм.
def send_welcome(message): 
    bot.send_message(message.chat.id, text="Hello world")
    

Для того щоб бот працював без зупинки, треба в кінці файлу викликати метод infinity_polling:

bot.infinity_polling()

Тепер можна запустити нашого бота і перевірити як він реагує на команду /start. Якщо бот вам відповідає, значить все ви зробили правильно. Зупинимось детально на окремих моментах. bot.send_message(message.chat.id, text=“Hello world”) З змінної bot ми викликаємо метод send_message, це метод який відправляє повідомлення користувачу. Список всіх доступних методів можете знайти в документації в розділі доступні методи

message.chat.id це унікальний ID користувача телеграм. Його отримують всі коли реєструються.

Для обробки звичайних повідомлень напишемо окрему функцію і декоратор який буде оброблювати текстові повідомлення та шукати наші персональні команди:

@bot.message_handler(content_types=['text'])
def func(message):
    if message.text == 'simple_text':
         bot.send_message(message.chat.id, text="Hello")

Тепер коли в нас є функція обробки звичайного тексту, ми можемо писати тригери по яким бот буде відповідати на надісланий йому текст використовуючи прості умови if else

Клавіатура бота

В телеграм ботах є два види клавіатури, markup та inline. markup клавіатура з’являється замість звичайної клавіатури набору тексту, inline в самому повідомленні. В цьому уроці ми будемо працювати з клавіатурою markup. Клавіатура це простий список який треба передати d аргументі reply_markup. При натисканні на кнопку, користувачеві відправляється звичайний текст, на який бот реагує в залежності від прописаних методів в умовах. Варто пам’ятати що на кожну ітерацію відправки, повина бути своя клавіатура.

Для роботи з клавіатурами треба імпортувати новий метод з бібліотеки та створити список кнопок нашої клавіатури:


from telebot import types


@bot.message_handler(commands=['start'])
def send_welcome(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Menu 1")
    btn2 = types.KeyboardButton("Menu 2")
    markup.add(btn1, btn2)

    bot.send_message(message.chat.id, text="Hello world", reply_markup=markup)

Тепер при запуску бота, з повідомленням ми отримаємо нашу клавіатуру. Для того щоб бот на неї реагував треба додати окремі клавіатури в обрабку текстових повідомлень.

@bot.message_handler(content_types=['text'])
def func(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Menu 1")
    btn2 = types.KeyboardButton("Menu 2")
    markup.add(btn1, btn2)

    if message.text == 'Menu 1':
        markup_menu2 = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1_menu2 = types.KeyboardButton("Back")
        btn2_menu2 = types.KeyboardButton("Button 1 Menu 1")
        btn3_menu2 = types.KeyboardButton("Button 2 Menu 1")
        markup_menu2.add(btn1_menu2, btn2_menu2, btn3_menu2)

        bot.send_message(message.chat.id, text="Menu 1", reply_markup=markup_menu2)

    elif message.text == 'Menu 2':
        markup_menu3 = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1_menu3 = types.KeyboardButton("Back")
        btn2_menu3 = types.KeyboardButton("Button 1 Menu 2")
        btn3_menu3 = types.KeyboardButton("Button 2 Menu 2")
        markup_menu3.add(btn1_menu3, btn2_menu3, btn3_menu3)

        bot.send_message(message.chat.id, text="Menu 2", reply_markup=markup_menu3)
    
    elif message.text == 'Back':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Menu 1")
        btn2 = types.KeyboardButton("Menu 2")
        markup.add(btn1, btn2)

        bot.send_message(message.chat.id, text="Hello world", reply_markup=markup)