ChatGPT Save Conversation

Save the conversation as a .txt file

// ==UserScript==
// @name                   ChatGPT Save Conversation
// @name:aa                ChatGPTam walala
// @name:ab                ЧатГПТ Аицәажәара еиқәырхатәуп
// @name:af                Chatgpt stoor gesprek
// @name:ak                Chatgpt Sie Nkɔmmɔbɔ .
// @name:am                የውይይት ማቆሚያ ውይይት
// @name:ar                chatgpt حفظ المحادثة
// @name:as                Chatgpt কথোপকথন সংৰক্ষণ কৰক
// @name:av                ЧатГПТ Сохранить разговор
// @name:ay                Chatgpt ukax mä aruskipäwiwa.
// @name:az                ChatGPT Saxla Səs-küyü
// @name:ba                ChatGPT әңгәмәләшеү әңгәмә
// @name:be                Чатгпт захаваць размову
// @name:bg                Chatgpt Запазете разговор
// @name:bh                chatgpt बातचीत के बचाईं
// @name:bm                Chatgpt ka baro kɛ .
// @name:bn                চ্যাটজিপ্ট কথোপকথন সংরক্ষণ করুন
// @name:bo                ChatGPT སྲུང་སྐྱོབ།
// @name:br                ChatGPT Enrollañ ar gaozeadenn
// @name:bs                Chatgpt Sačuvaj razgovor
// @name:ca                Chatgpt desar la conversa
// @name:ce                ChatGPT Save къамел
// @name:ceb               Pag-istoryahanay sa Chatgpt
// @name:ch                IGIGPT Sa’
// @name:ckb               Chatgpt
// @name:co                Conversazione di Salva di ChatGPT
// @name:cs                CHATGPT Uložit konverzaci
// @name:cv                ЧатГПТ çăлăнăр калаçăва
// @name:cy                Chatgpt sgwrsio sgwrs
// @name:da                ChatGpt Save Conversation
// @name:de                Chatgpt speichern Gespräch
// @name:dv                CHATGPT ސޭވް ކޮންވާޝަން
// @name:dz                ChatGPT བློ་སླབ་སྲུངས།
// @name:ee                Chatgpt Ðe Dzeɖoɖo Ðe Ðoɖo Nu .
// @name:el                Chatgpt Αποθήκευση συνομιλίας
// @name:en                ChatGPT Save conversation
// @name:en-GB             ChatGPT Save conversation
// @name:eo                Chatgpt Konversacio
// @name:es                Chatgpt guardar conversación
// @name:et                Chatgpt salvestage vestlus
// @name:eu                Chatgpt-ek elkarrizketa gordetzea
// @name:fa                chatgpt مکالمه را ذخیره کنید
// @name:ff                ChatGPT Hisnu yeewtere
// @name:fi                Chatgpt Tallenna keskustelu
// @name:fil               Chatgpt i -save ang pag -uusap
// @name:fj                Na veivosaki ni Veitalanoa .
// @name:fo                ChatGPT Goym samrøða
// @name:fr                Chatppt enregistrer la conversation
// @name:fr-CA             Chatppt enregistrer la conversation
// @name:fy                Chatgpt bewarje petear
// @name:ga                Comhrá a shábháil comhrá
// @name:gd                Còmhradh Sàbhail còmhradh
// @name:gl                Chatgpt gardar conversa
// @name:gn                CHATGPT Ñongatu Ñomongeta .
// @name:gsw-berne         ChatGPT Save conversation
// @name:gu                ચેટગપ્ટ વાતચીત સાચવો
// @name:gv                ChatGPT Save
// @name:ha                Chattgt Ajiye hira
// @name:he                צ’טגפט שמור שיחה
// @name:hi                बातचीत सहेजें बातचीत
// @name:hmn               Chatgpt txuag kev sib tham
// @name:hr                Chatgpt spremi razgovor
// @name:ht                Chatgpt sove konvèsasyon
// @name:hu                Chatgpt mentse meg a beszélgetést
// @name:hy                CHATGPT Պահպանել խոսակցությունը
// @name:id                Chatgpt simpan percakapan
// @name:ig                Chatgwa eche nchedo
// @name:is                Chatgpt vistaðu samtal
// @name:it                CHATGPT Salva la conversazione
// @name:iu                ChatGPT Save ᓴᓂᕐᕙᐃᓂᖅ ᐅᖃᖃᑎᒌᖕᓂᖅ
// @name:ja                Chatgpt会話を保存します
// @name:jv                ChatGPT nyimpen obrolan
// @name:ka                Chatgpt შეინახეთ საუბარი
// @name:kg                ChatGPT ya kubumba disolo
// @name:kk                ChatGPT Сөйлесуді сақтаңыз
// @name:kl                ChatGPT Save oqaloqatigiinneq
// @name:km                ជជែកកំសាន្តការសន្ទនា
// @name:kn                ಚಾಟ್ಜಿಪಿಟಿ ಸಂಭಾಷಣೆಯನ್ನು ಉಳಿಸಿ
// @name:ko                Chatgpt 대화를 저장하십시오
// @name:kr                Zande ChatGPTbe
// @name:ku                Chatgpt danûstendinê xilas bike
// @name:kv                ЧатГПТ Сохранить сёрни
// @name:ky                Чатгып сүйлөшүү
// @name:la                Chatgpt nisi conversationem
// @name:lb                ChatGPT späichert Gespréich
// @name:lg                CHATGPT Teeka Emboozi .
// @name:ln                ChatGpt Bomba masolo .
// @name:lo                ສົນທະນາສົນທະນາ
// @name:lt                Chatgpt išsaugoti pokalbį
// @name:lv                Chatgpt Saglabāt sarunu
// @name:mg                Chatgpt Save resaka
// @name:mh                Kōjparok chat .
// @name:mi                Checkgpt Tiaki Korero
// @name:mk                Chatgpt Зачувај разговор
// @name:ml                ചാറ്റ്ഗേറ്റ് സംരക്ഷിക്കുക സംഭാഷണം
// @name:mn                CHALGPT-ийг хадгалах
// @name:mo                Chatgpt Salvați conversația
// @name:mr                Chatgpt संभाषण जतन करा
// @name:ms                Chatgpt simpan perbualan
// @name:mt                Chatgpt ħlief konversazzjoni
// @name:my                chatgpt စကားပြောပါ
// @name:nb                Chatgpt Lagre samtale
// @name:ne                कुराकानी बचत कुराकानी
// @name:nl                Chatgpt opslaan gesprek
// @name:nr                Umbuzo wezinhlobo we .
// @name:ny                ChatGTT Sungani zokambirana
// @name:oc                ChatGPT Enregistrar la conversacion
// @name:om                Chatgpt haasawa qusadhaa .
// @name:or                କଥାବାର୍ତ୍ତା ବାର୍ତ୍ତାଳାପ ସେଭ୍ କରନ୍ତୁ |
// @name:os                ChatGPT æрæвæрут ныхас
// @name:pa                ਗੱਲਬਾਤ ਸੇਵ
// @name:pl                Chatgpt Zapisz rozmowę
// @name:ps                خبرې کول خبرې کول
// @name:pt                Chatgpt Save conversa
// @name:pt-BR             Chatgpt Save conversa
// @name:pt-PT             Chatgpt Save conversa
// @name:qu                Chatgpt Waqaychay rimanakuy .
// @name:rn                Ikiyago ca ChatGPT kiza
// @name:ro                Chatgpt Salvați conversația
// @name:ru                Chatgpt сохранить разговор
// @name:rw                Ikiganiro Uzigame Ibiganiro
// @name:sa                गपशपं वीक्षते सम्भाषणम् .
// @name:sd                چيٽنگ کي سلائي گفتگو
// @name:se                ChatGPT Save ságastallan
// @name:sg                ChatGPT Save lisoro .
// @name:sh                ЦхатГПТ Сачувај разговор
// @name:si                චැසනස් සංවාදය සුරකින්න
// @name:sk                Chatgpt uložiť konverzáciu
// @name:sl                Chatgpt shrani pogovor
// @name:sm                Talatalanoaga Savet talanoaga
// @name:sn                Chatgpt chengetedza hurukuro
// @name:so                Sheekada sheekada sheekada
// @name:sq                Chatgpt ruaj bisedën
// @name:sr                ЦхатГПТ Сачувај разговор
// @name:ss                ChatGPT Gcina ingcoco
// @name:st                Potoloho ea Polelo
// @name:su                ChatGPT ngahemat paguneman
// @name:sv                Chatgpt spara konversation
// @name:sw                Chatgpt Hifadhi mazungumzo
// @name:ta                சாட்ஜ்ட் உரையாடலைச் சேமிக்கவும்
// @name:te                చాట్‌గ్ప్ట్ సంభాషణను సేవ్ చేయండి
// @name:tg                Chatgpt сӯҳбатро сарфа кунед
// @name:th                CHATGPT บันทึกการสนทนา
// @name:ti                chatgpt ዕላል ኣድሕን
// @name:tk                Söhbet söhbetdeşligi tygşytlaň
// @name:tl                Chatgpt i -save ang pag -uusap
// @name:tn                ChatGPT Boloka motlotlo
// @name:to                ChatGPT Save talanoa
// @name:tr                Chatgpt Sohbeti Kaydet
// @name:ts                Chatgpt Hlayisa Mbulavurisano .
// @name:tt                Шатгпт сөйләшүне саклагыз
// @name:tw                Chatgpt Sie Nkɔmmɔbɔ .
// @name:ty                Te aparauraa ChatGPT
// @name:ug                پاراڭلىشىش سۆھبەتنى ساقلاش
// @name:uk                Чатгпт Зберегти розмову
// @name:ur                چیٹ جی پی ٹی گفتگو کو بچائیں
// @name:uz                Chatgpt suhbatni saqlang
// @name:ve                ChatGPT Kha nyambedzano Vhulunga
// @name:vi                Chatgpt Lưu trò chuyện
// @name:wo                ChatGPT Save
// @name:xh                Incoko ye-Chatgppt
// @name:yi                טשאַטגפּט היט שמועס
// @name:yo                Fipamọ ibaraẹnisọrọ
// @name:zh                ChatGPT 保存对话
// @name:zh-CN             ChatGPT 保存对话
// @name:zh-HK             ChatGPT 保存對話
// @name:zh-MO             ChatGPT 保存對話
// @name:zh-MY             ChatGPT 保存对话
// @name:zh-SG             ChatGPT 保存对话
// @name:zh-TW             ChatGPT 保存對話
// @name:zu                I-Chatgpt Gcina ingxoxo
// @name:es-419            Chatgpt guardar conversación
// @description            Save the conversation as a .txt file
// @description:aa         walal .txt faayilih innah
// @description:ab         Аицәажәара .txt фаилк аҳасабала еиқәырхатәуп
// @description:af         Stoor die gesprek as ’n .txt -lêer
// @description:ak         Fa nkɔmmɔbɔ no sie sɛ .txt fael .
// @description:am         ውይይቱን እንደ የ .Txt ፋይል ያስቀምጡ
// @description:ar         احفظ المحادثة كملف .txt
// @description:as         কথোপকথনক এটা .txt ফাইল হিচাপে সংৰক্ষণ কৰক
// @description:av         Хвасар гьабе гара-чӀвари .txt файл хӀисабалда
// @description:ay         Uka aruskipäwix .txt archiwjam imañamawa .
// @description:az         Söhbəti .txt faylı olaraq qeyd edin
// @description:ba         Һөйләшеүҙе .txt файлы булараҡ һаҡлау
// @description:be         Захавайце размову як файл .txt
// @description:bg         Запазете разговора като .txt файл
// @description:bh         बातचीत के .txt फाइल के रूप में सेव करीं
// @description:bm         Baro in mara i n’a fɔ .txt file .
// @description:bn         একটি .txt ফাইল হিসাবে কথোপকথনটি সংরক্ষণ করুন
// @description:bo         ཁ་བརྡ་དེ་.txtཡིག་ཆ་ལྟར་ཉར་ཚགས་བྱེད།
// @description:br         Enrollañ ar gaozeadenn evel ur restr .txt
// @description:bs         Spremite razgovor kao .txt datoteku
// @description:ca         Deseu la conversa com a fitxer .txt
// @description:ce         Къастаде къамел .txt файл санна .
// @description:ceb        I-save ang panag-istoryahanay ingon usa ka .txt File
// @description:ch         Guaha na biahi na i konbetsasion-ñiha gi .xy file .
// @description:ckb        گفتوگۆکە وەک فایلێکی .txt هەڵبگرە
// @description:co         Salvate a cunversazione cum’è un file .txt
// @description:cs         Uložit konverzaci jako soubor .txt
// @description:cv         Калаçăва .txt файл пек упрамалла
// @description:cy         Cadwch y sgwrs fel ffeil .txt
// @description:da         Gem samtalen som en .txt -fil
// @description:de         Speichern Sie die Konversation als .txt -Datei
// @description:dv         ވާހަކަ ދެއްކުން .txt ފައިލް އެއްގެ ގޮތުގައި ރައްކާކުރުން
// @description:dz         བློ་སླབ་འདི་ .txt ཡིག་སྣོད་སྦེ་སྲུང་བཞག་འབད།
// @description:ee         Dzra dzeɖoɖoa ɖo abe .txt faɛl ene .
// @description:el         Αποθηκεύστε τη συνομιλία ως αρχείο .txt
// @description:en         Save the conversation as a .txt file
// @description:en-GB      Save the conversation as a .txt file
// @description:eo         Konservu la konversacion kiel .txt -dosiero
// @description:es         Guarde la conversación como un archivo .txt
// @description:es-419     Guarde la conversación como un archivo .txt
// @description:et         Salvestage vestlus .txt -failina
// @description:eu         Gorde elkarrizketa .txt fitxategi gisa
// @description:fa         مکالمه را به عنوان یک پرونده .txt ذخیره کنید
// @description:ff         Hisnu yeewtere ndee ko fiilde .txt
// @description:fi         Tallenna keskustelu .txt -tiedostona
// @description:fil        I -save ang pag -uusap bilang isang .txt file
// @description:fj         Me vakayagataki na veivosaki me vaka e dua na faile .txt .
// @description:fo         Goym samrøðuna sum eina .txt fílu
// @description:fr         Enregistrer la conversation en tant que fichier .txt
// @description:fr-CA      Enregistrer la conversation en tant que fichier .txt
// @description:fy         Bewarje it petear as in .txt-bestân
// @description:ga         Sábháil an comhrá mar chomhad .txt
// @description:gd         Sàbhail an còmhradh mar fhaidhle .Txt
// @description:gl         Garda a conversa como ficheiro .txt
// @description:gn         Eñongatu pe ñomongeta peteĩ .txt rembiapokueicha .
// @description:gsw-berne  Save the conversation as a .txt file
// @description:gu         વાતચીતને .txt ફાઇલ તરીકે સાચવો
// @description:gv         Save y cho-chowrey myr .txt file
// @description:ha         Ajiye tattaunawar azaman fayil .txt fayil
// @description:he         שמור את השיחה כקובץ .txt
// @description:hi         एक .txt फ़ाइल के रूप में बातचीत को सहेजें
// @description:hmn        Txuag cov kev sib tham raws li a .tXt cov ntaub ntawv
// @description:hr         Spremite razgovor kao .txt datoteku
// @description:ht         Sove konvèsasyon an kòm yon dosye .txt
// @description:hu         Mentse el a beszélgetést .txt fájlként
// @description:hy         Խոսքը պահեք որպես .txt ֆայլ
// @description:id         Simpan percakapan sebagai file .txt
// @description:ig         Chekwaa mkparịta ụka dị ka faịlụ .txt
// @description:is         Vistaðu samtalið sem .txt skrá
// @description:it         Salva la conversazione come file .txt
// @description:iu         ᓴᓂᕐᕙᐃᓗᑎᑦ ᐅᖃᖃᑎᒌᒍᑎᒥᒃ .txt ᑎᑎᖅᑲᖁᑎᒥᒃ
// @description:ja         .txtファイルとして会話を保存します
// @description:jv         Simpen pacelathon minangka file .txt
// @description:ka         შეინახეთ საუბარი .txt ფაილი
// @description:kg         Lunda disolo bonso fichier .txt .
// @description:kk         Сөйлесуді .txt файлы ретінде сақтаңыз
// @description:kl         Oqaloqatigiinneq .txt-imik filimik sipaarniaruk
// @description:km         រក្សាទុកការសន្ទនាជាឯកសារ .txt
// @description:kn         ಸಂಭಾಷಣೆಯನ್ನು .txt ಫೈಲ್ ಆಗಿ ಉಳಿಸಿ
// @description:ko         대화를 .txt 파일로 저장하십시오
// @description:kr         Zandedəga .txt filero gənatə
// @description:ku         Gotûbêja wekî pelê .txt hilînin
// @description:kv         Сёрнисӧ видзӧй кыдзи .txt файл .
// @description:ky         Сүйлөшүүнү .txt файлы катары сактаңыз
// @description:la         Nisi colloquium ut a .txt lima
// @description:lb         Späichert d’Gespréich als .txt Datei
// @description:lg         Teeka emboozi nga fayiro ya .txt .
// @description:ln         Bomba lisolo lokola fisyé .txt .
// @description:lo         ບັນທຶກການສົນທະນາເປັນເອກະສານ .txt
// @description:lt         Išsaugokite pokalbį kaip .txt failą
// @description:lv         Saglabājiet sarunu kā .txt failu
// @description:mg         Tehirizo ny resaka ho rakitra. Kxt
// @description:mh         Kōjparok bwebwenato eo āinwōt juon file .
// @description:mi         Tiakina te korerorero hei tohu .txt
// @description:mk         Зачувајте го разговорот како датотека .txt
// @description:ml         സംഭാഷണം ഒരു .txt ഫയലായി സംരക്ഷിക്കുക
// @description:mn         Яриаг .txt файл болгон хадгал
// @description:mo         Salvați conversația ca fișier .txt
// @description:mr         संभाषण एक .txt फाईल म्हणून जतन करा
// @description:ms         Simpan perbualan sebagai fail .txt
// @description:mt         Issejvja l-konversazzjoni bħala fajl .txt
// @description:my         စကားဝိုင်းကို .txt ဖိုင်တစ်ခုအဖြစ်သိမ်းဆည်းပါ
// @description:nb         Lagre samtalen som en .txt -fil
// @description:ne         A.Txt फाईलको रूपमा कुराकानी बचत गर्नुहोस्
// @description:nl         Sla het gesprek op als een .txt -bestand
// @description:nr         Wahamba ubusuku umndeni.
// @description:ny         Sungani zokambirana monga .Txt fayilo
// @description:oc         Enregistratz la convèrsa coma un fichièr .txt .
// @description:om         Haasaa akka faayilii .txt tti saagi .
// @description:or         ବାର୍ତ୍ତାଳାପକୁ a .txt ଫାଇଲ୍ ଭାବରେ ସେଭ୍ କରନ୍ତୁ |
// @description:os         Ныхас .txt файлæй фервæзын кæнут.
// @description:pa         ਗੱਲਬਾਤ ਨੂੰ ਇੱਕ .txt ਫਾਈਲ ਦੇ ਤੌਰ ਤੇ ਸੁਰੱਖਿਅਤ ਕਰੋ
// @description:pl         Zapisz rozmowę jako plik .txt
// @description:ps         خبرې د .txt فایل په توګه خوندي کړئ
// @description:pt         Salve a conversa como um arquivo .txt
// @description:pt-BR      Salve a conversa como um arquivo .txt
// @description:pt-PT      Salve a conversa como um arquivo .txt
// @description:qu         Rimanakuyta .txt willañiqi hina waqaychay .
// @description:rn         Bika ikiyago nk’idosiye .txt
// @description:ro         Salvați conversația ca fișier .txt
// @description:ru         Сохраните разговор как файл .txt
// @description:rw         Bika ikiganiro nka dosiye .txt
// @description:sa         सम्भाषणं .txt सञ्चिकारूपेण रक्षन्तु ।
// @description:sd         گفتگو کي محفوظ ڪريو .txt فائل طور
// @description:se         Seastit ságastallama .txt-fiilan .
// @description:sg         Save lisoro ni tongana mbeni fichier .txt .
// @description:sh         Спремите разговор као .ткт датотеку
// @description:si         සංවාදය .txt ගොනුවක් ලෙස සුරකින්න
// @description:sk         Uložte konverzáciu ako súbor .txt
// @description:sl         Shranite pogovor kot datoteko .txt
// @description:sm         Sefe le talanoaga o se .txt faila
// @description:sn         Sevha iyo hurukuro seye .txt faira
// @description:so         Kaydi wada hadalka sida faylka .txt
// @description:sq         Ruani bisedën si një skedar .txt
// @description:sr         Спремите разговор као .ткт датотеку
// @description:ss         Gcina ingcoco njengefayela le-.txt
// @description:st         Boloka moqoqo joalo ka faele ea .TXT
// @description:su         Simpen paguneman salaku file .txt
// @description:sv         Spara konversationen som en .txt -fil
// @description:sw         Hifadhi mazungumzo kama faili ya .txt
// @description:ta         உரையாடலை .txt கோப்பாக சேமிக்கவும்
// @description:te         సంభాషణను .txt ఫైల్‌గా సేవ్ చేయండి
// @description:tg         Сӯҳбатро ҳамчун файли .txt захира кунед
// @description:th         บันทึกการสนทนาเป็นไฟล์. txt
// @description:ti         ነቲ ዕላል ከም .txt ፋይል ኣቐምጦ .
// @description:tk         Söhbetdeşligi .txt faýly hökmünde tygşytlaň
// @description:tl         I -save ang pag -uusap bilang isang .txt file
// @description:tn         Boloka motlotlo jaaka faele ya .txt
// @description:to         Fakahaofi ’a e talanoa ko ha faile .txt .
// @description:tr         Konuşmayı bir .txt dosyası olarak kaydedin
// @description:ts         Hlayisa mbulavurisano tanihi fayili ya .TXT .
// @description:tt         Сөйләшүне .txt файл итеп саклагыз
// @description:tw         Fa nkɔmmɔbɔ no sie sɛ .txt fael .
// @description:ty         A faanaho i te aparauraa mai te hoê kōnae .txt
// @description:ug         سۆھبەتنى بىردەك ساقلاش .txt ھۆججىتى سۈپىتىدە ساقلاڭ
// @description:uk         Збережіть розмову як файл .txt
// @description:ur         گفتگو کو .txt فائل کے بطور محفوظ کریں
// @description:uz         Suhbatni .Txt fayli sifatida saqlang
// @description:ve         Vhulungani nyambedzano sa faela ya .txt
// @description:vi         Lưu cuộc trò chuyện dưới dạng tệp .txt
// @description:wo         Jox waxtaan wi ni fichier .txt
// @description:xh         Gcina incoko njenge-.txt yefayile
// @description:yi         היט דעם שמועס ווי אַ. טקסט טעקע
// @description:yo         Ṣafipamọ ibaraẹnisọrọ bi faili .txt kan
// @description:zh         将对话保存为 .txt 文件
// @description:zh-CN      将对话保存为 .txt 文件
// @description:zh-HK      將對話保存為 .txt 文件
// @description:zh-MO      將對話保存為 .txt 文件
// @description:zh-MY      将对话保存为 .txt 文件
// @description:zh-SG      将对话保存为 .txt 文件
// @description:zh-TW      將對話保存為 .txt 文件
// @description:zu         Gcina ingxoxo njengefayela le-.txt
// @author                 Taylor-eOS,人民的勤务员 <[email protected]>
// @namespace              https://github.com/ChinaGodMan/UserScripts
// @supportURL             https://github.com/ChinaGodMan/UserScripts/issues
// @homepageURL            https://github.com/ChinaGodMan/UserScripts
// @homepage               https://github.com/ChinaGodMan/UserScripts
// @license                MIT
// @match                  https://chatgpt.com/*
// @match                  https://chat.deepseek.com/*
// @icon                   https://raw.githubusercontent.com/ChinaGodMan/UserScriptsHistory/main/scriptsIcon/chatgpt-plus.png
// @compatible             chrome
// @compatible             firefox
// @compatible             edge
// @compatible             opera
// @compatible             safari
// @compatible             kiwi
// @compatible             qq
// @compatible             via
// @compatible             brave
// @version                2025.6.3.1
// ==/UserScript==

(function () {
    'use strict'

    function capitalizeRole(role) {
        if (role === 'user') return 'User'
        if (role === 'assistant') return 'Assistant'
        return role.charAt(0).toUpperCase() + role.slice(1)
    }

    function generateFileName(messages) {
        let raw = (document.querySelector('title') || {}).textContent
        if (raw) {
            let name = raw.trim()
                .slice(0, 40)
            return name || 'conversation'
        }
        let firstWords = messages[0].text.split(/\s+/).slice(0, 5).join(' ')
        let snippet = firstWords.toLowerCase()
            .replace(/[^a-z0-9 ]/g, '')
            .replace(/\s+/g, '_')
            .slice(0, 30)
        return snippet || 'conversation'
    }

    function saveConversation() {
        const containers = document.querySelectorAll('[data-message-id]')
        const messages = []
        containers.forEach(el => {
            const role = el.getAttribute('data-message-author-role')
            let content = el.querySelector('.whitespace-pre-wrap') || el.querySelector('.markdown')
            if (role && content) {
                let text = content.innerText.trim()
                messages.push({ role: capitalizeRole(role), text })
            }
        })
        if (!messages.length) {
            alert('No conversation found to save.')
            return
        }
        const body = messages.map(m => `${m.role}:\n${m.text}`).join('\n\n---\n\n')
        const blob = new Blob([body], { type: 'text/plain' })
        const url = URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.href = url
        a.download = generateFileName(messages) + '.txt'
        document.body.appendChild(a)
        a.click()
        document.body.removeChild(a)
        URL.revokeObjectURL(url)
    }

    function createDownloadButton() {
        if (document.getElementById('save-convo-button')) return
        const btn = document.createElement('button')
        btn.id = 'save-convo-button'
        btn.title = 'Save conversation'
        btn.style.position = 'fixed'
        btn.style.top = '0'
        btn.style.left = '0'
        btn.style.width = '12px'
        btn.style.height = '30px'
        btn.style.backgroundColor = 'green'
        btn.style.borderRadius = '4px'
        btn.style.zIndex = 9999
        btn.style.cursor = 'pointer'
        btn.addEventListener('click', saveConversation)
        document.body.appendChild(btn)
    }

    const waitForBody = setInterval(() => {
        if (document.body && document.querySelector('[data-message-id]')) {
            clearInterval(waitForBody)
            createDownloadButton()
        }
    }, 500)
})()
长期地址
遇到问题?请前往 GitHub 提 Issues。