ChatGPT 保存对话

将对话保存为 .txt 文件

当前为 2025-06-02 提交的版本,查看 最新版本

// ==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:es-419           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
// @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
// @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.2.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 = '#ececec'
        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)
})()