Загрузка...

Скрипт Скрипт/Софт. Создан на скорую руку на Telehon. Чистка телеграмм аккаунтов. Что очищает в описание:

Тема в разделе Python создана пользователем uwuooooouwu 19 июн 2025. 300 просмотров

  1. uwuooooouwu
    uwuooooouwu Автор темы 19 июн 2025 2 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 чтобы не заморозило аккаунт.


    Код
    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
     
    19 июн 2025 Изменено
  2. Sierro
    Sierro 19 июн 2025 Жопа пися я карась 37 7 фев 2021
    Форматируй код, не удобно копировать
     
    1. Посмотреть предыдущие комментарии (5)
    2. uwuooooouwu Автор темы
      Sierro, Я так и не понял где находится кнопка </> Код
    3. Sierro
      renameduser_3434798, Хорошо, человек скопирует код и вставит его в пайчарм. Он у него просто ровным текстом будет и к тому же не запустится
  3. BDSM
    BDSM 19 июн 2025 37 134 31 июл 2022
    Удаляется диалог у обоих или только для себя
     
    1. uwuooooouwu Автор темы
      BDSM, для обоих собеседников, а не только у вас. Это происходит благодаря параметру revoke=True в функции DeleteHistoryRequest
Загрузка...
Top