Telegram — один из самых безопасных мессенджеров, известных широкой публике. Так, по заявлению представителей сервиса, отправленные кем-либо сообщения после удаления удаляются и с серверов компании. С одной стороны, это защищенность. С другой, в случае недоразумений практически невозможно доказать, что сообщение было. Можно, конечно, делать скриншоты или запись экрана, но давайте будем откровенны — всегда можно сказать «это не пруф, ибо фотошоп».
Впрочем, способ сохранить важные сообщения есть — переслать их в избранное. В этом случае остается и тело сообщения, и прямая ссылка на профиль отправителя. Но пересылать все вручную неудобно. Да и как заранее узнать, что понадобится в будущем, а что нет? Впрочем, так заморачиваться ни к чему — ведь можно автоматизировать процесс с помощью бота. О том, как создать бот для сохранения удаленных сообщений Telegram, мы и расскажем ниже.
Какие задачи решает бот
Фактически главная задача данного бота — сохранение сообщений в избранное. Однако есть несколько нюансов, описание которых позволит вам лучше понять его функционал:
Бот сохраняет все личные сообщения.
Бот сохраняет все сообщения из чатов.
Бот сохраняет (опционально) все посты из каналов.
Бот НЕ СОХРАНЯЕТ сообщения, защищенные от пересылки, — это лишено смысла, так как не будет прямой ссылки на профиль отправителя.
Потенциально код бота можно адаптировать под более прикладные задачи — вроде парсинга постов из пабликов или последующего автопостинга не в избранном, а в своих каналах. Однако так как именно пересылка в избранное является наиболее сложной задачей, в функционале бота реализована именно она.
Принцип работы бота
Сразу стоит отметить, что формально данный бот является не ботом для Telegram, а скорее скриптом, автоматизирующим управление пользовательским профилем. Однако эта формальность обусловлена исключительно заморочками самой Телеги. Все дело в том, что «бот» в терминологии Telegram — это ПО, зарегистрированное через официального Telegram-бота BotFather и имеющее в названии профиля суффикс _bot.
Данный скрипт же является скорее user-ботом, или страничным ботом. Однако сути дела это не меняет. Более того, User API по своему функционалу более мощный инструмент, нежели Bot API. Единственное, в чем мощнее Bot API, — это наличие возможности создавать кнопки. В данном боте мы не будем использовать кнопки — так как он будет пересылать в избранное абсолютно все сообщения (кроме тех, что защищены от пересылки). Но при желании вы можете сделать связку из user-бота и классического бота для реализации возможности управления через кнопки.
Тем не менее сам бот довольно прост с точки зрения функционала и работает следующим образом:
- После привязки к профилю бот прослушивает события Telegram-аккаунта.
- В случае получения нового сообщения бот «подхватывает» его реквизиты и подставляет в пересылку.
- Сообщение пересылается в избранное.
На этом алгоритмическая часть заканчивается. Проще говоря, бот максимально прост с точки зрения логики его работы.
Пошаговая инструкция, как создать бота для сохранения удаленных Telegram-сообщений
Авторизация — так как в данном боте используется User API, то процесс привязки аккаунта немного отличается от того, что мы делали ранее в других ботах:
- Проходим авторизацию в веб-версии.
- Нажимает «API development tools» и заполняем форму.
- Копируем значения api_id и api_hash в блокнот.
Настройка сервера — так как бесплатные сервисы вроде pythonanywhere или heroku не поддерживают возможность взаимодействия с Telegram User API, то ради сохранения концепции нашей рубрики мы будем использовать другое бесплатное решение — Termux. Проще говоря, мы поднимем сервер прямо в телефоне. Впрочем, вы можете использовать любой сервер, способный интерпретировать код на Python. Это относительно простое и бесплатное решение, воспользоваться которым сможет любой владелец Android-смартфона. Но для начала его нужно будет настроить, для этого после запуска Termux вводим следующие команды:
pkg install root-repo
pkg install x11-repo
pkg update
pkg upgrade
pkg install python
pkg install git
После каждой дожидаемся окончания загрузки и установки. Если терминал спрашивает, что делать дальше, — нажимает Y (во всех ситуациях). Затем вводим:
pip install asyncio
pip install telethon
Наш Termux-сервер полностью настроен и готов к работе.
Развертывание и запуск бота
Для начала нам нужно создать исполняемый код. Это можно сделать через файловые менеджеры вроде Total Commander или его аналоги — достаточно просто поместить скрипт в папку с Termux. Но будем исходить из того, что у нас нет опыта работы с Android/Linux на уровне администратора, поэтому создадим наш скрипт прямо в самой консоли. Для этого:
- Вводим команду nano
- Копируем следующий код:
import asyncio
from telethon.sync import TelegramClient, events
api_id = 'ВАШ API ID' # Замените на ваш API ID
api_hash = 'ВАШ API Hash' # Замените на ваш API Hash
phone = 'ВАШ НОМЕР ТЕЛЕФОНА' # Замените на ваш номер телефона
async def main():
async with TelegramClient(phone, api_id, api_hash) as client:
# Получаем идентификатор своего аккаунта
me = await client.get_me()
@client.on(events.NewMessage)
async def handler(event):
sender = await event.get_sender()
# Проверяем, не отправитель ли это мы сами
if sender.id != me.id:
# Проверяем тип чата (убрать условие, если нужны посты из каналов)
if event.is_private or event.is_group:
await event.message.forward_to('me')
print(f"Переслано новое сообщение от {sender.first_name}: {event.message.message}")
print("Запущен обработчик новых сообщений")
# Ожидание отключения (вместо бесконечного цикла)
await client.run_until_disconnected()
# Запускаем функцию main() с помощью asyncio.run()
asyncio.run(main())
- Жмем CTRL (на экране в интерфейсе самого Termux) и X (на экранной клавиатуре)
- Жмем Y
- Вводим ИМЯ_СКРИПТА.py, например go.py
- Жмем Enter (на экранной клавиатуре)
Наш скрипт развернут. Осталось его запустить. Для этого вводим:
- python ИМЯ_СКРИПТА.py
(Например, python go.py).
- Жмем Enter (на экранной клавиатуре).
- Если все работает правильно, на экране появится надпись «Please enter your phone (or bot token)».
- Вводим его в международном формате (+7…) и жмем Enter.
- Появится надпись «Please enter the code you received», а в Telegram придет сообщение с кодом.
- Вводим код и жмем Enter.
- Появится надпись «Signed in successfully as ИМЯ ВАШЕГО ПРОФИЛЯ; remember to not break the ToS or you will risk an account ban!»
- После этого появится надпись «Запущен обработчик новых сообщений».
- Затем все сохраняемые сообщения будут отображаться в консоли и появляться в избранном.
Если не завершать авторизацию бота принудительно, то последующие запуски будут начинаться с фразы «Запущен обработчик новых сообщений».
По аналогичному принципу бот запускается и на любом другом сервере.
Для остановки бота используйте CTRL + C или просто завершите Termux принудительно. Обратите внимание, что закрытие путем свайпа по экрану не приведет к остановке бота!
Демонстрация работы
Подводя итоги
Как видите, создание и даже развертка на телефоне вместо сервера собственного user-бота для Telegram не столь сложный процесс, каким может казаться. Да, есть свои особенности, требующие адаптации и ухода от привычной схемы работы с ботами. Да, это доставляет некоторые неудобства.
Но эти неудобства с лихвой окупаются функциональностью User API. А уж если совместить в одном боте и User API, И Bot API, то можно получить на выходе удобное и вместе с тем мощное решение практически для всего, что только можно сделать в Telegram.