О ботах в Телеграме
June 5, 2024

Про разработку бота: API, библиотеки и апдейты // Часть 2

Выдал Kindergarten Diffusion по запросу "Programming"

Чем Telegram API отличается от Bot API

Ботом управляет программа. Она связывается с серверами Телеграма, чтобы получать информацию (например, о сообщении, которое получил бот) и отдавать команды (например, ответить на сообщение). Давайте разберёмся, как это происходит.

MTProto API — он же Telegram API — это апи, через которое ваше приложение Телеграма на телефоне или компьютере связывается с серверами Телеграма. Он открыт: разработчики могут использовать его, чтобы создавать свои приложения для мессенджера.

Называется оно так потому, что основано на протоколе MTProto, который команда Телеграм и разработала.

Telegram Bot API — это отдельное апи поверх Telegram API, на котором могут работать только боты.

Оно было создано для того, чтобы разработчики могли писать ботов на обычных HTTP-запросах, не разбираясь в протоколе MTProto. Ещё в Bot API есть фичи для упрощения разработки: например, он может работать через вебхуки и автоматически размечать сообщения через HTML или Markdown.

Но вам это не нужно :⁠)

Скорее всего, вы не будете писать сырые HTTP-запросы, а будете использовать готовые библиотеки для разработки ботов. Такие библиотеки есть под многие языки программирования, и обычно в них есть всё, что вам понадобится для удобной работы.

Для разработки ботов вы можете использовать как библиотеки под Telegram API, так и библиотеки под Bot API.

Какой API выбрать?

Под Bot API написано гораздо больше библиотек.

С другой стороны, в Bot API больше ограничений. Например, через него нельзя загружать большие файлы или получать старые сообщения из истории чата.

Различия функционала Bot API и telegram API из хендбука Артёма Иванова (ссыла в конце статьи)

Юзерботы

Раз Telegram API открыт, и под него даже есть всякие библиотеки, — значит, вы легко можете написать программу, управляющую не ботом, а аккаунтом пользователя.

В народе такую программу называют юзерботом.

Кто-то пишет юзерботов, чтобы каждую минуту ставить текущее время себе на аватарку, кто-то — чтобы сохранять сообщения из публичных групп и каналов.

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

Телеграм обычно не банит за использование юзерботов, но будьте осторожны: за спам аккаунт могут ограничить или удалить.

Как выбрать правильную библиотеку для Телеграм-бота

Библиотеки для Bot API

Я использую библиотеку pyTelegramBotAPI, потому что она «Простая, но расширяемая реализация на Python для Telegram Bot API».

Пример кода (асинхронного телебота) на pyTelegramBotAPI ↓

#!/usr/bin/python

# Это простой эхо-бот, использующий механизм декораторов.
# Эхо отражает все входящие текстовые сообщения.

import asyncio
from telebot.async_telebot import AsyncTeleBot

bot = AsyncTeleBot('TOKEN')

# Обработка '/start' и '/help'
@bot.message_handler(commands=['help', 'start'])
async def send_welcome(message):
    text = 'Привет, я ЭхоБот.\nПросто напишите мне что-нибудь, и я повторю это!'
    await bot.reply_to(message, text)


# Обработка всех остальных сообщений с типом содержимого 'text' (content_types defaults to ['text'])
@bot.message_handler(func=lambda message: True)
async def echo_message(message):
    await bot.reply_to(message, message.text)


asyncio.run(bot.polling())

Кроме этого, ботов часто пишут на Джаваскрипте: например, на Telegraf и GrammY.

Для многих других языков тоже есть библиотеки. На официальном сайте есть списочек, который даже вроде поддерживается в актуальном состоянии; но по перечисленным библиотекам рекомендации дать не могу.

Библиотеки для Telegram API

Если вы хотите использовать Telegram API вместо Bot API, вам следует взять библиотеку, которая на этом апи основана.

Для Питона есть две хорошие библиотеки: Telethon и Pyrogram. Для Джаваскрипта — GramJS.

Библиотеки для Telegram API удобны тем, что на них можно писать и ботов, и юзерботов, не переучиваясь.

Апдейты, приходящие Телеграм-ботам

Что такое апдейты

Апдейты (они же updates, то есть обновления) — это события, о которых сервер уведомляет бота. Это может быть апдейт о входящем сообщении, апдейт о вступлении участника в группу и так далее.

Главная сложность разработки ботов

Апдейты — почти единственный способ для вашей программы узнать что-то о чатах и сообщениях.

Например, ваша программа не может спросить у Телеграма, каким было последнее сообщение от пользователя или в каких чатах состоит бот. Телеграм даёт такую информацию только вместе с апдейтами: например, когда пользователь присылает сообщение или бота добавляют в группу.

Если пользователь отправил боту сообщение, и вам нужно будет использовать текст сообщения позже, сохраните его.

Если вам понадобится иметь список пользователей бота, полученных сообщений и так далее — вам следует хранить эти данные. Скорее всего, для этого будет нужна база данных.

Если вы потеряете эту информацию, больше вы никак её не получите.

Некоторую информацию всё-таки можно запросить, используя Telegram API в обход Bot API: например, так можно получить сообщение по ID или полную информацию о пользователе.

Получение апдейтов несколько раз

Ограничения Bot API не позволяют получать одни и те же апдейты несколько раз. Если вы получили апдейт в Bot API, то второй раз вы его уже не получите.

В Telegram API такого ограничения нет. Всё потому, что Telegram API в основном предназначен для приложений: пользователь может пользоваться мессенджером через несколько приложений, каждое из которых должен получать новые сообщения. То же работает и для ботов. Если запустить несколько программ бота на Telegram API, каждая из них будет получать все апдейты. Кроме того, есть трюк, позволяющий получить старые апдейты второй раз.

Как запустить бота на сервере

Хостинг

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

Для этого нужно будет купить хостинг. Программы для ботов обычно не требуют много ресурсов, поэтому вам хватит простого тарифа.

Запросы к серверу или вебхуки

Настройка хостинга зависит от режима работы вашего бота. По умолчанию, чтобы получить апдейты, ваша программа должна регулярно делать запрос к серверу. Но если вы используете Bot API, то программа может работать как вебхук: тогда сервера Телеграма будут делать запрос к программе, чтобы сообщить об апдейтах.

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

Далее

  1. Все возможности Телеграм-ботов, как работают и что умеют определенные функции, читайте в хендбуке Артёма Иванова.
  2. Далее я расскажу как разместить бота на VDS-сервере.

Ссылки по теме

Использовались текста из:

Изображения подписаны