telethon-delete-self-messages
Описание
CLI-утилита на Telethon для удаления своих сообщений в чате/канале. Поддержка @slug, -100…, t.me/c/..., резолв приватных сущностей, пакетное удаление с обработкой FloodWait, настройки в config.yaml
Языки
- Python100%
telethon-delete-self-messages
CLI-утилита для удаления только ваших сообщений в выбранном чате/канале Telegram с помощью Telethon.
Вход — (, , ). Остальные параметры — из (по умолчанию из рабочей директории).
Репозиторий
SSH:
Требования
- Python 3.9+
- Пакеты:
,telethonpyyaml
Конфигурация
Создайте рядом со скриптом (). В репозиторий не коммитится ().
Минимальный пример (без автопересоздания сессии)
Расширенный пример (автопересоздание сессии при невалидной/неавторизованной)
Если сессия не авторизована, утилита может автоматически перелогиниться.
Для этого добавьте блок .
Важно по безопасности: номер телефона/2FA-пароль — чувствительные данные.
Если вы включаете , не храните в публичных репозиториях и следите за бэкапами/логами.
Как получить API ID / API Hash и подготовить сессию
Коротко и по делу.
1) API ID и API Hash
- Откройте https://my.telegram.org → войдите по номеру.
- API Development Tools → Create New Application.
- Сохраните API ID и API Hash — они пойдут в
.config.yaml
2) Рекомендуемый вариант: string-session (StringSession)
Создайте файл и выполните:
Скопируйте значение после в → и установите .
3) Альтернатива: file-session
Если хотите файл-сессию (), выполните:
После первого интерактивного входа у вас появится . В задайте:
Запуск
Аргументы:
— обязательно. Поддерживает:-e, --entity(peer-id канала/супергруппы),-100...или@slug,slug→ преобразуется вhttps://t.me/c/<id>/<msg_id>,-100<id>→ преобразуется вhttps://t.me/<slug>/<msg_id>.slug
— путь к-c, --config(по умолчаниюconfig.yaml)../config.yaml
Как это работает (кратко)
- Нормализация
(ID/slug/URL).--entity - Подключение к Telegram:
- если сессия авторизована — продолжаем;
- если нет — при наличии
выполняется интерактивная авторизация (код вводится в консоль).auth.phone
- Резолв сущности:
→ фоллбэк черезget_entity; при наличииiter_dialogs()— попытка вступления, затем повтор резолва.invite_link - Поиск только ваших сообщений:
.iter_messages(..., from_user="me") - Пакетное удаление (
) с паузами (batch_size) и обработкойsleep_between_batches_sec.FloodWait
Техническая деталь: удаление сделано стримингово (батчи удаляются по мере обхода), без накопления всех ID в память.
Ограничения
- Удаляются только ваши сообщения как
. Посты «от имени канала» (анонимный админ / send as channel) этим режимом не трогаются.me - Для приватных
вы должны быть участником (или указатьt.me/c/...).invite_link - Массовые операции могут вызывать
и прочие лимиты Telegram.FloodWait - Если у вас включён 2FA и не задан
, автопересоздание сессии не сможет завершиться.auth.password
Логи
Уровень — в (///).
Пример записи в файл:
Структура
.
├── delete_my_messages.py # основной скрипт
├── config.yaml # локальный конфиг (не коммитится)
└── README.md
FAQ
-
ValueError: Could not find the input entity for PeerChannel(...)
Вы не участник, или у клиента нетдляaccess_hash. Убедитесь, что аккаунт (сессия) состоит в чате/канале, либо используйте-100....invite_link -
Сессия не авторизована / пересоздание не сработало
Проверьте. Если включён 2FA — добавьтеauth.phone. Код подтверждения вводится в консоль (auth.password).auth.code_callback: "stdin"