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

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

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

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.

FAQ

Какие права нужны для бота в Telegram?
Для отслеживания удаленных сообщений бот должен быть администратором группы с правом "просматривать сообщения" и отключенной приватностью в BotFather. Без этих настроек бот не получит события удаления. Также важно, чтобы бот имел доступ к чату, где отслеживаются сообщения. В приватных чатах права аналогичны, но администратор не требуется. Важно соблюдать конфиденциальность и законодательство при сборе данных.
Можно ли сохранять сообщения из групп с помощью бота?
Да, бот может сохранять сообщения из групп, но требует прав администратора с доступом к сообщениям и отключенной приватностью. Важно учитывать GDPR и другие законы о защите данных. Перед сохранением сообщений необходимо получить согласие участников группы. Некоторые группы могут запрещать такое сохранение, поэтому соблюдение правил сообщества критически важно.
Безопасно ли хранить сохраненные сообщения на сервере?
Безопасность зависит от метода хранения. Рекомендуется шифрование данных на сервере, регулярные обновления безопасности и минимальное хранение информации. Использование проверенных хостинг-провайдеров с SSL-шифрованием и двухфакторной аутентификацией повышает защиту. Несоблюдение этих мер может привести к утечкам данных и юридическим последствиям.
Какие бесплатные боты существуют для сохранения удаленных сообщений?
Существуют бесплатные боты, такие как MessageSaveBot или DeletedMsgBot, но их надежность и безопасность часто сомнительны. Многие из них собирают данные пользователей или содержат вредоносный код. Лучше создать собственного бота через Telegram API, используя проверенные библиотеки, чтобы гарантировать конфиденциальность и контроль над данными.
Как настроить уведомления о удаленных сообщениях?
Для настройки уведомлений в коде бота необходимо обрабатывать событие удаления сообщения и отправлять уведомление в указанный чат или канал. Можно использовать фильтры для определенных пользователей или типов контента. Настройки выполняются через BotFather и скрипт бота, где задается получатель и формат уведомлений.

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