telethon-delete-self-messages

0

Описание

CLI-утилита на Telethon для удаления своих сообщений в чате/канале. Поддержка @slug, -100…, t.me/c/..., резолв приватных сущностей, пакетное удаление с обработкой FloodWait, настройки в config.yaml

Языки

  • Python100%
README.md

telethon-delete-self-messages

CLI-утилита для удаления только ваших сообщений в выбранном чате/канале Telegram с помощью Telethon.
Вход —

-e/--entity
(
@slug
,
-100…
,
https://t.me/c/...
). Остальные параметры — из
config.yaml
(по умолчанию из рабочей директории).


Репозиторий

SSH:

ssh://git@gitverse.ru:2222/gma/telethon-delete-self-messages.git


Требования

  • Python 3.9+
  • Пакеты:
    telethon
    ,
    pyyaml

Конфигурация

Создайте

config.yaml
рядом со скриптом (
delete_my_messages.py
). В репозиторий не коммитится (
.gitignore
).

Минимальный пример (без автопересоздания сессии)

Расширенный пример (автопересоздание сессии при невалидной/неавторизованной)

Если сессия не авторизована, утилита может автоматически перелогиниться.
Для этого добавьте блок

auth
.

Важно по безопасности: номер телефона/2FA-пароль — чувствительные данные.
Если вы включаете

auth
, не храните
config.yaml
в публичных репозиториях и следите за бэкапами/логами.


Как получить API ID / API Hash и подготовить сессию

Коротко и по делу.

1) API ID и API Hash

  1. Откройте https://my.telegram.org → войдите по номеру.
  2. API Development ToolsCreate New Application.
  3. Сохраните API ID и API Hash — они пойдут в
    config.yaml
    .

2) Рекомендуемый вариант: string-session (StringSession)

Создайте файл

gen_string_session.py
и выполните:

Скопируйте значение после

STRING_SESSION=
в
config.yaml
session.value
и установите
session.kind: "string"
.

3) Альтернатива: file-session

Если хотите файл-сессию (

my_user.session
), выполните:

После первого интерактивного входа у вас появится

my_user.session
. В
config.yaml
задайте:


Запуск

Аргументы:

  • -e, --entity
    — обязательно. Поддерживает:
    • -100...
      (peer-id канала/супергруппы),
    • @slug
      или
      slug
      ,
    • https://t.me/c/<id>/<msg_id>
      → преобразуется в
      -100<id>
      ,
    • https://t.me/<slug>/<msg_id>
      → преобразуется в
      slug
      .
  • -c, --config
    — путь к
    config.yaml
    (по умолчанию
    ./config.yaml
    ).

Как это работает (кратко)

  1. Нормализация
    --entity
    (ID/slug/URL).
  2. Подключение к Telegram:
    • если сессия авторизована — продолжаем;
    • если нет — при наличии
      auth.phone
      выполняется интерактивная авторизация (код вводится в консоль).
  3. Резолв сущности:
    get_entity
    → фоллбэк через
    iter_dialogs()
    ; при наличии
    invite_link
    — попытка вступления, затем повтор резолва.
  4. Поиск только ваших сообщений:
    iter_messages(..., from_user="me")
    .
  5. Пакетное удаление (
    batch_size
    ) с паузами (
    sleep_between_batches_sec
    ) и обработкой
    FloodWait
    .

Техническая деталь: удаление сделано стримингово (батчи удаляются по мере обхода), без накопления всех ID в память.


Ограничения

  • Удаляются только ваши сообщения как
    me
    . Посты «от имени канала» (анонимный админ / send as channel) этим режимом не трогаются.
  • Для приватных
    t.me/c/...
    вы должны быть участником (или указать
    invite_link
    ).
  • Массовые операции могут вызывать
    FloodWait
    и прочие лимиты Telegram.
  • Если у вас включён 2FA и не задан
    auth.password
    , автопересоздание сессии не сможет завершиться.

Логи

Уровень —

log_level
в
config.yaml
(
DEBUG
/
INFO
/
WARNING
/
ERROR
).

Пример записи в файл:


Структура

. ├── delete_my_messages.py # основной скрипт ├── config.yaml # локальный конфиг (не коммитится) └── README.md

FAQ

  • ValueError: Could not find the input entity for PeerChannel(...)
    Вы не участник, или у клиента нет

    access_hash
    для
    -100...
    . Убедитесь, что аккаунт (сессия) состоит в чате/канале, либо используйте
    invite_link
    .

  • Сессия не авторизована / пересоздание не сработало
    Проверьте

    auth.phone
    . Если включён 2FA — добавьте
    auth.password
    . Код подтверждения вводится в консоль (
    auth.code_callback: "stdin"
    ).