Загрузка...

Script Script/software. Created in a hurry on Telehon. Cleaning telegrams of accounts. Which cleanses the description:

Thread in Python created by uwuooooouwu Jun 19, 2025. 291 view

  1. uwuooooouwu
    uwuooooouwu Topic starter Jun 19, 2025 2 Dec 6, 2022
    Очищает:
    1) Контакты
    2) Группы / Каналы так же выходит с них
    3) Удаляет ботов и блокирует
    4) Удаляет переписки так же блокирует людей которые писали.
    5) Удаляет аватарки до 100.000 за 1 запуск
    Залью:
    1) .exe файлом (Кому лень устанавливать Telethon а проще просто запустить и всё)
    2) Кодом на пайтоне (Если думаете что это ******* какойто, проверите код и запустите)

    Чистит примерно около 2 минут если очень много мусора на аккаунте.

    Как пользоваться:
    1) Вводите API ID и HASH ID (Где это взять указано в гуи кликбейтой ссылкой)
    2) Загружаете .session Telethon
    3) Нажимаете "Запустить"

    Так же мой совет: Запускать от .session Telethon чтобы не заморозило аккаунт.


    Code
    import asyncio
    import random
    import os
    import threading
    import tkinter as tk
    from tkinter import filedialog, scrolledtext, messagebox
    from telethon import TelegramClient, functions, types

    def log(text, log_widget):
    log_widget.config(state='normal')
    log_widget.insert(tk.END, text + '\n')
    log_widget.see(tk.END)
    log_widget.config(state='disabled')

    async def clean_account(session_path, log_widget, api_id, api_hash):
    log("Начал очистку", log_widget)
    session_name = os.path.splitext(os.path.basename(session_path))[0]
    session_dir = os.path.dirname(session_path)
    client = TelegramClient(os.path.join(session_dir, session_name), api_id=api_id, api_hash=api_hash)

    await client.start()
    log("Авторизация успешна!", log_widget)

    # Удаление всех аватарок
    log("Удаляю все аватарки профиля...", log_widget)
    try:
    total_deleted = 0
    offset = 0
    limit = 1000 # максимум за раз
    max_photos = 100000 # максимум для удаления
    while total_deleted < max_photos:
    photos = await client(functions.photos.GetUserPhotosRequest(user_id='me', offset=offset, max_id=0, limit=limit))
    if not photos.photos:
    break
    input_photos = []
    for photo in photos.photos:
    if isinstance(photo, types.Photo):
    input_photos.append(types.InputPhoto(
    id=photo.id,
    access_hash=photo.access_hash,
    file_reference=photo.file_reference
    ))
    if input_photos:
    await client(functions.photos.DeletePhotosRequest(id=input_photos))
    total_deleted += len(input_photos)
    log(f"Удалено аватарок: {total_deleted}", log_widget)
    else:
    break
    offset += len(photos.photos)
    if total_deleted >= max_photos:
    log(f"Достигнут лимит удаления: {max_photos} аватарок.", log_widget)
    break
    if total_deleted == 0:
    log("Аватарки не найдены.", log_widget)
    else:
    log(f"Всего удалено аватарок: {total_deleted}", log_widget)
    except Exception as e:
    log(f"Ошибка при удалении аватарок: {e}", log_widget)

    # Удаление контактов
    log("Удаляю контакты...", log_widget)
    result = await client(functions.contacts.GetContactsRequest(hash=0))
    contacts = result.users
    if contacts:
    for user in contacts:
    name = user.first_name or ''
    if user.last_name:
    name += f' {user.last_name}'
    username = f'@{user.username}' if user.username else ''
    user_id = user.id
    display = name.strip() or username or str(user_id)
    log(f"Удалил контакт ({display})", log_widget)
    await client(functions.contacts.DeleteContactsRequest(id=[user.id for user in contacts]))
    log(f"Удалено контактов: {len(contacts)}", log_widget)
    # Выход из групп и каналов
    log("Выхожу из групп и каналов...", log_widget)
    dialogs = await client.get_dialogs()
    for dialog in dialogs:
    entity = dialog.entity
    if isinstance(entity, (types.Chat, types.Channel)):
    try:
    await client(functions.channels.LeaveChannelRequest(entity))
    title = getattr(entity, 'title', str(entity.id))
    log(f"Вышел с группы ({title})", log_widget)
    except Exception as e:
    log(f"Ошибка выхода: {e}", log_widget)
    # Очистка чатов
    log("Очищаю чаты...", log_widget)
    dialogs = await client.get_dialogs()
    for dialog in dialogs:
    try:
    await client(functions.messages.DeleteHistoryRequest(
    peer=dialog.entity,
    max_id=0,
    revoke=True
    ))
    title = getattr(dialog.entity, 'title', str(dialog.entity.id))
    log(f"Очистил чат ({title})", log_widget)
    # Блокировка пользователя или бота
    entity = dialog.entity
    if isinstance(entity, types.User):
    try:
    await client(functions.contacts.BlockRequest(id=entity.id))
    if getattr(entity, 'bot', False):
    log(f"Заблокировал бота ({title})", log_widget)
    except Exception as e:
    log(f"Ошибка блокировки: {e}", log_widget)
    except Exception as e:
    log(f"Ошибка очистки: {e}", log_widget)

    log("Готово!", log_widget)
    log("Закончил очистку, профиль чистый", log_widget)

    def start_cleaning(session_path, log_widget, api_id, api_hash):
    button.config(state='disabled')
    def runner():
    asyncio.run(clean_account(session_path, log_widget, api_id, api_hash))
    button.config(state='normal')
    threading.Thread(target=runner).start()

    def select_session_file(log_widget, button, api_id, api_hash):
    file_path = filedialog.askopenfilename(
    title="Выберите файл сессии Telegram",
    filetypes=[("Все файлы", "*.*"), ("Telethon session", "*.session")]
    )
    if file_path:
    log_widget.config(state='normal')
    log_widget.delete(1.0, tk.END)
    log_widget.config(state='disabled')
    start_cleaning(file_path, log_widget, api_id, api_hash)

    def main():
    def on_submit():
    try:
    api_id = int(api_id_entry.get())
    api_hash = api_hash_entry.get().strip()
    if not api_hash:
    raise ValueError
    except Exception:
    messagebox.showerror("Ошибка", "Введите корректные значения API ID и API Hash!")
    return
    api_window.destroy()
    # Основное окно
    root = tk.Tk()
    root.title(" Telegram Cleaner (Telethon)")
    root.configure(bg="#23272a")

    frame = tk.Frame(root, bg="#2c2f33")
    frame.pack(padx=20, pady=20)

    session_path = tk.StringVar()

    def open_session():
    file_path = filedialog.askopenfilename(
    title="Выберите .session файл Telegram",
    filetypes=[("Telethon session", "*.session"), ("Все файлы", "*.*")]
    )
    if file_path:
    session_path.set(file_path)
    session_label.config(text=f"Файл выбран: {os.path.basename(file_path)}", fg="#43b581")
    else:
    session_label.config(text="Файл не выбран", fg="#f04747")

    def run_clean():
    log_widget.config(state='normal')
    log_widget.delete(1.0, tk.END)
    log_widget.config(state='disabled')
    open_btn.config(state='disabled')
    clean_btn.config(state='disabled')
    def runner():
    session = session_path.get() if session_path.get() else "anon"
    asyncio.run(clean_account(session, log_widget, api_id, api_hash))
    open_btn.config(state='normal')
    clean_btn.config(state='normal')
    threading.Thread(target=runner).start()

    open_btn = tk.Button(frame, text=" Открыть .session Telethon", width=30, bg="#36393f", fg="white", activebackground="#23272a", activeforeground="#43b581", font=("Arial", 11, "bold"), command=open_session)
    open_btn.pack(pady=(0, 10))

    clean_btn = tk.Button(frame, text=" Запустить очистку", width=30, bg="#7289da", fg="white", activebackground="#23272a", activeforeground="#43b581", font=("Arial", 11, "bold"), command=run_clean)
    clean_btn.pack(pady=(0, 10))

    session_label = tk.Label(frame, text="Файл не выбран", bg="#2c2f33", fg="#f04747", font=("Arial", 10, "italic"))
    session_label.pack(pady=(0, 10))

    log_widget = scrolledtext.ScrolledText(frame, width=60, height=20, state='disabled', bg="#23272a", fg="#f1f1f1", insertbackground="#f1f1f1", font=("Consolas", 10))
    log_widget.pack(pady=5)

    root.mainloop()

    # Окно для ввода API ID и API Hash
    api_window = tk.Tk()
    api_window.title("Введите API ID и API Hash")
    api_window.resizable(False, False)
    api_window.configure(bg="#23272a")

    # Поясняющая надпись
    info_label = tk.Label(api_window, text="Если у вас вход по .session Telethon, то пишите везде 0", fg="#f04747", bg="#23272a", font=("Arial", 9, "bold"))
    info_label.grid(row=0, column=0, columnspan=2, padx=10, pady=(10, 0))

    tk.Label(api_window, text="API ID:", bg="#23272a", fg="#f1f1f1", font=("Arial", 10)).grid(row=1, column=0, padx=10, pady=5, sticky='e')
    api_id_entry = tk.Entry(api_window, bg="#2c2f33", fg="#f1f1f1", insertbackground="#f1f1f1", font=("Arial", 10))
    api_id_entry.grid(row=1, column=1, padx=10, pady=5)

    tk.Label(api_window, text="API Hash:", bg="#23272a", fg="#f1f1f1", font=("Arial", 10)).grid(row=2, column=0, padx=10, pady=5, sticky='e')
    api_hash_entry = tk.Entry(api_window, bg="#2c2f33", fg="#f1f1f1", insertbackground="#f1f1f1", font=("Arial", 10))
    api_hash_entry.grid(row=2, column=1, padx=10, pady=5)

    # Кликабельная ссылка
    link_label = tk.Label(api_window, text="Получить тут: my.telegram.org (жми!)", fg="#7289da", bg="#23272a", cursor="hand2", font=("Arial", 10, "underline"))
    link_label.grid(row=3, column=0, columnspan=2, pady=(0, 5))
    link_label.bind("<Button-1>", lambda e: os.startfile("https://my.telegram.org"))

    submit_btn = tk.Button(api_window, text=" OK", command=on_submit, bg="#7289da", fg="white", activebackground="#23272a", activeforeground="#43b581", font=("Arial", 11, "bold"))
    submit_btn.grid(row=4, column=0, columnspan=2, pady=10)

    api_window.mainloop()

    if __name__ == "__main__":
    main()

    .exe файлом залил сюда: https://drive.google.com/file/d/1hXa_pRXDInYl6wCUY8WApMidqET5len5/view?usp=sharing
    Вт: https://www.virustotal.com/gui/file/36a50246d698efc340ef4430ba685789c82eb506f5f03080699ab76e9ed738db?nocache=1
     
  2. Sierro
    Sierro Jun 19, 2025 Жопа пися я карась 37 Feb 7, 2021
    Форматируй код, не удобно копировать
     
    1. uwuooooouwu Topic starter
      Sierro, Я так и не понял где находится кнопка </> Код
    2. Sierro
      renameduser_3434798, Хорошо, человек скопирует код и вставит его в пайчарм. Он у него просто ровным текстом будет и к тому же не запустится
  3. BDSM
    BDSM Jun 19, 2025 37,133 Jul 31, 2022
    Удаляется диалог у обоих или только для себя
     
    1. uwuooooouwu Topic starter
      BDSM, для обоих собеседников, а не только у вас. Это происходит благодаря параметру revoke=True в функции DeleteHistoryRequest
Loading...
Top