FULL CODE
-----------------------------------------------------------------------------------------------------------------------
// ==UserScript==
// @name KeepChatGPT127HUB
// @description 这是一款æé«˜ChatGPT的数æ®å®‰å…¨èƒ½åŠ›å’Œæ•ˆçŽ‡çš„æ’件。并且å…费共享大é‡åˆ›æ–°åŠŸèƒ½ï¼Œå¦‚ï¼šè‡ªåŠ¨åˆ·æ–°ã€ä¿æŒæ´»è·ƒã€æ•°æ®å®‰å…¨ã€å–消审计ã€å…‹éš†å¯¹è¯ã€è¨€æ— ä¸å°½ã€å‡€åŒ–首页ã€å±•示大å±ã€å±•示全å±ã€æ‹¦æˆªè·Ÿè¸ªã€æ—¥æ–°æœˆå¼‚ç‰ã€‚让我们的AIä½“éªŒæ— æ¯”å®‰å…¨ã€é¡ºç•…ã€ä¸æ»‘ã€é«˜æ•ˆã€ç®€æ´ã€‚
// @version 17.10
// @author 127HUB
// @namespace https://github.com/xcanwin/KeepChatGPT/
// @supportURL https://github.com/xcanwin/KeepChatGPT/
// @description:ar هذا هو ملØÙ‚ يعزز قدرات ÙˆÙƒÙØ§Ø¡Ø© بيانات ChatGPT الأمان، ويشترك مجانًا ÙÙŠ العديد من الميزات الابتكارية مثل: Ø§Ù„ØªØØ¯ÙŠØ« التلقائي، البقاء نشطًا، الأمان للبيانات، إلغاء التدقيق، استنساخ الØÙˆØ§Ø±ØŒ إلقاء Ø§Ù„Ø£ØØ±ÙØŒ تنقية Ø§Ù„ØµÙØØ© الرئيسية، عرض الشاشة الكبيرة، عرض ملء الشاشة، اعتراض التتبع، التطور الدائم وغيرها.
// @description:bg Това е добавка, коÑто повишава ÑпоÑобноÑтите и ефективноÑтта на данните на ChatGPT за ÑигурноÑÑ‚ и безпаÑноÑÑ‚ и ÑÐ¿Ð¾Ð´ÐµÐ»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтво иновативни функции безплатно, като: автоматично обновление, поддържане на активноÑÑ‚, ÑигурноÑÑ‚ на данните, отмÑна на одита, клониране на диалог, безкрайни Ñимволи, почиÑтване на началната Ñтраница, голÑм екран, пълен екран, прехващане на проÑледÑване, непрекъÑнато развитие и други.
// @description:cs Toto je doplnÄ›k zvyÅ¡ujÃcà schopnosti a efektivitu zabezpeÄenà dat u ChatGPT a sdÃlà mnoho inovativnÃch funkcà zdarma, jako je automatické obnovenÃ, udržovánà aktivity, zabezpeÄenà dat, zruÅ¡enà auditu, klonovánà konverzace, bezedné znaky, úprava úvodnà stránky, zobrazenà na velké obrazovce, zobrazenà na celou obrazovku, blokovánà sledovánÃ, nepÅ™etržitý vývoj a dalÅ¡Ã.
// @description:da Dette er en tilføjelse, der forbedrer ChatGPT's datasikkerhedsfunktioner og effektivitet og deler mange innovative funktioner gratis, såsom automatisk opdatering, aktivitetsbevaring, datasikkerhed, afbrydelse af revision, dialogkloning, uendelige tegn, rensning af startside, storskærmvisning, fuldskærmsvisning, sporingsinterception, konstant udvikling og mere.
// @description:de Dies ist ein Add-On, das die Datenschutzfunktionen und Effizienz von ChatGPT verbessert und viele innovative Funktionen kostenlos teilt, wie z. B. automatische Aktualisierung, Aktivitätserhaltung, Datensicherheit, Aufhebung der Prüfung, Klonen von Gesprächen, endlose Zeichen, Bereinigung der Startseite, Großbildanzeige, Vollbildanzeige, Tracking-Abfangen, kontinuierliche Entwicklung und mehr.
// @description:el Αυτό είναι Îνα Ï€Ïόσθετο που βελτιώνει τις δυνατότητες ασφάλειας και αποτελεσματικότητας των δεδομÎνων του ChatGPT και μοιÏάζεται πολλά καινοτόμα χαÏακτηÏιστικά δωÏεάν, όπως αυτόματη ανανÎωση, διατήÏηση της ενεÏγότητας, ασφάλεια δεδομÎνων, ακÏÏωση ελÎγχου, κλωνοποίηση συνομιλίας, απεÏιόÏιστους χαÏακτήÏες, καθαÏισμός της αÏχικής σελίδας, Ï€Ïοβολή σε μεγάλη οθόνη, Ï€Ïοβολή σε πλήÏη οθόνη, παÏεμβολή ιχνηλάτησης, συνεχής εξÎλιξη και άλλα.
// @description:en This is an add-on that enhances ChatGPT's data security capabilities and efficiency, sharing numerous innovative features for free, such as automatic refresh, activity preservation, data security, audit cancellation, conversation cloning, limitless characters, homepage purification, large screen display, full-screen display, tracking interception, ever-evolving, and more.
// @description:eo Ĉi tio estas aldonaĵo kiu plibonigas la datumsekurecan kapablecon kaj efikon de ChatGPT, kunhavigante multajn inovajn funkciojn senpage, ekzemple: aÅtomata refreÅigo, konservado de aktiveco, datumsekureco, nuligo de revizio, klonado de konversacio, senlimaj signoj, hejmpaÄa purigado, grandekrana montrado, tutskrana montrado, traksekvad-intercepto, ĉiam-evoluanta, kaj pli.
// @description:es Este es un complemento que mejora las capacidades de seguridad de datos de ChatGPT y la eficiencia, compartiendo numerosas caracterÃsticas innovadoras de forma gratuita, como la actualización automática, preservación de actividad, seguridad de datos, cancelación de auditorÃa, clonación de conversaciones, caracteres ilimitados, purificación de la página de inicio, visualización en pantalla grande, visualización en pantalla completa, interceptación de seguimiento, en constante evolución y más.
// @description:fi Tämä on lisäosa, joka parantaa ChatGPT:n tietoturvakykyjä ja tehokkuutta, jakamalla lukuisia innovatiivisia ominaisuuksia ilmaiseksi, kuten automaattinen päivitys, toiminnan säilyttäminen, tietoturva, tarkastuksen peruutus, keskustelun kloonaus, rajattomat merkit, etusivun puhdistus, suuren näytön näyttö, kokoruutunäyttö, seurannan pysäytys, jatkuva kehittyminen ja enemmän.
// @description:fr Ceci est une extension qui améliore les capacités de sécurité des données de ChatGPT et l'efficacité, en partageant de nombreuses fonctionnalités innovantes gratuitement, telles que le rafraîchissement automatique, la préservation de l'activité, la sécurité des données, l'annulation de l'audit, le clonage de conversation, des caractères illimités, la purification de la page d'accueil, l'affichage en grand écran, l'affichage en plein écran, l'interception de suivi.
// @description:fr-CA Ceci est une extension qui améliore les capacités de sécurité des données de ChatGPT et l'efficacité, en partageant de nombreuses fonctionnalités innovantes gratuitement, telles que le rafraîchissement automatique, la préservation de l'activité, la sécurité des données, l'annulation de l'audit, le clonage de conversation, des caractères illimités, la purification de la page d'accueil, l'affichage en grand écran, l'affichage en plein écran, l'interception de suivi.
// @description:he זוהי תוספת המשפרת ×ת יכולות ×”×בטחה והיעילות של ChatGPT ומשתפת מגוון רחב של ×ª×›×•× ×•×ª ×—×“×©× ×™×•×ª ×‘×—×™× ×, כמו ×¨×¢× ×•×Ÿ ×וטומטי, שמירת פעילות, ×בטחת × ×ª×•× ×™×, ביטול × ×™×ª×•×—, שכפול שיחה, ×ª×•×•×™× ×œ×œ× ×”×’×‘×œ×”, טיהור דף הבית, הצגה במסך גדול, הצגה במסך מל×, לכידת מעקב, תפוקה מתמידה ועוד.
// @description:hu Ez egy bÅ‘vÃtmény, amely javÃtja a ChatGPT adatbiztonsági képességeit és hatékonyságát, ingyenesen megosztva számos innovatÃv funkciót, mint például az automatikus frissÃtés, az aktivitás megÅ‘rzése, az adatbiztonság, az ellenÅ‘rzés visszavonása, a beszélgetés klónozása, a végtelen karakterek, a kezdÅ‘lap tisztÃtása, a nagy képernyÅ‘s megjelenÃtés, a teljes képernyÅ‘s megjelenÃtés, a követés elfogása, folyamatos fejlÅ‘dés és még sok más.
// @description:id Ini adalah tambahan yang meningkatkan kemampuan keamanan data ChatGPT dan efisiensi, berbagi banyak fitur inovatif secara gratis, seperti pembaruan otomatis, pelestarian aktivitas, keamanan data, pembatalan audit, kloning percakapan, karakter tak terbatas, penyucian beranda, tampilan layar besar, tampilan layar penuh, penyadapan pelacakan, perkembangan terus-menerus, dan lainnya.
// @description:it Questo è un componente aggiuntivo che migliora le capacità di sicurezza dei dati di ChatGPT e l'efficienza, condividendo numerose funzionalità innovative gratuitamente, come l'aggiornamento automatico, la conservazione dell'attività , la sicurezza dei dati, l'annullamento dell'audit, il clonaggio delle conversazioni, caratteri illimitati, la purificazione della home page, la visualizzazione su schermo grande, la visualizzazione a schermo intero, l'intercettazione del tracciamento.
// @description:ja ã“れã¯ChatGPTã®ãƒ‡ãƒ¼ã‚¿ã‚»ã‚ュリティ能力ã¨åŠ¹çŽ‡ã‚’å‘上ã•ã›ã‚‹ã‚¢ãƒ‰ã‚ªãƒ³ã§ã‚りã€è‡ªå‹•リフレッシュã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ä¿æŒã€ãƒ‡ãƒ¼ã‚¿ã‚»ã‚ュリティã€ç›£æŸ»ã‚ャンセルã€ä¼šè©±ã®ã‚¯ãƒãƒ¼ãƒ³ã€ç„¡åˆ¶é™ã®æ–‡å—ã€ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã®æµ„化ã€å¤§ç”»é¢è¡¨ç¤ºã€ãƒ•ルスクリーン表示ã€ãƒˆãƒ©ãƒƒã‚ングã®ã‚¤ãƒ³ã‚¿ãƒ¼ã‚»ãƒ—トãªã©ã®é©æ–°çš„ãªæ©Ÿèƒ½ã‚’ç„¡æ–™ã§å…±æœ‰ã—ã¦ã„ã¾ã™ã€‚çµ¶ãˆé–“ãªã進化ã—ç¶šã‘ã¾ã™ã€‚
// @description:ka ეს áƒáƒ ის დáƒáƒ›áƒáƒ¢áƒ”ბáƒ, რáƒáƒ›áƒ”ლიც გáƒáƒ£áƒ–რდებრChatGPT-ის მáƒáƒœáƒáƒªáƒ”მთრუსáƒáƒ¤áƒ თხáƒáƒ”ბის შესáƒáƒ«áƒšáƒ”ბლáƒáƒ‘ებს დრეფექტურáƒáƒ‘áƒáƒ¡ დრგáƒáƒ£áƒ—áƒáƒ•ისუფლებს უკáƒáƒ•შირის რáƒáƒáƒ“ენáƒáƒ‘ებს უფáƒáƒ¡áƒáƒ“, რáƒáƒ’áƒáƒ იცáƒáƒ: áƒáƒ•ტáƒáƒ›áƒáƒ¢áƒ£áƒ ი გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ, სáƒáƒ¥áƒ›áƒ˜áƒáƒœáƒáƒ‘ის შენáƒáƒ®áƒ•áƒ, მáƒáƒœáƒáƒªáƒ”მთრუსáƒáƒ¤áƒ თხáƒáƒ”ბáƒ, áƒáƒ£áƒ“იტის გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ, სáƒáƒ£áƒ–მე კáƒáƒœáƒ¢áƒáƒ¥áƒ¢áƒ˜áƒ¡ კლáƒáƒœáƒ˜, ულიმიტრსიმბáƒáƒšáƒáƒ”ბი, მთáƒáƒ•áƒáƒ ი გვერდის გáƒáƒ¬áƒ›áƒ”ნდáƒ, დიდ ეკრáƒáƒœáƒ–ე ჩვენებáƒ, სრული ეკრáƒáƒœáƒ–ე ჩვენებáƒ, ტრეკინგის წáƒáƒ›áƒ˜, სáƒáƒ£áƒ™áƒ”თესრგáƒáƒœáƒ•ითáƒáƒ ებრდრსხვáƒ.
// @description:ko ì´ê²ƒì€ ChatGPTì˜ ë°ì´í„° 보안 기능과 íš¨ìœ¨ì„±ì„ í–¥ìƒì‹œí‚¤ëŠ” ì• ë“œì˜¨ìœ¼ë¡œ, ìžë™ 새로 ê³ ì¹¨, í™œë™ ë³´ì¡´, ë°ì´í„° 보안, ê°ì‚¬ 취소, 대화 ë³µì œ, ë¬´ì œí•œ 문ìž, 홈페ì´ì§€ ì •í™”, 대형 화면 표시, ì „ì²´ 화면 표시, ì¶”ì 가로채기 ë“±ì˜ í˜ì‹ ì ì¸ ê¸°ëŠ¥ì„ ë¬´ë£Œë¡œ ê³µìœ í•©ë‹ˆë‹¤. ëŠìž„ì—†ì´ ì§„í™”í•˜ë©° ë” ë§Žì€ ê¸°ëŠ¥ì„ ì œê³µí•©ë‹ˆë‹¤.
// @description:nb Dette er en tilleggsfunksjon som forbedrer ChatGPTs datasikkerhetsevner og effektivitet, og deler mange innovative funksjoner gratis, som automatisk oppdatering, aktivitetsbevaring, datasikkerhet, opphevelse av revisjon, samtalekloning, ubegrensede tegn, hjemmeside-rengjøring, visning på storskjerm, fullskjermvisning, sporingssperre, kontinuerlig utvikling og mer.
// @description:nl Dit is een add-on die de gegevensbeveiligingsmogelijkheden en efficiëntie van ChatGPT verbetert en tal van innovatieve functies gratis deelt, zoals automatische vernieuwing, activiteitenbehoud, gegevensbeveiliging, annulering van audit, gespreksklonering, onbeperkte tekens, homepage zuivering, grootschermweergave, volledig schermweergave, tracking onderschepping, voortdurende evolutie en meer.
// @description:pl To dodatek, który poprawia zdolności zabezpieczeń danych w ChatGPT oraz efektywność, udostępniając wiele innowacyjnych funkcji za darmo, takich jak automatyczne odświeżanie, zachowanie aktywności, bezpieczeństwo danych, anulowanie audytu, klonowanie rozmowy, nieograniczone znaki, oczyszczanie strony głównej, wyświetlanie na dużym ekranie, wyświetlanie na pełnym ekranie, przechwytywanie śledzenia, nieustanny rozwój i więcej.
// @description:pt-BR Este é um complemento que melhora as capacidades de segurança de dados do ChatGPT e a eficiência, compartilhando inúmeras caracterÃsticas inovadoras gratuitamente, como atualização automática, preservação de atividade, segurança de dados, cancelamento de auditoria, clonagem de conversas, caracteres ilimitados, purificação da página inicial, exibição em tela grande, exibição em tela cheia, interceptação de rastreamento, evolução constante e mais.
// @description:ro Acesta este un modul care îmbunătățește capacitățile de securitate a datelor pentru ChatGPT și eficiența, partajând numeroase funcționalități inovatoare gratuit, cum ar fi reîmprospătarea automată, păstrarea activității, securitatea datelor, anularea auditului, clonarea conversației, caractere nelimitate, purificarea paginii de start, afișarea pe ecran mare, afișarea pe tot ecranul, interceptarea urmăririi, evoluție continuă și multe altele.
// @description:ru Ðто дополнение, повышающее ÑпоÑобноÑти к защите данных ChatGPT и ÑффективноÑти, беÑплатно предоÑтавлÑющее множеÑтво инновационных функций, таких как автоматичеÑкое обновление, Ñохранение активноÑти, защита данных, отмена аудита, клонирование диалога, неограниченные Ñимволы, очиÑтка домашней Ñтраницы, отображение на большом Ñкране, полноÑкранный режим, перехват отÑлеживаниÑ, непрерывное развитие и многое другое.
// @description:sk Toto je doplnok, ktorý zlepÅ¡uje schopnosti zabezpeÄenia údajov ChatGPT a efektÃvnosÅ¥, zdieľa množstvo inovatÃvnych funkcià zdarma, ako automatické obnovenie, zachovanie aktivity, bezpeÄnosÅ¥ údajov, zruÅ¡enie auditu, klonovanie konverzácie, neobmedzené znaky, vyÄistenie úvodnej stránky, zobrazenie na veľkom displeji, zobrazenie na celú obrazovku, odchyt sledovania, neustály vývoj a viac.
// @description:sr Ovo je dodatak koji poboljÅ¡ava mogućnosti bezbednosti podataka u ChatGPT i efikasnost, deleći brojne inovativne funkcije besplatno, kao Å¡to su automatsko osvežavanje, oÄuvanje aktivnosti, bezbednost podataka, otkazivanje revizije, kloniranje razgovora, neograniÄeni znakovi, proÄišćavanje poÄetne stranice, prikaz na velikom ekranu, prikaz na celom ekranu, presretanje praćenja, neprestani razvoj i viÅ¡e.
// @description:sv Detta är en tillägg som förbättrar ChatGPT: s dataskyddsfunktioner och effektivitet, och delar många innovativa funktioner gratis, som automatisk uppdatering, aktivitetsbevarande, dataskydd, återkallande av granskning, kloning av samtal, obegränsade tecken, rening av startsidan, stor skärmvisning, helskärmsvisning, spårningsavlyssning, ständig utveckling och mer.
// @description:th นี่คืà¸à¸ªà¹ˆà¸§à¸™à¹€à¸ªà¸£à¸´à¸¡à¸—ี่เสริมสร้างความสามารถในเรื่à¸à¸‡à¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸„วามปลà¸à¸”ภัยขà¸à¸‡à¸‚้à¸à¸¡à¸¹à¸¥ ChatGPT à¹à¸¥à¸°à¸›à¸£à¸°à¸ªà¸´à¸—ธิภาพ โดยà¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¸Ÿà¸µà¹€à¸ˆà¸à¸£à¹Œà¸™à¸§à¸±à¸•à¸à¸£à¸£à¸¡à¸«à¸¥à¸²à¸à¸«à¸¥à¸²à¸¢à¸Ÿà¸£à¸µ เช่น à¸à¸²à¸£à¸£à¸µà¹€à¸Ÿà¸£à¸Šà¸à¸±à¸•โนมัติ à¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸„วามเคลื่à¸à¸™à¹„หว à¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸„วามปลà¸à¸”ภัยข้à¸à¸¡à¸¹à¸¥ à¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•รวจสà¸à¸š à¸à¸²à¸£à¸—ำซ้ำขà¸à¸‡à¸šà¸—สนทนา à¸à¸±à¸à¸‚ระไม่จำà¸à¸±à¸” à¸à¸²à¸£à¸—ำความสะà¸à¸²à¸”หน้าโฮมเพจ à¸à¸²à¸£à¹à¸ªà¸”งบนหน้าจà¸à¸‚นาดใหà¸à¹ˆ à¸à¸²à¸£à¹à¸ªà¸”งบนหน้าจà¸à¹€à¸•็มหน้าจภà¸à¸²à¸£à¹à¸à¸šà¸”ัà¸à¸à¸²à¸£à¸•ิดตาม à¸à¸²à¸£à¹€à¸ˆà¸£à¸´à¸à¹€à¸•ิบโตà¸à¸¢à¸¹à¹ˆà¹€à¸ªà¸¡à¸ à¹à¸¥à¸°à¸à¸·à¹ˆà¸™ ๆ
// @description:tr Bu, ChatGPT'nin veri güvenliği yeteneklerini ve verimliliğini artıran, otomatik yenileme, etkinlik koruma, veri güvenliği, denetim iptali, konuşma klonlama, sınırsız karakter, ana sayfa temizleme, büyük ekran gösterimi, tam ekran gösterimi, izleme engelleme gibi birçok yenilikçi özelliği ücretsiz paylaşan bir eklentidir. Sürekli gelişim ve daha fazlası.
// @description:uk Це додаток, Ñкий покращує можливоÑті Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ даних у ChatGPT та ефективніÑть, поділÑючи безкоштовно чиÑленні інноваційні функції, такі Ñк автоматичне оновленнÑ, Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñті, безпека даних, ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ñƒ, ÐºÐ»Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ð¾Ð²Ð¸, необмежені Ñимволи, Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð´Ð¾Ð¼Ð°ÑˆÐ½ÑŒÐ¾Ñ— Ñторінки, Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° великому екрані, Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° повному екрані, Ð¿ÐµÑ€ÐµÑ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÑтеженнÑ, поÑтійний розвиток та багато іншого.
// @description:ug بۇ، ChatGPT داتا تىنÛÙ„Û•Ø´ كۈچلىرىنى Û‹Û• تەۋسىيەلىكىنى يۇقىرىلاشقان بىر قوشما، ئاپتوماتىك تىزىملاش، پائالىيەت ساقلاش، داتا ØªÙ‰Ù†ÛØ´Ù„ىتىش، تۆۋەندۇرۇش تىكلىپىنى بىكارلاش، سÛنىمىسىز بەلگەلەر، باش بەت ئارىلىقتا تازىلاش، Ú†ÙˆÚ ÙƒÛ†Ø±ÛˆØ´ دىسپىلى نۇمايىش، پۈتۈن ئÛكران نۇمايىش، داپتىراق ئىزلەش، دائىمىي ئىشلەتكۈچى قوشمىسى، Û‹Û• باشقا ÙƒÛ†Ù¾ مەزمۇننى بەلگىلەپ Ø¨ÛØ±Ù‰Ø¯Û‡.
// @description:vi Äây là má»™t tiện Ãch bổ sung cải thiện khả năng bảo máºt dữ liệu cá»§a ChatGPT và hiệu suất, chia sẻ nhiá»u tÃnh năng đổi má»›i miá»…n phÃ, như là m má»›i tá»± động, bảo tồn hoạt động, bảo máºt dữ liệu, há»§y kiểm toán, sao chép cuá»™c trò chuyện, ký tá»± không giá»›i hạn, là m sạch trang chá»§, hiển thị trên mà n hình lá»›n, hiển thị toà n mà n hình, chặn theo dõi và phát triển liên tục và hÆ¡n nữa.
// @description:zh-CN 这是一款æé«˜ChatGPT的数æ®å®‰å…¨èƒ½åŠ›å’Œæ•ˆçŽ‡çš„æ’件。并且å…费共享大é‡åˆ›æ–°åŠŸèƒ½ï¼Œå¦‚ï¼šè‡ªåŠ¨åˆ·æ–°ã€ä¿æŒæ´»è·ƒã€æ•°æ®å®‰å…¨ã€å–消审计ã€å…‹éš†å¯¹è¯ã€è¨€æ— ä¸å°½ã€å‡€åŒ–首页ã€å±•示大å±ã€å±•示全å±ã€æ‹¦æˆªè·Ÿè¸ªã€æ—¥æ–°æœˆå¼‚ç‰ã€‚让我们的AIä½“éªŒæ— æ¯”å®‰å…¨ã€é¡ºç•…ã€ä¸æ»‘ã€é«˜æ•ˆã€ç®€æ´ã€‚
// @description:zh-TW 這是一個增強ChatGPT數據安全能力和效率的æ’件。並且å…費共享å„ç¨®å‰µæ–°åŠŸèƒ½ï¼Œå¦‚ï¼šè‡ªå‹•åˆ·æ–°ã€æ´»å‹•æŒä¹…ã€æ•¸æ“šå®‰å…¨ã€å–æ¶ˆå¯©è¨ˆã€æœƒè©±å…‹éš†ã€ç„¡é™å°è©±ã€ä¸»é æ•´ç†ã€å¤§å±å¹•展示ã€å…¨å±å±•示ã€è¿½è¸ªæ””æˆªã€æŒçºŒæ›´æ–°ç‰ã€‚讓我們體驗智能ã€å®‰å…¨ã€ç„¡ç¸«ã€é«˜æ•ˆã€ç°¡æ½”çš„AI。
// @icon data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" stroke-width="2" fill="none" stroke="currentColor"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
// @license GPL-2.0-only
// @match https://chat.openai.com/*
// @grant GM_addStyle
// @grant GM_addElement
// @grant GM_setValue
// @grant GM_getValue
// @grant unsafeWindow
// @run-at document-body
// @noframes
// ==/UserScript==
(function() {
'use strict';
var global = {};
const $ = (Selector, el) => (el || document).querySelector(Selector);
const $$ = (Selector, el) => (el || document).querySelectorAll(Selector);
const u = `/api/${GM_info.script.namespace.slice(33, 34)}uth/s${GM_info.script.namespace.slice(28, 29)}ssion`;
const symbol1_selector = 'nav.flex .transition-colors';
const symbol2_selector = 'button.justify-center .sr-only';
const datasec_blocklist_default = "18888888888\nhttps://å…¬å¸åŸŸå.com\n银行å¡å·\n([\\w-]+(\\.[\\w-]+)*)@163\.com\n";
const getLang = function() {
let lang = `
{
"index": {"暗色主题": "dm", "显示调试": "sd", "å–æ¶ˆå®¡è®¡": "cm", "å–æ¶ˆåŠ¨ç”»": "ca", "关于": "ab", "建议间隔50ç§’": "si", "调整间隔": "mi", "检查更新": "cu", "当å‰ç‰ˆæœ¬": "cv", "å‘现最新版": "dl", "已是最新版": "lv", "克隆对è¯": "cc", "净化页é¢": "pp", "展示大å±": "ls", "展示全å±": "fs", "è¨€æ— ä¸å°½": "sc", "拦截跟踪": "it", "日新月异": "ec", "赞èµé¼“励": "ap", "è¦å‘Š": "wn", "æ•°æ®å®‰å…¨": "ds", "å‘çŽ°æ•æ„Ÿæ•°æ®": "dd", "使用æ£åˆ™ç¼–写规则": "rr"},
"local": {
"ar": {"dm": "الوضع الداكن", "sd": "إظهار التصØÙŠØ", "cm": "إلغاء التدقيق", "ca": "إلغاء الرسوم Ø§Ù„Ù…ØªØØ±ÙƒØ©", "ab": "ØÙˆÙ„", "si": "Ø§Ù‚ØªØ±Ø§Ø ÙØ§ØµÙ„ زمني 50 ثانية", "mi": "تعديل Ø§Ù„ÙØ§ØµÙ„", "cu": "التØÙ‚Ù‚ من Ø§Ù„ØªØØ¯ÙŠØ«Ø§Øª", "cv": "الإصدار Ø§Ù„ØØ§Ù„ÙŠ", "dl": "Ø§ÙƒØªØ´Ù Ø£ØØ¯Ø« إصدار", "lv": "Ø£ØØ¯Ø« إصدار", "cc": "استنساخ Ø§Ù„Ù…ØØ§Ø¯Ø«Ø©", "pp": "تنقية Ø§Ù„ØµÙØØ©", "ls": "عرض الشاشة الكبيرة", "fs": "عرض بملء الشاشة", "sc": "ØªØØ¯Ø« بشكل كامل", "it": "اعتراض التتبع", "ec": "التغير المستمر", "ap": "تقدير", "wn": "ØªØØ°ÙŠØ±", "ds": "أمان البيانات", "dd": "اكتش٠البيانات Ø§Ù„ØØ³Ø§Ø³Ø©", "rr": "استخدم الريجكس لكتابة القواعد"},
"bg": {"dm": "Тъмна тема", "sd": "Показване на отÑтранÑване на грешки", "cm": "Отказ от одит", "ca": "ОтмÑна на анимациÑта", "ab": "За", "si": "Предложете интервал от 50 Ñекунди", "mi": "ПромÑна на интервала", "cu": "Проверка на актуализации", "cc": "Клониране на разговора", "pp": "ПочиÑтване на Ñтраницата", "ls": "Показване на голÑм екран", "fs": "Показване на цÑл екран", "sc": "Говорете пълно", "it": "Прихващане на проÑледÑването", "ec": "ÐепрекъÑнато променÑщ Ñе", "ap": "Оценка", "wn": "Предупреждение", "ds": "СигурноÑÑ‚ на данните", "dd": "Откриване на чувÑтвителни данни", "rr": "Използвайте регулÑрни изрази за ÑÑŠÑтавÑне на правила"},
"cs": {"dm": "Tmavý režim", "sd": "Zobrazit ladÄ›nÃ", "cm": "ZruÅ¡enà auditu", "ca": "ZruÅ¡it animaci", "ab": "O", "si": "Navrhnout interval 50 sekund", "mi": "Upravit interval", "cu": "Kontrola aktualizacÃ", "cc": "Klonovat konverzaci", "pp": "OÄistit stránku", "ls": "Zobrazenà velkého displeje", "fs": "Zobrazit na celou obrazovku", "sc": "Mluvte úplnÄ›", "it": "Zachytávánà sledovánÃ", "ec": "Neustále se mÄ›nÃcÃ", "ap": "OcenÄ›nÃ", "wn": "VarovánÃ", "ds": "BezpeÄnost dat", "dd": "Detekce citlivých dat", "rr": "Použijte regulárnà výrazy pro psanà pravidel"},
"da": {"dm": "Mørk tilstand", "sd": "Vis fejlfinding", "cm": "Annuller revision", "ca": "Annuller animation", "ab": "Om", "si": "Forslag interval på 50 sekunder", "mi": "Ændre interval", "cu": "Tjek for opdateringer", "cc": "Klon samtalen", "pp": "Rensning af siden", "ls": "Vis stor skærm", "fs": "Vis i fuld skærm", "sc": "Fuldfør udtalelsen", "it": "Interceptor sporing", "ec": "Konstant forandring", "ap": "Værdssættelse", "wn": "Advarsel", "ds": "Datasikkerhed", "dd": "Opdage følsomme data", "rr": "Brug regex til at skrive regler"},
"de": {"dm": "Dunkler Modus", "sd": "Fehlerbehebung anzeigen", "cm": "Prüfung abbrechen", "ca": "Animation abbrechen", "ab": "Über", "si": "Vorschlag für Intervall von 50 Sekunden", "mi": "Intervall bearbeiten", "cu": "Überprüfung auf Updates", "cv": "Aktuelle Version", "dl": "Entdecken Sie die neueste Version", "lv": "ist die neueste Version", "cc": "Konversation klonen", "pp": "Seite bereinigen", "ls": "Großen Bildschirm anzeigen", "fs": "Vollbild anzeigen", "sc": "Sprich vollständig", "it": "Tracking abfangen", "ec": "Ständiger Wandel", "ap": "Wertschätzung", "wn": "Warnung", "ds": "Datensicherheit", "dd": "Entdeckung sensibler Daten", "rr": "Verwenden Sie Regex, um Regeln zu schreiben"},
"el": {"dm": "Σκοτεινή θεματολογία", "sd": "Εμφάνιση αποσφαλμάτωσης", "cm": "ΑκÏÏωση ελÎγχου", "ca": "ΑκÏÏωση κινοÏμενων σχεδίων", "ab": "Σχετικά με", "si": "Î Ïοτείνετε διάστημα 50 δευτεÏολÎπτων", "mi": "ΤÏοποποίηση διαστήματος", "cu": "Έλεγχος ενημεÏώσεων", "cc": "Κλωνοποίηση συνομιλίας", "pp": "ΚαθαÏισμός σελίδας", "ls": "Εμφάνιση μεγάλης οθόνης", "fs": "Εμφάνιση πλήÏους οθόνης", "sc": "ΟλοκλήÏωσε την ομιλία", "it": "Ανίχνευση παÏακολοÏθησης", "ec": "Αδιάκοπη αλλαγή", "ap": "Εκτίμηση", "wn": "Î Ïοειδοποίηση", "ds": "Ασφάλεια δεδομÎνων", "dd": "Ανακάλυψη ευαίσθητων δεδομÎνων", "rr": "ΧÏησιμοποιήστε regex για να γÏάψετε κανόνες"},
"en": {"dm": "Dark mode", "sd": "Show debugging", "cm": "Cancel audit", "ca": "Cancel animation", "ab": "About", "si": "Suggest interval of 50 seconds; The author usually sets 900", "mi": "Modify interval", "cu": "Check for updates", "cv": "Current version", "dl": "Discover the latest version", "lv": "is the latest version", "cc": "Conversation cloning", "pp": "Purified page", "ls": "Wide display mode", "fs": "Fullscreen mode", "sc": "Complete response", "it": "Intercept tracking", "ec": "More chat info", "ap": "Sponsor", "wn": "Warning", "ds": "Data security", "dd": "Discover sensitive data", "rr": "Use regex to write rules"},
"eo": {"dm": "Malhela moduso", "sd": "Montri depuradon", "cm": "Nuligi kontroli", "ca": "Nuligi animacion", "ab": "Pri", "si": "Sugesti intervalon de 50 sekundoj", "mi": "Modifi intervalon", "cu": "Kontroli Äisdatigojn", "cc": "Kloni konversacion", "pp": "Pura paÄo", "ls": "Montri grandan ekrane", "fs": "Montri plenekranon", "sc": "Parolu plene", "it": "Intercepti Trakadon", "ec": "Ĉiam ÅanÄiÄanta", "ap": "Aprobo", "wn": "Averto", "ds": "Datensekureco", "dd": "Malkovru sensitivajn datumojn", "rr": "Uzu regulajn esprimojn por skribi regulojn"},
"es": {"dm": "Modo oscuro", "sd": "Mostrar depuración", "cm": "Cancelar auditorÃa", "ca": "Cancelar animación", "ab": "Acerca de", "si": "Sugerir un intervalo de 50 segundos", "mi": "Modificar intervalo", "cu": "Comprobar actualizaciones", "cv": "Versión actual", "dl": "Descubre la última versión", "lv": "es la última versión", "cc": "Clonar conversación", "pp": "Purificar página", "ls": "Mostrar pantalla grande", "fs": "Mostrar pantalla completa", "sc": "Termina tu discurso", "it": "Interceptar Rastreo", "ec": "Cambio constante", "ap": "Apreciación", "wn": "Advertencia", "ds": "Seguridad de datos", "dd": "Descubrir datos sensibles", "rr": "Usa regex para escribir reglas"},
"fi": {"dm": "Tumma tila", "sd": "Näytä virheenkorjaus", "cm": "Peruuta tarkistus", "ca": "Peruuta animaatio", "ab": "Tietoa", "si": "Ehdota 50 sekunnin väliaikaa", "mi": "Muokkaa väliä", "cu": "Tarkista päivitykset", "cc": "Kloonaa keskustelu", "pp": "Puhdista sivu", "ls": "Näytä suuri näyttö", "fs": "Näytä koko näyttö", "sc": "Puhu loppuun asti", "it": "Sieppaa seuranta", "ec": "Jatkuvasti muuttuva", "ap": "Arvostus", "wn": "Varoitus", "ds": "Tietoturva", "dd": "Löytää arkaluonteista dataa", "rr": "Käytä regexiä sääntöjen kirjoittamiseen"},
"fr": {"dm": "Mode sombre", "sd": "Afficher le débogage", "cm": "Annuler l'audit", "ca": "Annuler l'animation", "ab": "À propos de", "si": "Suggérer un intervalle de 50 secondes", "mi": "Modifier l'intervalle", "cu": "Vérifier les mises à jour", "cv": "Version actuelle", "dl": "Découvrir la dernière version", "lv": "est la dernière version", "cc": "Cloner la conversation", "pp": "Purifier la page", "ls": "Afficher grand écran", "fs": "Afficher en plein écran", "sc": "Parlez complètement", "it": "Interception de suivi", "ec": "En perpétuelle évolution", "ap": "Appréciation", "wn": "Avertissement", "ds": "Sécurité des données", "dd": "Découvrir des données sensibles", "rr": "Utilisez des regex pour écrire des règles"},
"fr-CA": {"dm": "Mode nuit", "sd": "Afficher le débogage", "cm": "Annuler la vérification", "ca": "Annuler l'animation", "ab": "À propos de", "si": "Suggérer un intervalle de 50 secondes", "mi": "Modifier l'intervalle", "cu": "Vérifier les mises à jour", "cv": "Version actuelle", "dl": "Découvrir la dernière version", "lv": "est la dernière version", "cc": "Cloner la conversation", "pp": "Purifier la page", "ls": "Afficher grand écran", "fs": "Afficher en plein écran", "sc": "Parlez complètement", "it": "Intercepter le suivi", "ec": "Évolution constante", "ap": "Appréciation", "wn": "Avertissement", "ds": "Sécurité des données", "dd": "Découvrir des données sensibles", "rr": "Utilisez des regex pour écrire des règles"},
"he": {"dm": "מצב ×›×”×”", "sd": "הצגת התיקון", "cm": "ביטול ביקורת", "ca": "בטל ×× ×™×ž×¦×™×”", "ab": "×ודות", "si": "הצע מרווח של 50 ×©× ×™×•×ª", "mi": "×©×™× ×•×™ מרווח", "cu": "בדיקת ×¢×“×›×•× ×™×", "cc": "שכפול שיחה", "pp": "טיהור הדף", "ls": "תצוגת מסך גדול", "fs": "הצג מסך מל×", "sc": "דבר במלו×ו", "it": "התערבות במעקב", "ec": "×©×™× ×•×™ מתמיד", "ap": "הערכה", "wn": "×זהרה", "ds": "×בטחת מידע", "dd": "גילוי × ×ª×•× ×™× ×¨×’×™×©×™×", "rr": "השתמש ×‘×‘×™×˜×•×™×™× ×¨×’×•×œ×¨×™×™× ×œ×›×ª×™×‘×ª כללי×"},
"hu": {"dm": "Sötét mód", "sd": "Hibakeresés mutatása", "cm": "EllenÅ‘rzés megszüntetése", "ca": "Animáció törlése", "ab": "Rólunk", "si": "Javaslat 50 másodperces idÅ‘közre", "mi": "IdÅ‘köz módosÃtása", "cu": "FrissÃtések keresése", "cc": "Beszélgetés klónozása", "pp": "Oldal tisztÃtása", "ls": "Nagy képernyÅ‘ megjelenÃtése", "fs": "Teljes képernyÅ‘ megjelenÃtése", "sc": "Beszélj teljesen", "it": "Követés elfogása", "ec": "Folyamatos változás", "ap": "Elismerés", "wn": "Figyelmeztetés", "ds": "Adatbiztonság", "dd": "Érzékeny adatok felfedezése", "rr": "Használja a regex-et a szabályok Ãrásához"},
"id": {"dm": "Mode gelap", "sd": "Tampilkan debugging", "cm": "Batalkan audit", "ca": "Batalkan animasi", "ab": "Tentang", "si": "Sarankan interval 50 detik", "mi": "Modifikasi interval", "cu": "Periksa Pembaruan", "cc": "Klon percakapan", "pp": "Membersihkan halaman", "ls": "Tampilkan layar besar", "fs": "Tampilkan layar penuh", "sc": "Berbicara secara lengkap", "it": "Intersepsi Pelacakan", "ec": "Perubahan terus-menerus", "ap": "Penghargaan", "wn": "Peringatan", "ds": "Keamanan data", "dd": "Temukan data sensitif", "rr": "Gunakan regex untuk menulis aturan"},
"it": {"dm": "Modalità scura", "sd": "Mostra debug", "cm": "Annulla verifica", "ca": "Annulla animazione", "ab": "Riguardo a", "si": "Suggerisci un intervallo di 50 secondi", "mi": "Modifica intervallo", "cu": "Verifica aggiornamenti", "cv": "Versione attuale", "dl": "Scopri l'ultima versione", "lv": "è l'ultima versione", "cc": "Clona conversazione", "pp": "Purifica pagina", "ls": "Mostra grande schermo", "fs": "Mostra a schermo intero", "sc": "Parla completamente", "it": "Intercettare il tracciamento", "ec": "Cambiamento costante", "ap": "Apprezzamento", "wn": "Avvertimento", "ds": "Sicurezza dei dati", "dd": "Scoprire dati sensibili", "rr": "Usa regex per scrivere regole"},
"ja": {"dm": "ダークモード", "sd": "デãƒãƒƒã‚°ã‚’表示", "cm": "監査をã‚ャンセル", "ca": "アニメーションã®ã‚ャンセル", "ab": "ã«ã¤ã„ã¦", "si": "50ç§’é–“éš”ã‚’ææ¡ˆã™ã‚‹", "mi": "間隔を変更ã™ã‚‹", "cu": "æ›´æ–°ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹", "cv": "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³", "dl": "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’発見ã™ã‚‹", "lv": "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™", "cc": "会話をクãƒãƒ¼ãƒ³ã™ã‚‹", "pp": "ページを浄化ã™ã‚‹", "ls": "ビッグスクリーンを表示ã™ã‚‹", "fs": "フルスクリーン表示", "sc": "完全ã«è©±ã—ã¦ãã ã•ã„", "it": "トラッã‚ングã®å‚å—", "ec": "çµ¶ãˆé–“ãªã„変化", "ap": "評価", "wn": "è¦å‘Š", "ds": "データセã‚ュリティ", "dd": "機密データを発見ã™ã‚‹", "rr": "æ£è¦è¡¨ç¾ã‚’使用ã—ã¦ãƒ«ãƒ¼ãƒ«ã‚’書ã"},
"ka": {"dm": "ბნელი რეჟიმი", "sd": "გáƒáƒ›áƒáƒ©áƒ”ნრდებáƒáƒ’ი", "cm": "áƒáƒœáƒ£áƒšáƒ˜áƒ ებრáƒáƒ£áƒ“იტი", "ca": "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ", "ab": "შესáƒáƒ®áƒ”ბ", "si": "50 წáƒáƒ›áƒ˜áƒ¡ ინტერვáƒáƒšáƒ˜áƒ¡ შეტáƒáƒœáƒ", "mi": "ინტერვáƒáƒšáƒ˜áƒ¡ შეცვლáƒ", "cu": "გáƒáƒœáƒáƒ®áƒšáƒ”ბების შემáƒáƒ¬áƒ›áƒ”ბáƒ", "cc": "კáƒáƒœáƒ•ერსáƒáƒªáƒ˜áƒ˜áƒ¡ კლáƒáƒœáƒ˜áƒ ებáƒ", "pp": "გვერდის გáƒáƒ¬áƒ›áƒ”ნდáƒ", "ls": "დიდი ეკრáƒáƒœáƒ˜áƒ¡ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბáƒ", "fs": "მთელი ეკრáƒáƒœáƒ˜áƒ¡ ჩვენებáƒ", "sc": "სრულáƒáƒ“ ილáƒáƒžáƒáƒ áƒáƒ™áƒ”თ", "it": "თვáƒáƒšáƒ§áƒ£áƒ ი მისმáƒáƒ თáƒáƒ•áƒ", "ec": "მუდმივი ცვლილებáƒ", "ap": "შეფáƒáƒ¡áƒ”ბáƒ", "wn": "გáƒáƒ¤áƒ თხილებáƒ", "ds": "მáƒáƒœáƒáƒªáƒ”მთრუსáƒáƒ¤áƒ თხáƒáƒ”ბáƒ", "dd": "სáƒáƒ™áƒ˜áƒ—ხáƒáƒ•ი მáƒáƒœáƒáƒªáƒ”მების გáƒáƒ›áƒáƒªáƒœáƒáƒ‘áƒ", "rr": "გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ regex წესების დáƒáƒ¬áƒ”რáƒáƒ“"},
"ko": {"dm": "ë‹¤í¬ ëª¨ë“œ", "sd": "디버깅 표시", "cm": "ê°ì‚¬ 취소", "ca": "ì• ë‹ˆë©”ì´ì…˜ 취소", "ab": "관하여", "si": "50ì´ˆ 간격 ê±´ì˜", "mi": "간격 ìˆ˜ì •", "cu": "ì—…ë°ì´íЏ 확ì¸", "cv": "현재 ë²„ì „", "dl": "ìµœì‹ ë²„ì „ 찾기", "lv": "ìµœì‹ ë²„ì „ìž…ë‹ˆë‹¤.", "cc": "대화 ë³µì œ", "pp": "페ì´ì§€ ì •í™”", "ls": "í° í™”ë©´ 표시", "fs": "ì „ì²´ 화면 표시", "sc": "ì™„ì „ížˆ ë§í•˜ì„¸ìš”", "it": "ì¶”ì 가로채기", "ec": "ëŠìž„없는 변화", "ap": "ê°ì‚¬", "wn": "ê²½ê³ ", "ds": "ë°ì´í„° 보안", "dd": "민ê°í•œ ë°ì´í„° 발견", "rr": "ì •ê·œ 표현ì‹ì„ 사용하여 규칙 작성"},
"nb": {"dm": "Mørk modus", "sd": "Vis feilsøking", "cm": "Avbryt revisjonen", "ca": "Avbryt animasjon", "ab": "Om", "si": "Forslag om et intervall på 50 sekunder", "mi": "Endre intervall", "cu": "Sjekk etter oppdateringer", "cc": "Klon samtalen", "pp": "Rens side", "ls": "Vis stor skjerm", "fs": "Vis i fullskjerm", "sc": "Snakk fullstendig", "it": "Intercept sporing", "ec": "Kontinuerlig endring", "ap": "Verdsatt", "wn": "Advarsel", "ds": "Datasikkerhet", "dd": "Oppdage sensitiv data", "rr": "Bruk regex for å skrive regler"},
"nl": {"dm": "Donkere modus", "sd": "Foutopsporing weergeven", "cm": "Controle annuleren", "ca": "Animatie annuleren", "ab": "Over", "si": "Stel een interval van 50 seconden voor", "mi": "Interval wijzigen", "cu": "Controleren op updates", "cc": "Gesprek klonen", "pp": "Pagina zuiveren", "ls": "Groot scherm weergeven", "fs": "Volledig scherm weergeven", "sc": "Spreek volledig uit", "it": "Onderscheppen van tracking", "ec": "Voortdurende verandering", "ap": "Waardering", "wn": "Waarschuwing", "ds": "Gegevensbeveiliging", "dd": "Gevoelige gegevens ontdekken", "rr": "Gebruik regex om regels te schrijven"},
"pl": {"dm": "Tryb ciemny", "sd": "Pokaż debugowanie", "cm": "Anuluj audyt", "ca": "Anuluj animację", "ab": "O", "si": "Zasugeruj interwał 50 sekund", "mi": "Zmień interwał", "cu": "Sprawdź aktualizacje", "cc": "Klonuj rozmowę", "pp": "Oczyść stronę", "ls": "Wyświetl duży ekran", "fs": "Wyświetl pełny ekran", "sc": "Mów całkowicie", "it": "Przechwytywanie śledzenia", "ec": "Ciągłe zmiany", "ap": "Docenienie", "wn": "Ostrzeżenie", "ds": "Bezpieczeństwo danych", "dd": "Wykrywanie wrażliwych danych", "rr": "Użyj regex do pisania reguł"},
"pt-BR": {"dm": "Modo escuro", "sd": "Mostrar depuração", "cm": "Cancelar auditoria", "ca": "Cancelar animação", "ab": "Sobre", "si": "Sugira um intervalo de 50 segundos", "mi": "Modificar intervalo", "cu": "Verificar atualizações", "cc": "Clonar conversa", "pp": "Purificar página", "ls": "Exibir tela grande", "fs": "Exibir em tela cheia", "sc": "Fale completamente", "it": "Interceptar Rastreamento", "ec": "Mudança constante", "ap": "Apreciação", "wn": "Aviso", "ds": "Segurança de dados", "dd": "Descobrir dados sensÃveis", "rr": "Use regex para escrever regras"},
"ro": {"dm": "Mod întunecat", "sd": "Afișare depanare", "cm": "Anulare audit", "ca": "Anulare animație", "ab": "Despre", "si": "Sugerați un interval de 50 secunde", "mi": "Modificați intervalul", "cu": "Verifică actualizări", "cc": "Clonează conversația", "pp": "Purificare pagină", "ls": "Afișare ecran mare", "fs": "Afișare pe tot ecranul", "sc": "Vorbiți complet", "it": "Interceptarea urmăririi", "ec": "Schimbare continuă", "ap": "Apreciere", "wn": "Avertizare", "ds": "Securitatea datelor", "dd": "Descoperirea datelor sensibile", "rr": "Folosiți regex pentru a scrie reguli"},
"ru": {"dm": "Темный режим", "sd": "Показать отладку", "cm": "Отменить аудит", "ca": "Отменить анимацию", "ab": "О", "si": "Предложить интервал в 50 Ñекунд", "mi": "Изменить интервал", "cu": "Проверить обновлениÑ", "cc": "Клонировать диалог", "pp": "ОчиÑтить Ñтраницу", "ls": "Показать большой Ñкран", "fs": "Показать на полный Ñкран", "sc": "Говорите полноÑтью", "it": "Перехват отÑлеживаниÑ", "ec": "ПоÑтоÑнное изменение", "ap": "ПризнательноÑть", "wn": "Предупреждение", "ds": "БезопаÑноÑть данных", "dd": "Обнаружение конфиденциальных данных", "rr": "ИÑпользуйте регулÑрные Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»"},
"sk": {"dm": "Tmavý režim", "sd": "ZobraziÅ¥ ladenie", "cm": "ZruÅ¡iÅ¥ audit", "ca": "ZruÅ¡iÅ¥ animáciu", "ab": "O", "si": "Navrhnúť interval 50 sekúnd", "mi": "Zmena intervalu", "cu": "Kontrola aktualizáciÃ", "cc": "KlonovaÅ¥ konverzáciu", "pp": "OÄistiÅ¥ stránku", "ls": "ZobraziÅ¥ veľkú obrazovku", "fs": "ZobraziÅ¥ na celú obrazovku", "sc": "Hovorte úplne", "it": "Zachytenie sledovania", "ec": "Neustále sa meniace", "ap": "Ocenenie", "wn": "Varovanie", "ds": "BezpeÄnosÅ¥ údajov", "dd": "Objavenie citlivých dát", "rr": "Použite regex na pÃsanie pravidiel"},
"sr": {"dm": "Тамни режим", "sd": "Прикажи отклањање грешака", "cm": "Откажи ревизију", "ca": "Откажи анимацију", "ab": "О", "si": "Predložiti interval od 50 sekundi", "mi": "Измена интервала", "cu": "Provera ažuriranja", "cc": "Клонирај разговор", "pp": "ПрочиÑти Ñтраницу", "ls": "Прикажи велики екран", "fs": "Прикажи на целом екрану", "sc": "Говорите у потпуноÑти", "it": "ПреÑретање праћења", "ec": "ÐепреÑтана промена", "ap": "Поштовање", "wn": "Упозорење", "ds": "СигурноÑÑ‚ података", "dd": "Откривање оÑетљивих података", "rr": "КориÑтите регуларне изразе за пиÑање правила"},
"sv": {"dm": "Mörkt läge", "sd": "Visa felsökning", "cm": "Avbryt revision", "ca": "Avbryt animation", "ab": "Om", "si": "Föreslå intervall på 50 sekunder", "mi": "Ändra intervall", "cu": "Kontrollera uppdateringar", "cc": "Klonar samtal", "pp": "Rensa sidan", "ls": "Visa stor skärm", "fs": "Visa i helskärm", "sc": "Tala helt klart", "it": "Interceptera spårning", "ec": "Ständig förändring", "ap": "Uppskattning", "wn": "Varning", "ds": "Datasäkerhet", "dd": "Upptäcka känslig data", "rr": "Använd regex för att skriva regler"},
"th": {"dm": "โหมดมืด", "sd": "à¹à¸ªà¸”งà¸à¸²à¸£à¹à¸à¹‰à¹„ขข้à¸à¸œà¸´à¸”พลาด", "cm": "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•รวจสà¸à¸š", "ca": "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¹„หว", "ab": "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š", "si": "เสนà¸à¸Šà¹ˆà¸§à¸‡à¹€à¸§à¸¥à¸² 50 วินาที", "mi": "à¹à¸à¹‰à¹„ขระยะห่าง", "cu": "ตรวจสà¸à¸šà¸à¸²à¸£à¸à¸±à¸›à¹€à¸”ต", "cc": "โคลนสนทนา", "pp": "ทำความสะà¸à¸²à¸”หน้า", "ls": "à¹à¸ªà¸”งหน้าจà¸à¹ƒà¸«à¸à¹ˆ", "fs": "à¹à¸ªà¸”งà¹à¸šà¸šà¹€à¸•็มหน้าจà¸", "sc": "พูดคุยให้เสร็จสิ้น", "it": "à¸à¸²à¸£à¸”ัà¸à¸ˆà¸±à¸šà¸à¸²à¸£à¸•ิดตาม", "ec": "à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸•ลà¸à¸”เวลา", "ap": "à¸à¸²à¸£à¸›à¸£à¸°à¹€à¸¡à¸´à¸™à¸„่า", "wn": "คำเตืà¸à¸™", "ds": "ความปลà¸à¸”ภัยขà¸à¸‡à¸‚้à¸à¸¡à¸¹à¸¥", "dd": "ค้นพบข้à¸à¸¡à¸¹à¸¥à¸—ี่ละเà¸à¸µà¸¢à¸”à¸à¹ˆà¸à¸™", "rr": "ใช้ regex เพื่à¸à¹€à¸‚ียนà¸à¸Ž"},
"tr": {"dm": "Karanlık mod", "sd": "Hata ayıklama göster", "cm": "Denetimi İptal Et", "ca": "Animasyonu iptal et", "ab": "Hakkında", "si": "50 saniyelik aralık önerin", "mi": "Aralığı değiştir", "cu": "Güncelleştirmeleri kontrol et", "cc": "Sohbeti kopyala", "pp": "Sayfayı temizle", "ls": "Büyük ekranı görüntüle", "fs": "Tam ekran görüntüle", "sc": "Tamamlayın konuşmayı", "it": "İzlemeyi Engellemek", "ec": "Sürekli değişim", "ap": "Takdir", "wn": "Uyarı", "ds": "Veri güvenliği", "dd": "Hassas verileri keşfetmek", "rr": "Kuralları yazmak için regex kullanın"},
"uk": {"dm": "Темний режим", "sd": "Показати налагодженнÑ", "cm": "СкаÑувати аудит", "ca": "СкаÑувати анімацію", "ab": "Про", "si": "Запропонуйте інтервал у 50 Ñекунд", "mi": "Змінити інтервал", "cu": "Перевірити оновленнÑ", "cc": "Клонувати діалог", "pp": "ОчиÑтити Ñторінку", "ls": "Відобразити великий екран", "fs": "Показати на повний екран", "sc": "Говоріть повніÑтю", "it": "ÐŸÐµÑ€ÐµÑ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÑтеженнÑ", "ec": "ПоÑтійна зміна", "ap": "ВдÑчніÑть", "wn": "ПопередженнÑ", "ds": "Безпека даних", "dd": "ВиÑÐ²Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð´ÐµÐ½Ñ†Ñ–Ð¹Ð½Ð¸Ñ… даних", "rr": "ВикориÑтовуйте регулÑрні вирази Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»"},
"ug": {"dm": "تÛما كۆرسىتىش", "sd": "كۆرسەتكەن يۇقىرىلاش", "cm": "ئەمەلدىن قالدۇرۇش", "ca": "ئÛنىماتىكىنى بىكار قىلىش", "ab": "ئۇچۇرلىق", "si": "50 سىكونتلىك ئارىلىقنى سۇنۇشتۇرۇش", "mi": "ئارىلىق ئۆزگەرتىش", "cu": "ÙŠÛÚىلانما كۆزەت", "cc": "ÙƒÛ†Ù¾Ú†Û•ÙŠ ئىككىلىش", "pp": "چۈشۈرۈش بەت", "ls": "كۆرسىتىش Ú†ÙˆÚ Ø¦Ûكران", "fs": "تولانما پۈتۈن ئÛكران", "sc": "تاماملا سۆزلىشىÚىز", "it": "قولايلىنىش تىزىتكۈن", "ec": "ØªÛ•ÚØ´Û•Ùƒ ئىستىقامەت", "ap": "قىلىش", "wn": "ئاگاھلاندۇرۇش", "ds": "مەلۇمات بىخەتەرلىكى", "dd": "سىزىقلىق مەلۇماتنى تاپشۇرۇش", "rr": "قائىدىلەرنى ÙŠÛØ²Ù‰Ø´ ئۈچۈن regex نى ئىشلىتىÚ"},
"vi": {"dm": "Chế độ tối", "sd": "Hiển thị gỡ lá»—i", "cm": "Há»§y đánh giá", "ca": "Há»§y hoạt hình", "ab": "Vá»", "si": "Äá» xuất khoảng thá»i gian 50 giây", "mi": "Sá»a khoảng cách", "cu": "Kiểm tra cáºp nháºt", "cc": "Sao chép cuá»™c trò chuyện", "pp": "Là m sạch trang", "ls": "Hiển thị mà n hình lá»›n", "fs": "Hiển thị toà n mà n hình", "sc": "Nói đầy đủ", "it": "Chặn Theo Dõi", "ec": "Luôn thay đổi", "ap": "Äánh giá", "wn": "Cảnh báo", "ds": "Bảo máºt dữ liệu", "dd": "Phát hiện dữ liệu nhạy cảm", "rr": "Sá» dụng regex để viết quy tắc"},
"zh-CN": {"dm": "暗色主题", "sd": "显示调试", "cm": "å–æ¶ˆå®¡è®¡", "ca": "å–æ¶ˆåŠ¨ç”»", "ab": "关于", "si": "建议间隔50秒以上,作者平时设置的是900ç§’", "mi": "调整间隔", "cu": "检查更新", "cc": "克隆对è¯", "pp": "净化页é¢", "ls": "展示大å±", "fs": "展示全å±", "sc": "è¨€æ— ä¸å°½", "it": "拦截跟踪", "ec": "日新月异", "ap": "赞èµé¼“励", "wn": "è¦å‘Š", "ds": "æ•°æ®å®‰å…¨", "dd": "ä½ è¾“å…¥çš„å†…å®¹é‡Œå˜åœ¨ä»¥ä¸‹æ•感数æ®ï¼Œå·²ä¸ºä½ 自动化脱æ•", "rr": "本功能会将èŠå¤©è¾“å…¥æ¡†é‡Œçš„æ•æ„Ÿä¿¡æ¯è¿›è¡Œè„±æ•å’Œè¦å‘Š<br>è¯·æ ¹æ®æ£åˆ™è¡¨è¾¾å¼è¯æ³•编写数æ®å®‰å…¨è§„则,ä¸åŒçš„规则用æ¢è¡Œé—´éš”"},
"zh-TW": {"dm": "暗黑模å¼", "sd": "顯示調試", "cm": "å–æ¶ˆç¨½æ ¸", "ca": "å–æ¶ˆå‹•ç•«", "ab": "關於", "si": "建è°é–“éš”50秒,作者平時è¨ç½®çš„æ˜¯900ç§’", "mi": "調整間隔", "cu": "檢查更新", "cc": "複製å°è©±", "pp": "淨化é é¢", "ls": "顯示大螢幕", "fs": "顯示全螢幕", "sc": "言無ä¸ç›¡", "it": "拦截追踪", "ec": "日新月異", "ap": "讚賞鼓勵", "wn": "è¦å‘Š", "ds": "資料安全", "dd": "ç™¼ç¾æ•感數據", "rr": "使用æ£å‰‡è¡¨é”弿’°å¯«è¦å‰‡"}
}
}
`;
lang = JSON.parse(lang);
for(let k in lang.local){
if (k.length > 2 && !(k.slice(0, 2) in lang.local)) {
lang.local[k.slice(0, 2)] = lang.local[k];
}
}
const nls = navigator.languages;
let language = "zh-CN";
for (let j = 0; j < nls.length; j++) {
let nl = nls[j];
if (nl in lang.local) {
language = nl;
break;
} else if (nl.length > 2 && nl.slice(0, 2) in lang.local) {
language = nl.slice(0, 2);
break;
}
}
//language = "en"; //Debug English
return [lang.index, lang.local[language], language];
};
const [langIndex, langLocal, language] = getLang();
const tl = function(s) {
let r;
try {
const i = langIndex[s];
r = langLocal[i];
} catch (e) {
r = s;
}
if (r === undefined) {r = s;}
return r;
};
const sv = function(key, value = "") {
GM_setValue(key, value);
};
const gv = function(key, value = "") {
return GM_getValue(key, value);
};
class IndexedDB {
constructor(dbName, storeName) {
this.dbName = dbName;
this.storeName = storeName;
}
async open() {
return new Promise((resolve, reject) => {
const openRequest = indexedDB.open(this.dbName, 1);
openRequest.onupgradeneeded = function(e) {
const db = e.target.result;
console.log(db.objectStoreNames, this.storeName);
if (!db.objectStoreNames.contains(this.storeName)) {
const objectStore = db.createObjectStore(this.storeName, {keyPath: 'id'});
objectStore.createIndex('name', 'name', {unique: false});
}
}.bind(this);
openRequest.onsuccess = function(e) {
const db = e.target.result;
resolve(db);
};
openRequest.onerror = function(e) {
reject('Error opening db');
};
});
}
async operate(operation, item) {
const db = await this.open();
return new Promise((resolve, reject) => {
const tx = db.transaction(this.storeName, 'readwrite');
const store = tx.objectStore(this.storeName);
let request;
switch(operation) {
case 'add':
request = store.add(item);
break;
case 'put':
request = store.put(item);
break;
case 'delete':
request = store.delete(item.id);
break;
default:
db.close();
reject('Invalid operation');
return;
}
request.onsuccess = function() {
resolve(request.result);
};
request.onerror = function() {
reject('Error', request.error);
};
tx.oncomplete = function() {
db.close();
};
});
}
async operate_get(id) {
const db = await this.open();
return new Promise((resolve, reject) => {
const tx = db.transaction(this.storeName, 'readonly');
const store = tx.objectStore(this.storeName);
const request = store.get(id);
request.onsuccess = function() {
resolve(request.result);
};
request.onerror = function() {
reject('Error', request.error);
};
tx.oncomplete = function() {
db.close();
};
});
}
async store() {
const db = await this.open();
const tx = db.transaction(this.storeName, 'readonly');
const store = tx.objectStore(this.storeName);
return store;
}
async get(id) {
return await this.operate_get(id);
}
async add(item) {
return await this.operate('add', item);
}
async put(item) {
return await this.operate('put', item);
}
async delete(item) {
return await this.operate('delete', item);
}
};
const formatDate = function(d) {
return (new Date(d)).toLocaleString();
};
const formatDate2 = function(dt) {
const [Y, M, D, h, m, s] = [dt.getFullYear(), dt.getMonth() + 1, dt.getDate(), dt.getHours(), dt.getMinutes(), dt.getSeconds()].map(el => el.toString().padStart(2, '0'));
const dtTmp = dt.toLocaleDateString();
const currentDate = new Date();
const currentDateTmp = currentDate.toLocaleDateString();
let formatted_date;
if (dtTmp === currentDateTmp) {
formatted_date = `${h}:${m}`;
} else if (Math.floor(Math.abs((new Date(dtTmp)) - (new Date(currentDateTmp))) / (24 * 60 * 60 * 1000)) < 7) {
const weekday = language.slice(0, 2) === "zh" ? ['周日', '周一', '周二', '周三', '周四', '周五', '周å…'] : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
formatted_date = weekday[dt.getDay()];
} else {
formatted_date = `${M}/${D}`;
}
return formatted_date;
}
const formatJson = function(d) {
try {
const j = JSON.parse(d);
return `<pre>${JSON.stringify(j, null, 2)}</pre>`;
} catch (e) {
return d;
}
};
const htmlEncode = function(text) {
var tempElement = document.createElement("div");
var textNode = document.createTextNode(text);
tempElement.appendChild(textNode);
return tempElement.innerHTML;
}
const setIfr = function(u = "") {
if ($("#xcanwin") === null) {
const nIfr = document.createElement('iframe');
nIfr.id = "127HUB";
nIfr.style = `height: 80px; width: 100%; display: none;`;
if (gv("k_showDebug", false) === true) {
nIfr.style.display = '';
} else {
nIfr.style.display = 'none';
}
if (u) {
nIfr.src = u;
}
nIfr.onload = function() {
const nIfrText = $("#127HUB").contentWindow.document.documentElement.innerText;
try {
$("#127HUB").contentWindow.document.documentElement.style = `background: #FCF3CF; height: 360px; width: 1080px; overflow; auto;`;
if (nIfrText.indexOf(`"expires":"`) > -1) {
console.log(`KeepChatGPT: IFRAME: Expire date: ${formatDate(JSON.parse(nIfrText).expires)}`);
$("#127HUB").contentWindow.document.documentElement.innerHTML = formatJson(nIfrText);
} else if (nIfrText.match(/Please stand by|while we are checking your browser|Please turn JavaScript on|Please enable Cookies|reload the page/)) {
console.log(`KeepChatGPT: IFRAME: BypassCF`);
}
} catch (e) {
console.log(`KeepChatGPT: IFRAME: ERROR: ${e},\nERROR RESPONSE:\n${nIfrText}`);
}
};
$("main").lastElementChild.appendChild(nIfr);
} else{
if (u) {
$("#xcanwin").src = u;
}
}
};
const keepChat = function() {
fetch(u).then((response) => {
response.text().then((data) => {
try {
const contentType = response.headers.get('Content-Type');
if (contentType.indexOf("application/json") > -1 && response.status !== 403 && data.indexOf(`"expires":"`) > -1) {
console.log(`KeepChatGPT: FETCH: Expire date: ${formatDate(JSON.parse(data).expires)}`);
$("#xcanwin").contentWindow.document.documentElement.innerHTML = formatJson(data);
} else {
setIfr(u);
}
} catch (e) {
console.log(`KeepChatGPT: FETCH: ERROR: ${e},\nERROR RESPONSE:\n${data}`);
setIfr(u);
}
})
});
}
const ncheckbox = function() {
const nsvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
nsvg.setAttribute("viewBox", "0 0 100 30");
nsvg.classList.add("checkbutton");
nsvg.innerHTML = `<g fill="none" fill-rule="evenodd"><path fill="#E3E3E3" d="M0 15C0 6.716 6.716 0 15 0h14c8.284 0 15 6.716 15 15s-6.716 15-15 15H15C6.716 30 0 23.284 0 15z"/><circle fill="#FFF" cx="15" cy="15" r="13"/></g>`;
return nsvg.cloneNode(true);
};
const ndialog = function(title = 'KeepChatGPT', content = '', buttonvalue = 'OK', buttonfun = function(t) {return t;}, inputtype = 'br', inputvalue = '') {
const ndivalert = document.createElement('div');
ndivalert.setAttribute("class", "kdialog relative z-50");
ndivalert.innerHTML = `
<div class="fixed inset-0 bg-gray-300/70 dark:bg-gray-600/70"></div>
<div class="fixed inset-0 overflow-y-auto z-50" style="display: flex; justify-content: center; align-items: center;">
<div class="flex items-end justify-center min-h-full p-4 sm:items-center sm:p-0 text-center">
<div class="kdialogwin bg-white dark:bg-gray-900 rounded-lg sm:max-w-lg sm:p-6 text-left">
<div class="flex items-center justify-between">
<div class="kwidth" style="min-width: 15rem">
<div class="flex items-center justify-between">
<h3 class="dark:text-gray-200 text-gray-900 text-lg">${title}</h3>
<p class="kdialogclose" style="cursor: pointer; font-weight: bold; color: #aaa;">X</p>
</div>
<p class="dark:text-gray-100 mt-2 text-gray-500 text-sm" style="margin-bottom: 0.6rem;">${content}</p>
<div class="md:py-3 md:pl-4 border border-black/10 bg-white dark:border-gray-900/50 dark:text-white dark:bg-gray-700 rounded-md shadow-[0_0_10px_rgba(0,0,0,0.10)] dark:shadow-[0_0_15px_rgba(0,0,0,0.10)]">
<${inputtype} class="kdialoginput resize-none border-0 bg-transparent p-0 pr-7 focus:ring-0 focus-visible:ring-0 dark:bg-transparent" style="max-height: 12.5rem; height: 1.5rem; outline: none;" placeholder=""></${inputtype}>
</div>
</div>
</div>
<div class="flex sm:flex-row-reverse sm:mt-4"><button class="btn btn-neutral kdialogbtn">${buttonvalue}</button>
</div>
</div>
</div>
</div>
`;
if (inputtype === 'br') {
$(".kdialoginput", ndivalert).parentElement.style.display = 'none';
} else if (inputtype === 'img') {
$(".kdialoginput", ndivalert).src = inputvalue;
$(".kdialoginput", ndivalert).style = `max-height: 19rem; height: unset; display: block; margin: 0 auto;`;
$(".kdialogwin", ndivalert).style = `max-width: 37.5rem;`;
} else if (inputtype === 'textarea') {
$(".kdialoginput", ndivalert).value = inputvalue;
$(".kdialoginput", ndivalert).style = `max-height: 19rem; height: 10rem; display: block; margin: 0 auto; width: 100%; white-space: pre;`;
$(".kdialogwin", ndivalert).style = `max-width: 100%;`;
$(".kdialogwin .kwidth", ndivalert).style = `min-width: 28rem;`;
}else {
$(".kdialoginput", ndivalert).value = inputvalue;
}
$(".kdialogclose", ndivalert).onclick = function() {
ndivalert.remove();
};
$(".kdialogbtn", ndivalert).onclick = function() {
buttonfun(ndivalert);
$(".kdialogclose", ndivalert).onclick();
};
document.body.appendChild(ndivalert);
};
const loadMenu = function() {
if ($(".kmenu") !== null) {
return;
}
const ndivmenu = document.createElement('div');
ndivmenu.setAttribute("class", "kmenu");
ndivmenu.innerHTML = `
<ul>
<li id=nmenuid_af>${tl("调整间隔")}</li>
<li id=nmenuid_ds>${tl("æ•°æ®å®‰å…¨")}</li>
<li id=nmenuid_cm>${tl("å–æ¶ˆå®¡è®¡")}</li>
<li id=nmenuid_cc>${tl("克隆对è¯")}</li>
<li id=nmenuid_sc>${tl("è¨€æ— ä¸å°½")}</li>
<li id=nmenuid_pp>${tl("净化页é¢")}</li>
<li id=nmenuid_ls>${tl("展示大å±")}</li>
<li id=nmenuid_fs>${tl("展示全å±")}</li>
<li id=nmenuid_it>${tl("拦截跟踪")}</li>
<li id=nmenuid_ec>${tl("日新月异")}</li>
<li id=nmenuid_dm>${tl("暗色主题")}</li>
<li id=nmenuid_ca>${tl("å–æ¶ˆåŠ¨ç”»")}</li>
<li id=nmenuid_sd>${tl("显示调试")}</li>
<li id=nmenuid_cu>${tl("检查更新")}</li>
<li id=nmenuid_ap>${tl("赞èµé¼“励")}</li>
<li id=nmenuid_ab>${tl("关于")}</li>
</ul>
`;
document.body.appendChild(ndivmenu);
$('#nmenuid_sd').appendChild(ncheckbox());
$('#nmenuid_dm').appendChild(ncheckbox());
$('#nmenuid_ca').appendChild(ncheckbox());
$('#nmenuid_cm').appendChild(ncheckbox());
$('#nmenuid_cc').appendChild(ncheckbox());
$('#nmenuid_pp').appendChild(ncheckbox());
$('#nmenuid_ls').appendChild(ncheckbox());
$('#nmenuid_fs').appendChild(ncheckbox());
$('#nmenuid_sc').appendChild(ncheckbox());
$('#nmenuid_it').appendChild(ncheckbox());
$('#nmenuid_ec').appendChild(ncheckbox());
$('#nmenuid_ds').onclick = function() {
toggleMenu('hide');
ndialog(`${tl("æ•°æ®å®‰å…¨")}`, `${tl("使用æ£åˆ™ç¼–写规则")}`, `Save`, function(t) {
let datasecblocklist;
try {
datasecblocklist = `${$(".kdialoginput", t).value}\n`.replace(/\r/g,`\n`).replace(/\n+/g, `\n`);
} catch (e) {
datasecblocklist = gv("k_datasecblocklist", datasec_blocklist_default);
}
sv("k_datasecblocklist", datasecblocklist);
}, `textarea`, gv("k_datasecblocklist", datasec_blocklist_default));
};
$('#nmenuid_sd').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
$('#xcanwin').style.display = 'none';
sv("k_showDebug", false);
} else {
$('#xcanwin').style.display = '';
sv("k_showDebug", true);
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_dm').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
$('#kcg').style = $('#kcg').styleOrigin;
sv("k_theme", "light");
} else {
$('#kcg').styleOrigin = $('#kcg').style;
$('#kcg').style.background = "#2C3E50";
$('#kcg').style.animation = "none";
$('#kcg').style.color = "#ffffff";
$('#kcg').style.marginRight = "inherit";
sv("k_theme", "dark");
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_ca').onclick = function() {
sv("k_cancelAnimation", !$('.checkbutton', this).classList.contains('checked'));
$('#kcg').classList.toggle('shine');
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_cm').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_closeModer", false);
} else {
sv("k_closeModer", true);
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_af').onclick = function() {
toggleMenu('hide');
ndialog(`${tl("调整间隔")}`, `${tl("建议间隔50秒")}`, `Go`, function(t) {
try {
interval2Time = parseInt($(".kdialoginput", t).value);
} catch (e) {
interval2Time = parseInt(gv("k_interval", 50));
}
if (interval2Time < 10) {
return;
}
clearInterval(nInterval2);
nInterval2 = setInterval(nInterval2Fun, 1000 * interval2Time);
sv("k_interval", interval2Time);
}, `input`, parseInt(gv("k_interval", 50)));
};
$('#nmenuid_cc').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_clonechat", false);
cloneChat(false);
} else {
sv("k_clonechat", true);
cloneChat(true);
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_pp').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_cleanlyhome", false);
} else {
sv("k_cleanlyhome", true);
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_ls').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_largescreen", false);
} else {
sv("k_largescreen", true);
}
$("#__next .overflow-hidden.w-full>div.overflow-hidden").classList.toggle('largescreen');
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_fs').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_fullscreen", false);
fullScreen(false);
} else {
sv("k_fullscreen", true);
fullScreen(true);
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_sc').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_speakcompletely", false);
} else {
sv("k_speakcompletely", true);
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_it').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_intercepttracking", false);
interceptTracking(false);
} else {
sv("k_intercepttracking", true);
interceptTracking(true);
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_ec').onclick = function() {
if ($('.checkbutton', this).classList.contains('checked')) {
sv("k_everchanging", false);
location.reload();
} else {
sv("k_everchanging", true);
$('nav.flex').classList.add('knav');
}
$('.checkbutton', this).classList.toggle('checked');
};
$('#nmenuid_cu').onclick = function() {
toggleMenu('hide');
checkForUpdates();
};
$('#nmenuid_ap').onclick = function() {
ndialog(`${tl("赞èµé¼“励")}`, `· æœ¬é¡¹ç›®æ²¡æœ‰ç ”å‘ç»è´¹ï¼Œä½†æ˜¯åŠŸèƒ½ç ”å‘ã€å‡çº§ã€BUGä¿®å¤éƒ½ä¼šæ¶ˆè€—很多个人时间ã€ç²¾åŠ›ï¼Œå¹¶ä¸”æœ‰ä¸å°‘æŠ€æœ¯ç ”ç©¶æˆæœ¬ã€‚<br>
<br>· å¦‚æžœä½ ä½“éªŒå®Œæœ¬é¡¹ç›®ä»¥åŽçœ‰å¼€çœ¼ç¬‘,觉得好用ï¼NBï¼ç¥žå™¨ï¼å¥½é¡ºç•…ï¼æ„Ÿè§‰å¾ˆæ£’ï¼NICEï¼
<br>· å¦‚æžœä½ è§‰å¾—æœ¬é¡¹ç›®æ‰“å¼€äº†ä½ è¿›å…¥AI世界的高速通é“
<br>· å¦‚æžœä½ å¸Œæœ›ä½œè€…çš„å°çŒ«åƒåˆ°æ›´å¥½çš„猫粮ã€çŒ«ç½å¤´
<br>· å¦‚æžœæœ¬é¡¹ç›®å¯¹ä½ æœ‰å¸®åŠ©
<br>· 如果本项目æé«˜äº†ä½ 工作效率
<br>· å¦‚æžœä½ å¸Œæœ›æœ¬é¡¹ç›®æŒç»ç»´æŠ¤ã€å‡çº§æ›´å¤šçš„功能
<br>· å¦‚æžœä½ å¸Œæœ›é¼“åŠ±ã€æ¿€åŠ±ä½œè€…æŠ•å…¥æ›´å¤šçš„æ—¶é—´ç²¾åŠ›æå‡é¡¹ç›®ï¼Œæ¬¢è¿Žå„使”¯æŒå’Œé¼“励本项目`, `更多鼓励方å¼`, function(t) {
window.open(`${GM_info.script.namespace}#赞èµ`, '_blank');
}, `img`, `https://github.com/xcanwin/KeepChatGPT/raw/main/assets/appreciate_wechat.png`);
};
$('#nmenuid_ab').onclick = function() {
window.open(GM_info.script.namespace, '_blank');
};
};
const setUserOptions = function() {
if (gv("k_showDebug", false) === true) {
$('#nmenuid_sd .checkbutton').classList.add('checked');
$('#xcanwin').style.display = '';
} else {
$('#xcanwin').style.display = 'none';
}
if (gv("k_theme", "light") === "light") {
$('#kcg').styleOrigin = $('#kcg').style;
} else {
$('#nmenuid_dm .checkbutton').classList.add('checked');
$('#kcg').style.background = "#2C3E50";
$('#kcg').style.animation = "none";
$('#kcg').style.color = "#ffffff";
$('#kcg').style.marginRight = "inherit";
}
if (gv("k_cancelAnimation", false) === true) {
$('#nmenuid_ca .checkbutton').classList.add('checked');
$('#kcg').classList.remove('shine');
} else {
$('#kcg').classList.add('shine');
}
if (gv("k_closeModer", false) === true) {
$('#nmenuid_cm .checkbutton').classList.add('checked');
}
if (gv("k_clonechat", false) === true) {
$('#nmenuid_cc .checkbutton').classList.add('checked');
cloneChat(true);
}
if (gv("k_cleanlyhome", false) === true) {
$('#nmenuid_pp .checkbutton').classList.add('checked');
}
if (gv("k_largescreen", false) === true) {
$('#nmenuid_ls .checkbutton').classList.add('checked');
$("#__next .overflow-hidden.w-full>div.overflow-hidden").classList.toggle('largescreen');
}
if (gv("k_fullscreen", false) === true) {
$('#nmenuid_fs .checkbutton').classList.add('checked');
fullScreen(true);
}
if (gv("k_speakcompletely", false) === true) {
$('#nmenuid_sc .checkbutton').classList.add('checked');
}
if (gv("k_intercepttracking", false) === true) {
$('#nmenuid_it .checkbutton').classList.add('checked');
interceptTracking(true);
}
if (gv("k_everchanging", false) === true) {
$('#nmenuid_ec .checkbutton').classList.add('checked');
$('nav.flex').classList.add('knav');
}
};
const toggleMenu = function(action) {
const ndivmenu = $(".kmenu");
if (action === "show") {
ndivmenu.style.display = 'block';
if ($("#kcg")) {
ndivmenu.style.left = `${$("#kcg").getBoundingClientRect().right + 20}px`;
ndivmenu.style.top = `${$("#kcg").getBoundingClientRect().top}px`;
}
} else {
ndivmenu.style.display = 'none';
}
};
const loadKCG = function() {
let symbol_prt;
if ($("#kcg") !== null) {
return;
}
var kcg_html;
if (kcg_html !== undefined) {
if ($(symbol1_selector)) {
kcg_html.innerHTML = kcg_html._symbol1_innerHTML;
symbol_prt = findParent($(symbol1_selector), "nav.flex", 3);
} else if ($(symbol2_selector)) {
kcg_html.innerHTML = kcg_html._symbol2_innerHTML;
symbol_prt = findParent($(symbol2_selector), ".sticky", 2);
}
symbol_prt.insertBefore(kcg_html, symbol_prt.childNodes[0]);
return;
}
loadMenu();
setIfr(u);
const ndivkcg = document.createElement("div");
ndivkcg.id = "kcg";
ndivkcg.setAttribute("class", "kgold shine flex py-3 px-3 items-center gap-3 rounded-md text-sm mb-1 flex-shrink-0 border border-white/20");
const ndivmenu = $(".kmenu");
ndivkcg.onmouseover = ndivmenu.onmouseover = function() {
toggleMenu('show');
};
ndivkcg.onmouseleave = ndivmenu.onmouseleave = function() {
toggleMenu('hide');
};
ndivkcg.onclick = function() {
if (ndivmenu.style.display === 'none') {
toggleMenu('show');
} else {
toggleMenu('hide');
}
};
const icon = GM_info.script.icon ? GM_info.script.icon : `${GM_info.script.namespace}raw/main/assets/logo.svg`;
ndivkcg._symbol1_innerHTML = `<img src='${icon}' />Keep${ndivkcg.id.slice(1,2).toUpperCase()}hatGPT by x${ndivkcg.id.slice(1,2)}anwin`;
ndivkcg._symbol2_innerHTML = `Keep${ndivkcg.id.slice(1,2).toUpperCase()}hatGPT`;
if ($(symbol1_selector)) {
ndivkcg.innerHTML = ndivkcg._symbol1_innerHTML;
symbol_prt = findParent($(symbol1_selector), "nav.flex", 3);
} else if ($(symbol2_selector)) {
ndivkcg.innerHTML = ndivkcg._symbol2_innerHTML;
symbol_prt = findParent($(symbol2_selector), ".sticky", 2);
}
kcg_html = ndivkcg;
symbol_prt.insertBefore(kcg_html, symbol_prt.childNodes[0]);
addStyle();
setUserOptions();
};
const addStyle = function() {
GM_addStyle(`
.kgold {
color: #555;
background: linear-gradient(to top right, #F0B27A, #FDE184, #F0B27A);
animation: gradient 6s ease-in-out infinite;
position: relative;
overflow: hidden;
font-weight: bold;
user-select: none;
}
@keyframes gradient {
0%{background-color:#F0B27A;}
50%{background-color:#FDE184;}
100%{background-color:#F0B27A;}
}
.shine::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(
to bottom right,
rgba(255, 255, 255, 0.3),
rgba(255, 255, 255, 0.15),
rgba(255, 255, 255, 0)
);
transform: rotate(-45deg);
animation: shine 2.8s linear infinite;
}
@keyframes shine {
from {
transform: translateX(-50%) translateY(-50%) rotate(-45deg);
}
to {
transform: translateX(150%) translateY(150%) rotate(-45deg);
}
}
.kmenu {
background-color: #202123;
color: #FFFFFF;
border: 0.06rem solid #4D4D4F;
border-radius: 0.625rem;
box-shadow: 0 0.125rem 0.375rem rgba(0, 0, 0, 0.15);
display: none;
min-width: 12.5rem;
padding: 0.75rem 0;
position: absolute;
z-index: 1000;
}
.kmenu::before {
content: "";
position: absolute;
top: 0rem;
bottom: 0rem;
left: -6rem;
right: 0rem;
pointer-events: auto;
z-index: -1;
}
.kmenu::after {
content: "";
position: absolute;
top: 1rem;
left: -1.25rem;
border-style: solid;
border-width: 0.625rem 0.625rem 0.625rem 0.625rem;
border-color: transparent #202123 transparent transparent;
}
.kmenu li {
display: block;
padding: 0.5rem 1.5rem;
text-align: left;
user-select: none;
display: flex;
align-items: center;
}
.kmenu li:hover {
background-color: #273746;
cursor: pointer;
}
main div.items-end>div:first-child {
user-select: none;
max-width: 30px;
cursor: pointer;
}
nav {
position: relative;
}
.checkbutton {
height: 20px;
margin-left: auto;
margin-right: -35px;
padding-left: 10px;
}
.checkbutton:hover {
cursor: pointer;
}
.checked path {
fill: #30D158;
}
.checked circle {
transform: translateX(14px);
transition: transform 0.2s ease-in-out;
}
.largescreen .md\\:max-w-2xl, .largescreen .lg\\:max-w-xl, .largescreen .xl\\:max-w-3xl {
max-width: unset;
}
.largescreen .lg\\:px-0 {
padding-left: 25px;
padding-right: 50px;
}
@media (min-width:1024px) {
.largescreen form.stretch {
max-width: 85%;
}
}
.largescreen div.items-end>div.text-xs {
top: -20px;
left: -5px;
margin-left: unset;
-webkit-transform: unset;
transform: unset;
position: absolute;
}
.largescreen img {
width: 653px
}
.fullscreen {
max-width: 0px;
}
.btn-neutral {
cursor: pointer;
}
#new-chat-button + div, #expand-sidebar-bottom-button, #nav-toggle-button, #user-menu ~ div {
display: none !important;
max-height: 0 !important;
}
.navdate {
font-size: 0.75rem;
padding-right: 0.5rem;
}
nav.flex div.overflow-y-auto a.hover\\:pr-4 {
padding-right: unset;
}
nav.flex div.overflow-y-auto {
scrollbar-width: thin;
}
.gptm {
position: absolute;
top: 1.15rem;
left: 0.95rem;
font-size: 0.7rem;
font-weight: bold;
color: white;
}
.knav li::after {
content: "";
display: block;
height: 1px;
background: linear-gradient(to right, transparent, #5e5e5e, transparent);
}
#nmenuid_ap {
color: #00bf78;
}
nav.flex .transition-all {
position: unset;
}
.hide {
display: none;
}
`);
};
const hookFetch = function() {
unsafeWindow.fetch = new Proxy(fetch, {
apply: function (target, thisArg, argumentsList) {
const fetchReqUrl = argumentsList[0];
let fetchRsp;
try {
if (gv("k_closeModer", false) && fetchReqUrl.match('/backend-api/moderations(\\?|$)')) {
fetchRsp = Promise.resolve({
json: () => {return {}}
});
return fetchRsp;
} else if (gv("k_closeModer", false) && fetchReqUrl.match('/backend-api/conversation(\\?|$)')) {
const post_body = JSON.parse(argumentsList[1].body);
post_body.supports_modapi = false;
argumentsList[1].body = JSON.stringify(post_body);
} else if (gv("k_intercepttracking", false) && fetchReqUrl.match('sentry\.io|sentry_key=|widget\.intercom\.io|featuregates\.org|/v1/initialize|api-iam\.intercom\.io|/messenger/|nexus-websocket-a\.intercom\.io|statsigapi\.net|/rgstr|/v1/sdk_exception')) {
fetchRsp = Promise.resolve({
});
return fetchRsp;
}
} catch (e) {}
fetchRsp = target.apply(thisArg, argumentsList);
fetchRsp.then(response => {
let clonedResponse = response.clone();
clonedResponse.text().then(async fetchRspBody => {
const fetchRspHeaders = clonedResponse.headers;
if (fetchReqUrl.match('/api/auth/session(\\?|$)') && !global.st_ec) {
const email = JSON.parse(fetchRspBody).user.email;
global.st_ec = new IndexedDB(`KeepChatGPT_${email}`, 'conversations');
cacheEC();
} else if (gv("k_everchanging", false) === true && fetchReqUrl.match('/backend-api/conversations\\?.*offset=')) {
const b = JSON.parse(fetchRspBody).items;
b.forEach(async el => {
const update_time = new Date(el.update_time);
const ec_tmp = await global.st_ec.get(el.id) || {};
await global.st_ec.put({id: el.id, title: el.title, update_time: update_time, last: ec_tmp.last, model: ec_tmp.model});
});
setTimeout(function() {
cacheEC();
attachDate();
}, 300);
}
});
return clonedResponse;
}).catch(error => {});
return fetchRsp;
}
});
navigator.sendBeacon = function(url, data) {};
};
const everChanging = function() {
if (gv("k_everchanging", false) === true) {
if (!global.everChangingOnce) {
global.everChangingOnce = 1;
GM_addStyle(`nav.flex div.overflow-y-auto h3 {display: none;}`);
}
attachDate();
}
};
const attachDate = async function() {
if (!global.kec_object) return;
$$('nav.flex li a.group').forEach(el => {
const keyrf = Object.keys(el).find(key => key.startsWith("__reactFiber"));
const a_id = el[keyrf].return.return.memoizedProps.id;
const kec_obj_el = global.kec_object[a_id];
const title = kec_obj_el && kec_obj_el.title || "";
const update_time = kec_obj_el && kec_obj_el.update_time || "";
const last = kec_obj_el && kec_obj_el.last || "";
const model = kec_obj_el && kec_obj_el.model || "";
if (!title || !update_time) return;
if (!$('.navtitle', el) || !$('.navdate', el) || !$('.navlast', el)) {
const cdiv_old = $(`.overflow-hidden`, el);
cdiv_old.style.display = "none";
const cdiv_new = document.createElement("div");
cdiv_new.className = `flex-1 text-ellipsis overflow-hidden break-all relative`;
cdiv_new.innerHTML = `
<div style="max-height: unset; max-width: 70%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; position: absolute;" class="navtitle">
${title}
</div>
<div style="right: 0;position: absolute;color: grey;font-size: 0.71rem;" class="navdate">
${formatDate2(update_time)}
</div>
<br>
<div style="max-height: unset; max-width: 95%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: gray; font-size: 0.75rem;" class="navlast">
${htmlEncode(last)}
</div>
`;
el.insertBefore(cdiv_new, el.childNodes[1]);
} else if ($('.navtitle', el).innerHTML !== title || $('.navdate', el).innerHTML !== formatDate2(update_time) || $('.navlast', el).innerHTML !== last) {
$('.navtitle', el).innerHTML = title;
$('.navdate', el).innerHTML = formatDate2(update_time);
$('.navlast', el).innerHTML = htmlEncode(last);
}
if (model.match('gpt-4') && !$('.gptm', el)) {
$('svg:first-child', el).setAttribute("stroke", `#FF4CFF`);
$('svg:first-child', el).setAttribute("fill", `#FF4CFF`);
const ndiv = document.createElement("div");
ndiv.classList.add("gptm");
const gptab = {"gpt-4": "", "gpt-4-plugins": "p", "gpt-4-browsing": "w", "gpt-4-mobile": "m", "gpt-4-code-interpreter": "c"};
ndiv.innerHTML = gptab[model] || "";
el.insertBefore(ndiv, $('svg:first-child', el).nextSibling);
}
});
const sidebar_chat = $("nav.flex div.overflow-y-auto");
if (sidebar_chat) {
if (sidebar_chat.scrollHeight > sidebar_chat.clientHeight) {
sidebar_chat.classList.add("-mr-2");
} else {
sidebar_chat.classList.remove("-mr-2");
}
}
const crt_con_a = $('nav.flex li a.group.bg-gray-800');
let crt_con_id = "";
if (crt_con_a) {
const crt_con_a_keyrf = Object.keys(crt_con_a).find(key => key.startsWith("__reactFiber"));
crt_con_id = crt_con_a[crt_con_a_keyrf].return.return.memoizedProps.id;
}
const m = location.href.match('/c/(.*?)(\\?|$)');
const crt_con_id2 = m && m[1];
let crt_con_last = "";
let crt_con_model = "";
const crt_con_speak = $$("main .group.w-full");
const crt_con_speak_last = crt_con_speak && crt_con_speak[crt_con_speak.length - 1];
if (crt_con_id && crt_con_id2 && crt_con_id === crt_con_id2 && crt_con_speak_last) {
crt_con_last = $("div.text-base .markdown", crt_con_speak_last).innerText.trim().replace(/[\r\n]/g, ``).substr(0, 100);
const crt_con_a_keyrf2 = Object.keys(crt_con_speak_last).find(key => key.startsWith("__reactFiber"));
crt_con_model = crt_con_speak_last[crt_con_a_keyrf2].return.return.memoizedProps.currentModelId;
}
if (crt_con_id && global.kec_object[crt_con_id] && ((crt_con_last && global.kec_object[crt_con_id].last !== crt_con_last) || (crt_con_model && global.kec_object[crt_con_id].model !== crt_con_model))) {
global.kec_object[crt_con_id].last = crt_con_last;
global.kec_object[crt_con_id].model = crt_con_model;
const crt_st_ec = await global.st_ec.get(crt_con_id);
await global.st_ec.put({id: crt_con_id, title: crt_st_ec.title, update_time: crt_st_ec.update_time, last: crt_con_last, model: crt_con_model});
$('.navlast', crt_con_a).innerHTML = htmlEncode(crt_con_last);
}
};
const cacheEC = async function() {
if (!global.kec_object) global.kec_object = {};
let store = await global.st_ec.store();
let request = store.openCursor();
request.onsuccess = function(e) {
let cursor = e.target.result;
if (cursor) {
const id = cursor.value.id || "";
const title = cursor.value.title || "";
const update_time = cursor.value.update_time || "";
const last = cursor.value.last || "";
const model = cursor.value.model || "";
if (!global.kec_object[id]) {
global.kec_object[id] = {};
}
global.kec_object[id].title = title;
global.kec_object[id].update_time = update_time;
global.kec_object[id].last = last;
global.kec_object[id].model = model;
cursor.continue();
}
};
};
const verInt = function(vs) {
const vl = vs.split('.');
let vi = 0;
for (let i = 0; i < vl.length && i < 3; i++) {
vi += parseInt(vl[i]) * (1000 ** (2 - i));
}
return vi;
};
const checkForUpdates = function() {
const crv = GM_info.script.version;
let updateURL = GM_info.scriptUpdateURL || GM_info.script.updateURL || GM_info.script.downloadURL;
updateURL = `${updateURL}?t=${Date.now()}`;
fetch(updateURL, {
cache: 'no-cache'
}).then((response) => {
response.text().then((data) => {
const m = data.match(/@version\s+(\S+)/);
const ltv = m && m[1];
if (ltv && verInt(ltv) > verInt(crv)) {
ndialog(`${tl("检查更新")}`, `${tl("当å‰ç‰ˆæœ¬")}: ${crv}, ${tl("å‘现最新版")}: ${ltv}`, `UPDATE`, function(t) {
window.open(updateURL, '_blank');
});
} else {
ndialog(`${tl("检查更新")}`, `${tl("当å‰ç‰ˆæœ¬")}: ${crv}, ${tl("已是最新版")}`, `OK`);
}
});
}).catch(e => console.log(e));
};
const cloneChat = function(action) {
if (action === true) {
window.addEventListener('click', cloneChat.listen_Click);
} else {
window.removeEventListener('click', cloneChat.listen_Click);
}
};
cloneChat.listen_Click = function(event) {
const avatarSelector = "main div.items-end>div:first-child";
let avatarDiv;
if (event.target.matches(avatarSelector)) {
avatarDiv = event.target;
} else {
avatarDiv = findParent(event.target, avatarSelector);
}
if (avatarDiv) {
if ($('text', avatarDiv) && $('text', avatarDiv).innerHTML === "ChatGPT") {
$('text', avatarDiv).remove();
}
const content = findParent(avatarDiv, "div.text-base", 2).childNodes[1].innerText.trim();
$("form.stretch textarea").value = "";
$("form.stretch textarea").focus();
document.execCommand('insertText', false, content);
}
};
const cleanlyHome = function() {
if (location.href.match(/https:\/\/chat\.openai\.com\/\??/) && gv("k_cleanlyhome", false) === true) {
if ($("main h1") && $("main h1").innerText.match(/^ChatGPT(\nPLUS)?$/)) {
$("main h1").classList.add('text-gray-200');
const nSpan = document.createElement('span');
nSpan.className = 'bg-yellow-200 text-yellow-900 py-0.5 px-1.5 text-xs md:text-sm rounded-md uppercase';
nSpan.textContent = `KEEP`;
$("main h1").appendChild(nSpan);
}
if ($('form.stretch .grow .bottom-full')) {
$('form.stretch .grow .bottom-full').classList.add('hide');
}
if ($('main .underline') && $("main .underline").parentElement.innerText.match("produce inaccurate")) {
$("main .underline").parentElement.classList.add('hide');
}
const utp_svg = $(`nav.flex path[d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"]`);
if (utp_svg && findParent(utp_svg, `a`, 4)) {
findParent(utp_svg, `a`, 4).classList.add('hide');
}
}
};
const fullScreen = function(action) {
if (action === true) {
if ($("#kfull") === null || $('#kfull').style.display === "none") {
const ndivkfull = document.createElement("div");
ndivkfull.id = "kfull";
ndivkfull.setAttribute("class", "btn relative btn-neutral border-0 md:border");
ndivkfull.innerHTML = `KEEP`;
ndivkfull.onclick = function() {
sv("k_fullscreen", false);
fullScreen(false);
$('#nmenuid_fs .checkbutton').classList.toggle('checked');
};
const symbol3_selector = `form.stretch .justify-center`;
let nInterval3 = setInterval(() => {
if ($(symbol3_selector) && $(symbol2_selector) === null) {
if ($("#kfull") === null) {
$(symbol3_selector).insertBefore(ndivkfull, $(symbol3_selector).childNodes[0]);
} else if ($('#kfull') && $('#kfull').style.display === "none") {
$('#kfull').style.display = '';
}
$("#__next .overflow-hidden.w-full>div.overflow-x-hidden").classList.add('fullscreen');
clearInterval(nInterval3);
}
}, 300);
}
} else {
if ($('#kfull') && $('#kfull').style.display === "") {
$('#kfull').style.display = 'none';
}
if ($("#__next .overflow-hidden.w-full>div.overflow-x-hidden")) {
$("#__next .overflow-hidden.w-full>div.overflow-x-hidden").classList.remove('fullscreen');
}
}
};
const speakCompletely = function() {
if (gv("k_speakcompletely", false) === true) {
const continue_svg_selector = `form.stretch .justify-center polygon[points="11 19 2 12 11 5 11 19"]:not(.ct_clicked)`;
if ($(continue_svg_selector)) {
setTimeout(function() {
findParent($(continue_svg_selector), `button`).click();
$(continue_svg_selector).classList.add('ct_clicked');
}, 1000);
}
}
};
const dataSec = function() {
if (gv("k_datasecblocklist", datasec_blocklist_default)) {
$("form.stretch textarea").addEventListener('input', dataSec.listen_input);
} else {
$("form.stretch textarea").removeEventListener('input', dataSec.listen_input);
}
};
dataSec.listen_input = function(event) {
let ms = [];
gv("k_datasecblocklist", datasec_blocklist_default).split(`\n`).forEach(e => {
if (e) {
const m = $("form.stretch textarea").value.match(e);
if (m && m[0]) {
$("form.stretch textarea").value = $("form.stretch textarea").value.replaceAll(m[0], ``);
ms.push(m[0]);
}
}
});
if (ms.join(`\n`).trim()) {
ndialog(`âš ï¸${tl("è¦å‘Š")}`, `${tl("å‘çŽ°æ•æ„Ÿæ•°æ®")}`, `Thanks`, function(t) {}, `textarea`, ms.join(`\n`));
}
};
const interceptTracking = function(action) {
if (action === true) {
window.addEventListener('beforescriptexecute', interceptTracking.listen_beforescriptexecute);
} else {
window.removeEventListener('beforescriptexecute', interceptTracking.listen_beforescriptexecute);
}
};
interceptTracking.listen_beforescriptexecute = function(event) {
const scriptElement = event.target;
if (scriptElement.src.match('widget\.intercom\.io')) {
event.preventDefault();
scriptElement.textContent = ``;
scriptElement.remove();
}
};
const findParent = function(el, parentSelector, level = 5) {
if (el === null) {
return null;
}
let parent = el.parentNode;
let count = 1;
while (parent && count <= level) {
if (parent && parent.constructor !== HTMLDocument && parent.matches(parentSelector)) {
return parent;
}
parent = parent.parentNode;
count++;
}
return null;
};
$("body").onresize = function() {
if ($('#nmenuid_fs .checkbutton')) {
if (gv("k_fullscreen", false) === true) {
$('#nmenuid_fs .checkbutton').classList.add('checked');
fullScreen(true);
} else if (gv("k_fullscreen", false) === false) {
$('#nmenuid_fs .checkbutton').classList.remove('checked');
fullScreen(false);
}
}
};
const nInterval1Fun = function() {
if ($(symbol1_selector) || $(symbol2_selector)) {
loadKCG();
setIfr();
cleanlyHome();
speakCompletely();
everChanging();
dataSec();
}
};
const nInterval2Fun = function() {
if ($(symbol1_selector) || $(symbol2_selector)) {
keepChat();
}
};
hookFetch();
let nInterval1 = setInterval(nInterval1Fun, 300);
let interval2Time = parseInt(gv("k_interval", 50));
let nInterval2 = setInterval(nInterval2Fun, 1000 * interval2Time);
})();
-----------------------------------------------------------------------------



25%
: