Traffic Cardinal Traffic Cardinal написал 08.01.2024

Бот для сохранения удаленных сообщений Telegram

Traffic Cardinal Traffic Cardinal написал 08.01.2024
8 мин
1
867
Содержание

Telegram — один из самых безопасных мессенджеров, известных широкой публике. Так, по заявлению представителей сервиса, отправленные кем-либо сообщения после удаления удаляются и с серверов компании. С одной стороны, это защищенность. С другой, в случае недоразумений практически невозможно доказать, что сообщение было. Можно, конечно, делать скриншоты или запись экрана, но давайте будем откровенны — всегда можно сказать «это не пруф, ибо фотошоп».

banner banner

Впрочем, способ сохранить важные сообщения есть — переслать их в избранное. В этом случае остается и тело сообщения, и прямая ссылка на профиль отправителя. Но пересылать все вручную неудобно. Да и как заранее узнать, что понадобится в будущем, а что нет? Впрочем, так заморачиваться ни к чему — ведь можно автоматизировать процесс с помощью бота. О том, как создать бот для сохранения удаленных сообщений Telegram, мы и расскажем ниже.

Какие задачи решает бот

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

  • Бот сохраняет все личные сообщения.

  • Бот сохраняет все сообщения из чатов.

  • Бот сохраняет (опционально) все посты из каналов.

  • Бот НЕ СОХРАНЯЕТ сообщения, защищенные от пересылки, — это лишено смысла, так как не будет прямой ссылки на профиль отправителя.

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

Принцип работы бота

Сразу стоит отметить, что формально данный бот является не ботом для Telegram, а скорее скриптом, автоматизирующим управление пользовательским профилем. Однако эта формальность обусловлена исключительно заморочками самой Телеги. Все дело в том, что «бот» в терминологии Telegram — это ПО, зарегистрированное через официального Telegram-бота BotFather и имеющее в названии профиля суффикс _bot.

Данный скрипт же является скорее user-ботом, или страничным ботом. Однако сути дела это не меняет. Более того, User API по своему функционалу более мощный инструмент, нежели Bot API. Единственное, в чем мощнее Bot API, — это наличие возможности создавать кнопки. В данном боте мы не будем использовать кнопки — так как он будет пересылать в избранное абсолютно все сообщения (кроме тех, что защищены от пересылки). Но при желании вы можете сделать связку из user-бота и классического бота для реализации возможности управления через кнопки.

Тем не менее сам бот довольно прост с точки зрения функционала и работает следующим образом:

  1. После привязки к профилю бот прослушивает события Telegram-аккаунта.
  2. В случае получения нового сообщения бот «подхватывает» его реквизиты и подставляет в пересылку.
  3. Сообщение пересылается в избранное.

На этом алгоритмическая часть заканчивается. Проще говоря, бот максимально прост с точки зрения логики его работы.

Пошаговая инструкция, как создать бота для сохранения удаленных Telegram-сообщений

Авторизация — так как в данном боте используется User API, то процесс привязки аккаунта немного отличается от того, что мы делали ранее в других ботах:

  1. Проходим авторизацию в веб-версии.
  2. Нажимает «API development tools» и заполняем форму.
  3. Копируем значения 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 на уровне администратора, поэтому создадим наш скрипт прямо в самой консоли. Для этого:

  1. Вводим команду nano
  2. Копируем следующий код:

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())

  1. Жмем CTRL (на экране в интерфейсе самого Termux) и X (на экранной клавиатуре)
  2. Жмем Y
  3. Вводим ИМЯ_СКРИПТА.py, например go.py
  4. Жмем Enter (на экранной клавиатуре)

Наш скрипт развернут. Осталось его запустить. Для этого вводим:

  1. python ИМЯ_СКРИПТА.py

(Например, python go.py).

  1. Жмем Enter (на экранной клавиатуре).
  2. Если все работает правильно, на экране появится надпись «Please enter your phone (or bot token)».
  3. Вводим его в международном формате (+7…) и жмем Enter.
  4. Появится надпись «Please enter the code you received», а в Telegram придет сообщение с кодом.
  5. Вводим код и жмем Enter.
  6. Появится надпись «Signed in successfully as ИМЯ ВАШЕГО ПРОФИЛЯ; remember to not break the ToS or you will risk an account ban!»
  7. После этого появится надпись «Запущен обработчик новых сообщений».
  8. Затем все сохраняемые сообщения будут отображаться в консоли и появляться в избранном.

Авторизация в боте на стороне сервера
Авторизация в боте на стороне сервера

Если не завершать авторизацию бота принудительно, то последующие запуски будут начинаться с фразы «Запущен обработчик новых сообщений».

По аналогичному принципу бот запускается и на любом другом сервере.

Для остановки бота используйте CTRL + C или просто завершите Termux принудительно. Обратите внимание, что закрытие путем свайпа по экрану не приведет к остановке бота!

Демонстрация работы

Новые сообщения в одном из арбитражных чатов
Новые сообщения в одном из арбитражных чатов

Они же (и немного еще :D) в избранном
Они же (и немного еще :D) в избранном

Подводя итоги

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

Но эти неудобства с лихвой окупаются функциональностью User API. А уж если совместить в одном боте и User API, И Bot API, то можно получить на выходе удобное и вместе с тем мощное решение практически для всего, что только можно сделать в Telegram.

Здравствуйте! У вас включен блокировщик рекламы, часть сайта не будет работать!