Skip to content

Latest commit

 

History

History
227 lines (162 loc) · 18.2 KB

DEVELOPER.md

File metadata and controls

227 lines (162 loc) · 18.2 KB

Telegram Bot API

Боты — специальные аккаунты в Telegram, созданные для того, чтобы автоматически обрабатывать и отправлять сообщения. Пользователи могут взаимодействовать с ботами при помощи сообщений, отправляемых через обычные или групповые чаты. Логика бота контролируется при помощи HTTPS запросов к API для ботов

НЕОФИЦИАЛЬНЫЙ вольный перевод о том, что из себя представляют боты https://tlgrm.ru/docs/bots

Полезные ссылки:

http://mastergroosha.github.io/telegram-tutorial/

  • Текстовые уроки "Асинхронный Telegram бот на языке Python 3" с использованием библиотеки aiogram:

https://surik00.gitbooks.io/aiogram-lessons/content/

https://www.youtube.com/playlist?list=PLwVBSkoL97Q3phZRyInbM4lShvS1cBl-U

Список популярных библиотек:

  • Python

    • pyTelegramBotAPI - отлично подходит для начинающих, желающих понять основы работы с Bot API. Имеет подробную документацию (на английском языке) и обширное комьюнити.
    • aiogram - продвинутая библиотека для создания высокопроизводительных ботов. Библиотека постоянно обновляется и имеет крутые фишки, например FSM, установку стандартного типа разметки и прочие мелочи, полезные при разработке. Комьюнити библиотеки на данный момент небольшое.
    • python-telegram-bot
    • twx.botapi
    • Telepot
    • Telegram Bot Service
    • telebot
    • Keyboa - дополнение к библиотеке pyTelegramBotAPI, позволяющее быстро создавать inline-клавиатуры любой сложности, объединять несколько клавиатур в одну или генерировать их динамически. Имеет подробное описание с примерами.
  • JavaScript

  • Java

    • TelegramBots
    • Java Telegram Bot API - библиотека, которая регулярно обновляется и имеет приятные дополнения, например поддержку шифрования для Telegram Passport. Автор призывает подключаться к разработке, отвечает на все вопросы и пулл-реквесты.
  • Kotlin

    • TelegramBotAPI - не самая простая библиотека, использует объектно-ориентированный подход
  • PHP

  • C#

  • Ruby

  • Go

  • Lua

  • Haskell

  • Rust

  • Nim


ЧаВо

Q: Могу ли я посмотреть список всех пользователей канала?

A: Нет, если пользователей более 200

_

Q: Где захостить бота?

A: Бесплатно можно на Heroku, есть инструкция. Более удобный способ - купить VPS (Virtual Private Server). Это виртуальная машина, на которой можно запустить бота ровно так же, как и на своём компьтере.

Список некоторых хостинг-провайдеров:

Таблица сравнения минимальных тарифов

В 202X году каждый адекватный провайдер имеет бесплатный внешний ipv4 адрес и SSD диски вместо HDD. Бесплатные купоны и кредиты позволяют сильно сэкономить на сервере. Например, купоны из Github Student Pack позволяют получить $50 на DigitalOcean, а это почти год бесплатного сервера. Гугл в помощь!

OVH (Starter) DigitalOcean (Standard) Aruba (Small) Vultr Hetzner (CX11)
Цена, в Месяц $3.50 (~$6) $5 + НДС (~$3) €2.79 (~$6) $5 + НДС (~$3.25) €2.99
Бесплатные купоны/кредиты ? Есть ? Есть ?
Процессор, ядра 1 1 1 1 1
ОЗУ, Гб 2 1 1 1 2
ПЗУ, Гб 20 25 20 25 20
Трафик, Гб Безлимитно 1000 2000 1000 20 000
Ширина канала, Mbps 100 1000 1000 1000 1000
При превышении трафика - $10/Тб Автобиллинг (?) Ручной апгрейд тарифа $10/Тб Автобиллинг €1/Тб Автобиллинг ИЛИ Лимит скорости 10 Mbit/s

Чтобы контрибьютить в таблицу, воспользуйтесь Сервисом, не мучайте себя!

Чуть более сложный, но интересный вариант — запустить бота на servlerless стеке. Например, в AWS каждый аккаут получает бесплатно NoSQL БД на 25 GB и 1M API-вызовов в месяц, чего вполне хватит для нескольких несложных ботов.

Q: Как сделать, чтобы бот ждал от пользователя следующее сообщение?

A: Используйте FSM (машины состояний). В некоторых библиотеках эта возможность уже встроена: пример aiogram

_

Q: Как хранить данные от пользователей?

A: Для долгосрочного хранения есть базы данных. Скорее всего, вашему небольшому проекту хватит мощностей SQLite. Если же проект подразумевает подключение к БД с разных ресурсов - взгляните на MySQL и PostgreSQL.


Особенности работы с Bot API

В этом разделе описаны различные хитрости и неочевидные способы работы с Bot API, которые помогут вам упростить разработку или восполнить какое-либо ограничение в API.

Отправка Фото с большой подписью

Ранее этот способ использовался из-за ограничения подписи к фото в 200 символов, на данный момент лимит составляет 1024 символа. Если вам этого всё ещё мало или хотите разместить фото под текстом, то вы можете воспользоваться предпросмотром ссылки. Делается это путем гиперссылки, где в качестве текста ссылки будет скрытый символ (parse_mode=HTML):

"​​<a href="ссылка_на_картинку">&#8203;</a>
Lorem ipsum dolor sit amet..."

Бесплатный хостинг картинок

POST HTTP запрос http://telegra.ph/upload

Поддерживаемые типы медиафайлов: image/gif, image/jpeg, image/jpg, image/png, video/mp4, video/ogg, video/mpeg

Максимальный размер файла: 5 242 880 байт/5 МБайт

Примеры:

  • Python
import requests


with open('/Users/python273/Desktop/123345.jpeg', 'rb') as f:
    print(
        requests.post(
            'https://telegra.ph/upload',
            files={'file': ('file', f, 'image/jpeg')}
        ).json()
    )

Убираем часики на inline-кнопках

Причина возникновения этих часиков - ожидание Телеграмом ответа от бота после нажатия пользователем на кнопку. Чтобы эти часики не зависали, после обработки нажатия нужно вызвать метод answerCallbackQuery


Лимиты Telegram Bot API

  • Сообщения:
    • При отправке сообщений внутри определенного чата избегайте отправки более одного сообщения в секунду. Telegram может разрешить короткие всплески, которые превышают этот предел, но в итоге вы начнете получать 429 ошибку.

    • Если вы отправляете массовые уведомления нескольким пользователям, API не будет разрешать более 30 сообщений в секунду или около того. Рассмотрите возможность распространения уведомлений на большие интервалы в 8-12 часов для достижения наилучших результатов.

    • Ваш бот сможет редактировать посты других администраторов на каналах старше 48 часов только используя метод editMessageReplyMarkup, а также сможет их удалить, но другие методы изменения сообщений будут недоступны

    • Также обратите внимание, что ваш бот не сможет отправлять более 20 сообщений в минуту в одну группу.

  • Файлы:
    • Максимальный размер файла для скачивания 20 MB.

    • Максимальный размер файла для отправки 50 MB.

  • Инлайн-клавиатура (InlineKeyboardMarkup):
    • Максимальное число кнопок в строке - 8.

    • Максимальное число кнопок всего - 100.

  • Кнопка инлайн-клавиатуры (InlineKeyboardButton):
    • Максимальная длина колбека (callback_data) - 64 байта.

Telegram client API (он же MTProto, он же tgcli)

Клиентское API телеграма - это API позволяющее вам выполнять автоматизированные действия от лица клиента. Иными словами, всё, что может делать пользователь в телеграме, можно запрограммировать на tgcli (получить всю историю сообщений в группе, получить список всех пользователей группы, сделать поиск в группе по словам, взаимодействовать с ботами и т.д и т.п). Так как Telegram client api предполагает написание скриптов на tl (поверьте, вы не хотите на нём писать), то получили распространение обёртки над tgcli для разных языков.

Список популярных клиентских библиотек: