Gemini Eraser

自动删除 Gemini 中的所有 o 对话

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name                Gemini Eraser
// @name:pt-BR          Gemini Eraser
// @name:zh-CN          Gemini Eraser
// @name:zh-TW          Gemini Eraser
// @name:fr-CA          Gemini Eraser
// @name:ckb            Gemini Eraser
// @name:ar             Gemini Eraser
// @name:be             Gemini Eraser
// @name:bg             Gemini Eraser
// @name:cs             Gemini Eraser
// @name:da             Gemini Eraser
// @name:de             Gemini Eraser
// @name:el             Gemini Eraser
// @name:en             Gemini Eraser
// @name:eo             Gemini Eraser
// @name:es             Gemini Eraser
// @name:fi             Gemini Eraser
// @name:fr             Gemini Eraser
// @name:he             Gemini Eraser
// @name:hr             Gemini Eraser
// @name:hu             Gemini Eraser
// @name:id             Gemini Eraser
// @name:it             Gemini Eraser
// @name:ja             Gemini Eraser
// @name:ka             Gemini Eraser
// @name:ko             Gemini Eraser
// @name:mr             Gemini Eraser
// @name:nb             Gemini Eraser
// @name:nl             Gemini Eraser
// @name:pl             Gemini Eraser
// @name:ro             Gemini Eraser
// @name:ru             Gemini Eraser
// @name:sk             Gemini Eraser
// @name:sr             Gemini Eraser
// @name:sv             Gemini Eraser
// @name:th             Gemini Eraser
// @name:tr             Gemini Eraser
// @name:uk             Gemini Eraser
// @name:ug             Gemini Eraser
// @name:vi             Gemini Eraser
// @namespace           http://github.com/0H4S
// @version             1.0
// @description         Automatically deletes all conversations in Gemini
// @description:pt-BR   Exclui automaticamente todas as conversas no Gemini
// @description:zh-CN   自动删除 Gemini 中的所有 o 对话
// @description:zh-TW   自動刪除 Gemini 中的所有對話
// @description:fr-CA   Supprime automatiquement toutes les conversations dans Gemini
// @description:ckb     بە شێوەیەکی ئۆتۆماتیکی هەموو گفتوگۆکان لە Gemini دەسڕێتەوە
// @description:ar      يحذف جميع المحادثات في Gemini تلقائيًا
// @description:be      Аўтаматычна выдаляе ўсе размовы ў Gemini
// @description:bg      Автоматично изтрива всички разговори в Gemini
// @description:cs      Automaticky smaže všechny konverzace v Gemini
// @description:da      Sletter automatisk alle samtaler i Gemini
// @description:de      Löscht automatisch alle Gespräche in Gemini
// @description:el      Διαγράφει αυτόματα όλες τις συνομιλίες στο Gemini
// @description:en      Automatically deletes all conversations in Gemini
// @description:eo      Aŭtomate viŝas ĉiujn konversaciojn en Gemini
// @description:es      Elimina automáticamente todas las conversaciones en Gemini
// @description:fi      Poistaa automaattisesti kaikki keskustelut Geminissä
// @description:fr      Supprime automatiquement toutes les conversations dans Gemini
// @description:he      מחק אוטומטית את כל השיחות ב-Gemini
// @description:hr      Automatski briše sve razgovore u Gemini
// @description:hu      Automatikusan törli az összes beszélgetést a Gemini alkalmazásban
// @description:id      Menghapus semua percakapan di Gemini secara otomatis
// @description:it      Elimina automaticamente tutte le conversazioni in Gemini
// @description:ja      Gemini のすべての会話を自動的に削除します
// @description:ka      ავტომატურად შლის ყველა საუბარს Gemini-ში
// @description:ko      Gemini의 모든 대화를 자동으로 삭제합니다
// @description:mr      Gemini मधील सर्व संभाषणे स्वयंचलितपणे हटवते
// @description:nb      Sletter automatisk alle samtaler i Gemini
// @description:nl      Verwijdert automatisch alle gesprekken in Gemini
// @description:pl      Automatycznie usuwa wszystkie rozmowy w Gemini
// @description:ro      Șterge automat toate conversațiile din Gemini
// @description:ru      Автоматически удаляет все диалоги в Gemini
// @description:sk      Automaticky vymaže všetky konverzácie v Gemini
// @description:sr      Аутоматски брише све разговоре у Gemini
// @description:sv      Raderar automatiskt alla konversationer i Gemini
// @description:th      ลบการสนทนาทั้งหมดใน Gemini โดยอัตโนมัติ
// @description:tr      Gemini'deki tüm konuşmaları otomatik olarak siler
// @description:uk      Автоматично видаляє всі розмови в Gemini
// @description:ug      Gemini دىكى بارلىق پاراڭلارنى ئاپتوماتىك ئۆچۈرىدۇ
// @description:vi      Tự động xóa tất cả các cuộc trò chuyện trong Gemini
// @author              OHAS
// @license             CC-BY-NC-ND-4.0
// @copyright           2025 OHAS. All Rights Reserved.
// @icon                https://cdn-icons-png.flaticon.com/512/8623/8623746.png
// @match               https://gemini.google.com/*
// @grant               GM_registerMenuCommand
// @noframes
// @compatible          chrome
// @compatible          firefox
// @compatible          edge
// @compatible          opera
// @bgf-compatible      brave
// @bgf-colorLT         #4799ff
// @bgf-colorDT         #4799ff
// @bgf-copyright       [2025 OHAS. All Rights Reserved.](https://gist.github.com/0H4S/ae2fa82957a089576367e364cbf02438)
// @bgf-social          https://github.com/0H4S
// @contributionURL     https://linktr.ee/0H4S
// ==/UserScript==

(function() {
    'use strict';

    // --- TRADUÇÃO ---
    const translations = {
        'pt': { menu: "🗑️ Excluir Tudo", confirm: "Tem certeza que deseja apagar todas as conversas?" },
        'en': { menu: "🗑️ Delete All", confirm: "Are you sure you want to delete all conversations?" },
        'es': { menu: "🗑️ Borrar todo", confirm: "¿Estás seguro de que quieres borrar todas las conversaciones?" },
        'fr': { menu: "🗑️ Tout supprimer", confirm: "Êtes-vous sûr de vouloir supprimer toutes les conversations ?" },
        'zh': { menu: "🗑️ 全部删除", confirm: "您确定要删除所有对话吗?" },
        'ja': { menu: "🗑️ すべて削除", confirm: "すべての会話を削除してもよろしいですか?" },
        'ko': { menu: "🗑️ 모두 삭제", confirm: "모든 대화를 삭제하시겠습니까?" },
        'ru': { menu: "🗑️ Удалить все", confirm: "Вы уверены, что хотите удалить все беседы?" },
        'ar': { menu: "🗑️ حذف الكل", confirm: "هل أنت متأكد que ترغب في حذف جميع المحادثات؟" },
        'be': { menu: "🗑️ Выдаліць усё", confirm: "Вы ўпэўнены, што хочаце выдаліць усе размовы?" },
        'bg': { menu: "🗑️ Изтрий всичко", confirm: "Сигурни ли сте, че искате да изтриете всички разговори?" },
        'cs': { menu: "🗑️ Smazat vše", confirm: "Opravdu chcete smazat všechny konverzace?" },
        'da': { menu: "🗑️ Slet alt", confirm: "Er du sikker på, at du vil slette alle samtaler?" },
        'de': { menu: "🗑️ Alles löschen", confirm: "Sind Sie sicher, dass Sie alle Gespräche löschen möchten?" },
        'el': { menu: "🗑️ Διαγραφή όλων", confirm: "Είστε σίγουροι ότι θέλετε να διαγράψετε όλες τις συνομιλίες;" },
        'eo': { menu: "🗑️ Viŝi ĉion", confirm: "Ĉu vi certas, ke vi volas viŝi ĉiujn konversaciojn?" },
        'fi': { menu: "🗑️ Poista kaikki", confirm: "Oletko varma, että haluat poistaa kaikki keskustelut?" },
        'he': { menu: "🗑️ מחק הכל", confirm: "האם אתה בטוח שברצונך למחוק את כל השיחות?" },
        'hr': { menu: "🗑️ Obriši sve", confirm: "Jeste li sigurni da želite obrisati sve razgovore?" },
        'hu': { menu: "🗑️ Összes törlése", confirm: "Biztosan törölni szeretné az összes beszélgetést?" },
        'id': { menu: "🗑️ Hapus Semua", confirm: "Apakah Anda yakin ingin menghapus semua percakapan?" },
        'it': { menu: "🗑️ Elimina tutto", confirm: "Sei sicuro di voler eliminare tutte le conversazioni?" },
        'ka': { menu: "🗑️ ყველას წაშლა", confirm: "დარწმუნებული ხართ, რომ გსურთ ყველა საუბრის წაშლა?" },
        'mr': { menu: "🗑️ सर्व हटवा", confirm: "तुम्हाला खात्री आहे की तुम्ही सर्व संभाषणे हटवू इच्छिता?" },
        'nb': { menu: "🗑️ Slett alt", confirm: "Er du sikker på at du vil slette alle samtaler?" },
        'nl': { menu: "🗑️ Alles verwijderen", confirm: "Weet u zeker dat u alle gesprekken wilt verwijderen?" },
        'pl': { menu: "🗑️ Usuń wszystko", confirm: "Czy na pewno chcesz usunąć wszystkie rozmowy?" },
        'ro': { menu: "🗑️ Șterge tot", confirm: "Ești sigur că vrei să ștergi toate conversațiile?" },
        'sk': { menu: "🗑️ Vymazať vše", confirm: "Naozaj chcete vymazať všetky konverzácie?" },
        'sr': { menu: "🗑️ Обриши све", confirm: "Да ли сте сигурни да желите да обришете све разговоре?" },
        'sv': { menu: "🗑️ Radera allt", confirm: "Är du säker på att du vill radera alla konversationer?" },
        'th': { menu: "🗑️ ลบทั้งหมด", confirm: "คุณแน่ใจหรือไม่ว่าต้องการลบการสนทนาทั้งหมด?" },
        'tr': { menu: "🗑️ Hepsini Sil", confirm: "Tüm konuşmaları silmek istediğinizden emin misiniz?" },
        'ug': { menu: "🗑️ ھەممىنى ئۆچۈرۈش", confirm: "ھەقىقەتەن بارلىق پاراڭلارنى ئۆچۈرەمسىز؟" },
        'uk': { menu: "🗑️ Видалити все", confirm: "Ви впевнені, що хочете видалити всі розмови?" },
        'vi': { menu: "🗑️ Xóa tất cả", confirm: "Bạn có chắc chắn muốn xóa tất cả các cuộc hội thoại không?" },
        'ckb': { menu: "🗑️ سڕینەوەی هەموو", confirm: "دڵنیای لە سڕینەوەی هەموو گفتوگۆکان؟" }
    };

    function getText(key) {
        const userLang = navigator.language || navigator.userLanguage || 'en';
        if (translations[userLang] && translations[userLang][key]) {return translations[userLang][key];}
        const langPrefix = userLang.split('-')[0];
        if (translations[langPrefix] && translations[langPrefix][key]) {return translations[langPrefix][key];}
        return translations['en'][key];
    }

    // --- ESPEAR ELEMENTO ---
    const waitForEl = (selector, timeout = 2000) => {
        return new Promise(resolve => {
            const start = Date.now();
            const interval = setInterval(() => {
                const el = document.querySelector(selector);
                if (el || (Date.now() - start) > timeout) {
                    clearInterval(interval);
                    resolve(el);
                }
            }, 100);
        });
    };

    // --- DELETAR TODAS AS CONVERSAS ---
    async function deletarTodasConversas() {
        while (true) {
            const listContainer = document.querySelector('conversations-list[data-test-id="all-conversations"]'); if (!listContainer) break;
            const menuBtn       = listContainer.querySelector('button[data-test-id="actions-menu-button"]');      if (!menuBtn) break; menuBtn.click();
            const deleteBtn     = await waitForEl('button[data-test-id="delete-button"]');
            if (deleteBtn) {
                deleteBtn.click();
                const confirmBtn = await waitForEl('mat-dialog-actions button.mat-mdc-unelevated-button, button[data-test-id="confirm-button"]');
                if (confirmBtn) {
                    confirmBtn.click();
                    await new Promise(r => setTimeout(r, 500));
                } else { break; }
            } else { break; }
        }
    }

    // --- FUNÇÃO DE EXECUÇÃO CENTRALIZADA ---
    function runDeleteScript() {
        if (confirm(getText('confirm'))) {
            deletarTodasConversas();
        }
    }

    // --- ATALHOS DE TECLADO (ALT + DEL / ALT + BACKSPACE) ---
    document.addEventListener('keydown', function(e) {
        if (e.altKey && (e.key === 'Delete' || e.key === 'Backspace')) {
            const activeTag  = document.activeElement.tagName.toLowerCase();
            const isEditable = document.activeElement.isContentEditable;
            if (activeTag === 'input' || activeTag === 'textarea' || isEditable) {return;}
            e.preventDefault();
            runDeleteScript();
        }
    });

    // --- REGISTRAR COMANDO NO MENU ---
    GM_registerMenuCommand(getText('menu'), runDeleteScript);

})();