Пишем telegram-бота на python с помощью библиотеки telebot часть 1

F.A.Q.

Bot 2.0

April 9,2016 Telegram release new bot 2.0 API, which has a drastic revision especially for the change of method’s interface.If you want to update to the latest version, please make sure you’ve switched bot’s code to bot 2.0 method interface.

How can I distinguish a User and a GroupChat in message.chat?

Telegram Bot API support new type Chat for message.chat.

  • Check the attribute in object:
if message.chat.type == "private"
	# private chat message

if message.chat.type == "group"
	# group chat message

if message.chat.type == "supergroup"
	# supergroup chat message

if message.chat.type == "channel"
	# channel message

Что такое идентификационный номер

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

Для чего нужен ID группы или пользователя в Telegram? Он требуется в различных ситуациях:

  • при создании канала или группы;
  • настройка рекламной рассылки;
  • использование ботов и других автоматических программ.

Обычно идентификационный номер не слишком интересует пользователей. Но иногда возникают ситуации, когда его нужно посмотреть. Рассмотрим способы, как это сделать.

Style Guide

We think a good translation should be:

1. Consistent

The same things need to have the same names everywhere. Not just within one app, but also on all platforms. Telegram features should have the same names on Android, iOS, Windows and Mac – unless they have to do with platform defaults. For system features, we should always use platform defaults (unless they are truly ugly or don’t fit).

2. Natural

You don’t have to always stick to the English original. Sometimes it makes more sense to simply describe what the app does in your own language.

But please don’t get carried away:

3. Default

It‘s no longer 2001 and our users have seen many other apps. It will be much easier for them to use Telegram if familiar concepts have familiar names here. Whenever you’re looking for a word, focus on those that people are used to seeing in relevant context. What does Apple use in this case? What does Google use? What do Telegram’s main competitors in your region use?

4. Beautiful

Use good language that would make the app look as if it was built in your region. Respect your language’s grammar and style where possible. Avoid abbreviations. Try to find ways around gender problems instead of going for things like o(a), unless the workaround looks even more awkward. In most cases it’s possible to find a way of saying anything without hurting the language.

5. And it MUST FIT

This last one is never easy. Sometimes you need to look to the surrounding phrases and change them for the problematic phrase to fit and work.

Typography

What we’re looking for is not just linguistic, but also typographic and aesthetic correctness. The text is inseparable from design. Text is design and we need to make sure it works. So approach the text as a magazine editor would:

  1. Everything must fit into its allotted space. So always check in-app after editing. Words and phrases that are too long will be automatically cut (Like thi…) or contracted (Li..is) — we can’t allow this to happen. In other cases the text may flow over into the next line.
  2. The text should ideally be kept from spreading over two lines where the original only had one line.
  3. Same with double lines, try to avoid letting them spread into triple lines. Although this is a less strict requirement — it isn’t too bad if you let the double-line descriptions in Settings become triple lined.
  4. We need to avoid hanging words when there’s just one or two words left on a new line.
  5. We need to avoid gaps in the text, for example when the top right space is empty before the line break. A good way of avoiding this is to use shorter words, so that they wrap more easily. When short words are not an option, put your long ones at the beginning of the line, then add short words as padding.
  6. There will be times when making things fit will seem impossible. Our experience shows that it never is. Several determined people focusing on a word and the phrases around it will always find a solution after a few weeks, or even earlier. After all, it’s just words.

This takes some of effort, but it really makes you feel proud when you’re done.

Applied Typography

On the whole, we’ve worked hard to make the English version as typographically sound as possible. So as a rule of thumb, if your phrase is of the same length as the English one, it will fit well. If it is shorter — not too much of a problem, but beware of hanging words and gaps.

Note for iPhone Plus users: When checking strings in-app, try iOS Settings > Display & Brightness > View > ‘Zoomed’. Using this mode you can make sure that strings will fit the screens of the narrower models.

Вступление

Что мы хотим сделать

Начнем с того, что определимся, что мы хотим сделать, это телеграмм бот который будет уметь показывать:

  • Статистику случаев заражения COVID-19 по геолокации
  • Статистику запросов стран пользователями
  • Статистику действий пользователей
  • Информацию о контактах
  • Справку, о том, как пользоваться ботом

Что мы будем с этого иметь

Чему мы научимся во время приготовления вакцина-бота:

  • Работой с базой данных mongodb(подключение, получение данных, сохранение)
  • Упаковка приложения в Docker контейнер

Регистрация бота в мессенджере Telegram

Затем необходимо зарегистрировать нашего бота в Telegram и получить токен для работы с ним из нашего кода. Процедура тривиальная, но все же для тех кто не знаком с платформой опишу пошагово:

  • Выполнить команду /start
  • Выполнить команду /newbot
  • Выбрать ник бота и адрес по которому он будет доступен в Telegram
  • Сохраняем token который бот вернул нам в ответе в блокнот

Подготовка машины для программирования бота

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

Структура приложения

Структура приложения может быть выбрана вами в зависимости от ваших потребностей, целей и опыта. Но перед этим предлагаю вам создать репозиторий на github с названием вашего бота и склонировать его к себе на машину, это необходимо для использования системы контроля версий и настройки CI в перспективе.

Наш вакцина-бот внутри будет иметь вот такую структуру

Создание робота в телеграм

Можно организовывать командные тексты в соответствующей системе с использованием установщиком. Для поиска работы нужно ввести go telegram bot api. Для создания имеется сервисная система @Botfather. Если зайти туда, то можно увидеть много командного набора, благодаря которых можно создать новый робот. Для того чтобы построить нового робота в приложении, первоначально набирается команда с названием – newbot. Далее ввести имя для клиента, которое в обязательном порядке должно оканчиваться на «бот».

После чего присылается индетифкаторный токен, в результате чего создается новейший установщик. Авторизировать его можно только через токен. Далее запускается программный режим в портале. Клиент находит своего установщика и нажимает на кнопку в виде старта, что далее запускает определенную командную строку. Далее будут зарезервированы соответствующие командные строки под наименованием settings и /help. Для обхода блокировки api, его, необходимо подключить к SOCKS5 прокси, подставить рабочий прокси в адрес и, если нужны, то данные, а также свой запросный вопрос.

Как настроить цепочку автоответов в редакторе чат-бота

В визуальном редакторе цепочки автоответов строятся с помощью специальных блоков: «Сообщение», «Цепочка», «Действие» и «Пауза». Они расположены на панели слева.

Блоки, из которых строится цепочка автоответов

Дальше рассмотрим сам процесс построения цепочки.

Создаем цепочку

Выбираем триггер и нажимаем «Создать цепочку». Либо же к триггеру можно привязать цепочку, созданную ранее, если у вас уже имеются таковые.

Создание цепочки для выбранного триггера

Настраиваем стартовый блок

Справа в окне редактора цепочки вводим сообщение, которое отправляется пользователю в ответ на выбранный триггер. В нашем примере сообщение отправится после того, как пользователь напишет слово «Привет».

Стартовый блок в визуальном редакторе чат-бота

Вы можете отправить следующее сообщение только после того, как пользователь отреагировал на ваше предыдущее сообщение. Например, нажал на кнопку, которую нужно добавить в это сообщение. Рассмотрим, как добавить кнопку в редакторе.

Добавляем кнопку

Нажмите «Добавить кнопку» и введите текст кнопки. В нашем случае будет три кнопки: «Узнать о школе», «Мастер-классы», «Контакты менеджера».

Добавляем кнопки для дальнейшего развития цепочки

В одно сообщение вы можете добавить до двенадцати кнопок. Текст кнопки вмещает 20 символов без пробелов. В кнопки можно добавлять ссылки.

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

Создаем следующее сообщение

Перетащите блок «Сообщение» с левой панели в рабочую зону и соедините его с нужной кнопкой.

Для развития цепочки перетаскиваем блок «Сообщение» в рабочую зону

Заполните сообщения текстом и, если нужно, добавьте другие элементы.

Какие элементы можно добавить в сообщение чат-бота в SendPulse:

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

Элементы, которые можно добавить в сообщение

Чтобы добавить небольшую паузу между репликами в сообщении, воспользуйтесь элементом «Задержка». Укажите в редакторе, какая пауза будет между репликами — это до 5 секунд. Задержка в чате выглядит так:

Задержка между репликами в сообщении

Ввод данных пользователя

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

Ввод данных пользователя через быстрые ответы

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

Блок «Пауза»

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

Блок «Действие»

Для блока действие есть такие опции:

  • «Открыть чат» — повышает приоритет чата: оповещает администратора о сообщении и открывает чат в панели SendPulse.
  • «Отписать от бота» — если в какой-то ветке сценария бота нужно удалить клиента из списка подписчиков и больше не отправлять ему сообщения.
  • «Добавить тег» — после нажатия на кнопку подписчику будет присвоен выбранный вами тег, с помощью которого вы сможете отправлять рассылки с сегментацией. О том, как использовать теги подробно читайте в базе знаний.
  • «Установить переменную» — система установит или обновит значение для выбранной вами переменной.
  • «Отправить вебхук» — можно отправить POST запрос с данными подписчика на ваш URL. Это нужно, чтобы, к примеру, отправить данные о подписчике и о том, что он прошел по какой-то ветке бота, в свою CRM. Подробнее о вебхуках читайте в нашей базе знаний.

Опции блока «Действие»

Блок «Цепочка»

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

Блок «Цепочка»

Элементы управления

В системе все элементы для управления установщиками называют объектами, представленными в виде строки, которая задается по своим установленным условиям. Это может позволить обмениваться данными по всему сервису легко и без особых затрат, так как при передаче данных изображается не сам код режима, а целый набор ключевых значений, которые выходят в текстовом значении. Огромное количество элементов управления предназначено для того, чтобы выстроить команду установщика. Ключевые слова расширяют о больших возможностях объекта. Обмениваться текстами между другими клиентами можно в виде соответствующих запросов.

Приведем несколько примеров ниже:

  1. sendMessage – для получения сообщения.
  2. sendVideo – для отправления видео.
  3. sendAudio – для отправления аудиозаписи.

Все элементы управления делятся на категорию групп для:

  • Получения обновления и информационных запусков.
  • Общения в чате.
  • Отправки разнообразных элементов.
  • Функции с наклейками.
  • Обновления текстовых сообщений.
  • Платежного функционала.
  • Игр и развлекательных порталов.

Что такое ID

ID – это уникальный идентификатор. Код присваивается каждому зарегистрирован-ному абоненту при создании профиля, используется при дальнейших авторизациях. Все сообщества, каналы, беседы имеют свой идентификатор.

ID канала в Телеграме.

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

Благодаря ID мессенджер «узнает» пользователя и показывает только его переписки.

Важно! В отличие от имени пользователя, которое можно сменить в любой момент, ID выбрать другой невозможно. Если вам известен «айди» человека, то даже когда изменится ник или имя, профиль будет легко найти

Advanced use of the API

Asynchronous delivery of messages

There exists an implementation of TeleBot which executes all and the functions asynchronously. This can speed up you bot significantly, but it has unwanted side effects if used without caution.
To enable this behaviour, create an instance of AsyncTeleBot instead of TeleBot.

tb = telebot.AsyncTeleBot("TOKEN")

Now, every function that calls the Telegram API is executed in a separate Thread. The functions are modified to return an AsyncTask instance (defined in util.py). Using AsyncTeleBot allows you to do the following:

import telebot

tb = telebot.AsyncTeleBot("TOKEN")
task = tb.get_me() # Execute an API call
# Do some other operations...
a = 
for a in range(100):
	a += 10

result = task.wait() # Get the result of the execution

Note: if you execute send_xyz functions after eachother without calling wait(), the order in which messages are delivered might be wrong.

Sending large text messages

Sometimes you must send messages that exceed 5000 characters. The Telegram API can not handle that many characters in one request, so we need to split the message in multiples. Here is how to do that using the API:

from telebot import util
large_text = open("large_text.txt", "rb").read()

# Split the text each 3000 characters.
# split_string returns a list with the splitted text.
splitted_text = util.split_string(large_text, 3000)
for text in splitted_text
	tb.send_message(chat_id, text)

Controlling the amount of Threads used by TeleBot

The TeleBot constructor takes the following optional arguments:

threaded: True/False (default True). A flag to indicate whether
TeleBot should execute message handlers on it’s polling Thread.

The listener mechanism

As an alternative to the message handlers, one can also register a function as a listener to TeleBot.

NOTICE: handlers won’t disappear! Your message will be processed both by handlers and listeners. Also, it’s impossible to predict which will work at first because of threading. If you use threaded=False, custom listeners will work earlier, after them handlers will be called.
Example:

def handle_messages(messages):
	for message in messages
		# Do something with the message
		bot.reply_to(message, 'Hi')

bot.set_update_listener(handle_messages)
bot.polling()

Using web hooks

When using webhooks telegram sends one Update per call, for processing it you should call process_new_messages() when you recieve it.

There are some examples using webhooks in the examples/webhook_examples directory.

Logging

import logging

logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG) # Outputs debug messages to console.

Proxy

You can use proxy for request. object will use by call proxies argument.

from telebot import apihelper

apihelper.proxy = {'http''http://10.10.1.10:3128'}

If you want to use socket5 proxy you need install dependency and make sure, that you have the latest version of , , , and .

apihelper.proxy = {'https''socks5://userproxy:password@proxy_address:port'}

Как узнать код

Для сохранения анонимности разработчики не предусмотрели возможности посмотреть chat ID или номер пользователя в Телеграм. Но есть способы сделать это: для этого понадобятся специальные программы.

Как узнать свой ID в Телеграмме? В этом помогут безопасные боты, которые проверены администрацией приложения. Например, MyTelegramID_bot или User Info Bot. Чтобы воспользоваться помощником, следуйте инструкции:

  1. В строке поиска введите название программы: MyTelegramID_bot или @userinfobot.
  2. Начните с ним диалог, написав «Старт» или «Начать».

  1. Бот пришлет ответное сообщение, где указан идентификационный номер, а также имя и фамилия для подтверждения данных.

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

Чтобы посмотреть ИД канала, он должен быть общедоступным. С этим поможет справится один из вышеперечисленных ботов. После того, как вы начали переписку с программой, просто отправьте ему одну из публикаций из канала, код которого нужно узнать. Через некоторое время вы получите ответ.

Многих интересует, как узнать ID чата в Telegram. Если чат чужой, то сделать это можно аналогичным способом – через бота. Свой канал требует несколько другого решения:

  1. Сделайте чат общедоступным.
  2. Через API Telegram по адресу https://api.telegram.org/bot/getUpdates отправьте запрос на чат с браузера. В нашем случае, запрос выглядит так: getUpdates.
  3. После того, как это сделано, узнать chat ID Telegram можно в строке «chat».

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

Что такое API

Для начала мы поговорим о том, что вообще скрывается под этой аббревиатурой. Чтобы вам было понятнее, сначала мы углубимся в истоки истории программирования. Когда-то давным-давно код писался полностью с нуля. То есть, для того, чтобы программа просто показала пользователю какое-то слово, разработчик должен был вручную написать это на машинном языке, используя только 0 и 1.


Конечно, всегда так продолжаться не могло, поэтому однажды было решено автоматизировать весь этот процесс, создав библиотеки со встроенным набором функций. То есть, для вывода «Привет» разработчик должен был просто написать «cout << “Привет”», а подключенный им файл сам переводил это в последовательность нулей и единиц.

Осознав, что это довольно удобно, разработчики ввели понятие «API» ― встроенного интерфейса, позволяющего посылать операционной системе, компьютеру или еще чему-то команды на понятном для него языке. API автоматизировали создание игр или написание офисных программ, делая, к примеру, наложение текстуры на объект более простым.

Для чего нужен телеграмм API

Теперь, когда вы поняли саму суть этого, перейдем к более конкретному примеру. А именно ― к интерфейсу ботов для телеграмм.


Наш Компьютер выяснил, что он позволяет:

  • Программировать своего бота.
  • Задавать ему различные команды взаимодействия с пользователями.
  • Получать удобный доступ.

Фактически без API программисты ботов должны были бы каждый раз писать свой собственный искусственный интеллект. С его же использованием все становится гораздо проще.

В этом API есть уже готовые функции вывода и ввода текста, ответов на прописанные вопросы и прочего подобного. То есть, фактически разработчику остается только вписать свой текст, если речь идет о совсем примитивном роботе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *