Как создать бота для чтения удаленных сообщений Telegram

30 августа 2026 · 5 мин чтения
Как создать бота для чтения удаленных сообщений Telegram

Владельцам Telegram Premium доступна полезная опция — подключение бизнес-ботов к личному аккаунту. Это позволяет автоматизировать общение с клиентами: бот мгновенно реагирует на входящие сообщения, оперативно фиксирует любые правки и удаления в диалогах. Именно этого функционала достаточно, чтобы решить задачу, ради которой мы здесь собрались.

Почему обычные сессии без Business-режима не подходят

Если попытаться реализовать подобное через стандартные сессии, мы сразу упираемся в жёсткие рамки официального Telegram API. Главные препятствия:

  • Floodwait — система принудительных пауз между запросами, которая серьёзно замедляет работу.
  • Риск блокировки — при высокой частоте обращений к API учётная запись может быть заморожена за подозрительную активность.

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

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

Создаём бота в @BotFather + включаем Busness Mode:

Переходим в https://t.me/BotFather и отправляем команду /newbot, затем пишем название вашего бота и юзернейм

После этого пишем /mybots и выбираем только что созданного бота, переходим в "Bot Settings". Далее находим "Business Mode" и включаем его

Мы включили бизнес-мод в нашем боте. Не забываем прописать /start, чтобы он мог нам писать

Установка Pyton и необходимых модулей: 

Заходим на сайт https://www.python.org/downloads/ и скачиваем python, выбирайте любой из свежих версий. Прямая ссылка на установку для windows: https://www.python.org/ftp/python/3.14.2/python-3.14.2-amd64.exe. Поставьте галочку "add to path", когда откроется установочное окно. 

Где находится галочка
Где находится галочка

После установки открываем командную строку (win + r, затем в поле ввода пишем "cmd") и вставляем команду:

pip install pyTelegramBotAPI

Исходник + запуск

Теперь создаем папку где вам удобно, а в нем файл с расширением .py и вставляем этот код:

import asyncio
from datetime import datetime
from telebot.async_telebot import AsyncTeleBot
from telebot.types import BusinessMessagesDeleted
from html import escape

TOKEN = "Токен"
OWNER_ID = 00000000  # твой Telegram ID

bot = AsyncTeleBot(TOKEN, parse_mode="HTML")

MESSAGES = {}

def base_record(msg):
    return {
        "user": msg.from_user.first_name if msg.from_user else "Пользователь",
        "type": msg.content_type,
        "timestamp": datetime.now().isoformat(timespec="seconds"),
    }


@bot.business_message_handler(content_types=[
    "text", "photo", "voice", "video",
    "video_note", "animation", "sticker"
])
async def handle_message(msg):
    key = (msg.chat.id, msg.message_id)
    record = base_record(msg)

    if msg.content_type == "text":
        record["content"] = msg.text

    elif msg.content_type == "photo":
        record["file_id"] = msg.photo[-1].file_id
        record["caption"] = msg.caption

    elif msg.content_type == "video":
        record["file_id"] = msg.video.file_id
        record["caption"] = msg.caption

    elif msg.content_type == "animation":
        record["file_id"] = msg.animation.file_id
        record["caption"] = msg.caption

    elif msg.content_type == "video_note":
        record["file_id"] = msg.video_note.file_id

    elif msg.content_type == "voice":
        record["file_id"] = msg.voice.file_id

    elif msg.content_type == "sticker":
        record["file_id"] = msg.sticker.file_id

    MESSAGES[key] = record

@bot.edited_business_message_handler(content_types=["text"])
async def handle_edit(msg):
    key = (msg.chat.id, msg.message_id)
    old_record = MESSAGES.get(key)

    if old_record and old_record.get("type") == "text":
        user = old_record.get("user")
        old_text = escape(old_record.get("content", ""))
        new_text = escape(msg.text or "")

        await bot.send_message(
            OWNER_ID,
            f" {user} изменил(а) сообщение:\n\n"
            f"Было:\n{old_text}\n\n"
            f"Стало:\n{new_text}"
        )

    MESSAGES[key] = {
        "user": msg.from_user.first_name if msg.from_user else "Пользователь",
        "type": "text",
        "content": msg.text
    }

@bot.deleted_business_messages_handler()
async def handle_delete(event: BusinessMessagesDeleted):
    chat = event.chat

    for msg_id in event.message_ids:
        key = (chat.id, msg_id)
        record = MESSAGES.pop(key, None)

        if not record:
            continue

        user = record.get("user", "Пользователь")
        msg_type = record.get("type")
        file_id = record.get("file_id")

        if msg_type == "text":
            text = escape(record.get("content", ""))
            await bot.send_message(
                OWNER_ID,
                f" {user} удалил(а) сообщение:\n\n"
                f"{text}"
            )

        elif msg_type == "photo":
            caption_text = record.get("caption")
            if caption_text:
                caption = (
                    f" {user} удалил(а) фото:\n\n"
                    f"{escape(caption_text)}"
                )
            else:
                caption = f" {user} удалил(а) фото"

            await bot.send_photo(OWNER_ID, file_id, caption=caption)

        elif msg_type == "video":
            caption_text = record.get("caption")
            if caption_text:
                caption = (
                    f" {user} удалил(а) видео:\n\n"
                    f"{escape(caption_text)}"
                )
            else:
                caption = f" {user} удалил(а) видео"

            await bot.send_video(OWNER_ID, file_id, caption=caption)

        elif msg_type == "animation":
            caption_text = record.get("caption")
            if caption_text:
                caption = (
                    f" {user} удалил(а) GIF:\n\n"
                    f"{escape(caption_text)}"
                )
            else:
                caption = f" {user} удалил(а) GIF"

            await bot.send_animation(OWNER_ID, file_id, caption=caption)

        elif msg_type == "video_note":
            await bot.send_video_note(OWNER_ID, file_id)
            await bot.send_message(
                OWNER_ID,
                f" {user} удалил(а) видеосообщение"
            )

        elif msg_type == "voice":
            await bot.send_voice(OWNER_ID, file_id)
            await bot.send_message(
                OWNER_ID,
                f" {user} удалил(а) голосовое сообщение"
            )

        elif msg_type == "sticker":
            await bot.send_sticker(OWNER_ID, file_id)
            await bot.send_message(
                OWNER_ID,
                f" {user} удалил(а) стикер"
            )
            
async def main():
    print("Бот запущен")
    await bot.infinity_polling(
        allowed_updates=[
            "business_message",
            "edited_business_message",
            "deleted_business_messages"
        ],
        skip_pending=True
    )


if __name__ == "__main__":
    asyncio.run(main())

В коде на 7 и 8 строке обязательно заполняем поля. В 7 строку вставляем токен нашего бота, в 8 строку вставляем ваш user id телеграм ( Cвой айди можете узнать в нашем телеграм боте - @RandomatusBot используя команду /id @username ).После этого в поле с директорией папки пишем cmd (чтобы в ручную не идти в директорию через cd)  

В консоли пишем "python main.py" (вместо main.py у вас может быть другое название файла, смотря как назвали). Если увидели "Бот запущен" - вы успешно запустили бота.  

Подключение бота к вашему аккаунту Телеграм

Переходим в настройки телеграм, затем открываем "Telegram для бизнеса" и ищем "Чат-боты"

Вставляем юзернейм нашего бота

На этом все, бот работает!

Итог. Что у нас получилось?

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

Поделиться:

Комментарии (0)