為360的bot.n.cn上的聊天訊息添加複製按鈕

為聊天訊息元素添加「複製」按鈕,以便輕鬆複製其內容。

// ==UserScript==
// @name         Add Copy Button to Chat Messages on 360's bot.n.cn
// @description  Adds a "Copy" button to chat message elements to easily copy their content.
// @name:zh-CN   为360纳米AI聊天消息添加复制按钮
// @description:zh-CN  为聊天消息元素添加“复制”按钮,以便轻松复制其内容。
// @name:ar      إضافة زر نسخ لرسائل الدردشة على bot.n.cn الخاص بـ 360
// @description:ar  يضيف زر "نسخ" إلى عناصر رسائل الدردشة لنسخ محتواها بسهولة.
// @name:bg      Добавяне на бутон за копиране към съобщенията в чата на bot.n.cn на 360
// @description:bg  Добавя бутон "Копиране" към елементите на съобщенията в чата за лесно копиране на тяхното съдържание.
// @name:cs      Přidat tlačítko Kopírovat do chatovacích zpráv na bot.n.cn od 360
// @description:cs  Přidává tlačítko "Kopírovat" k prvkům chatovacích zpráv pro snadné kopírování jejich obsahu.
// @name:da      Tilføj en kopiknap til chatbeskeder på 360's bot.n.cn
// @description:da  Tilføjer en "Kopiér"-knap til chatbeskedelementer for nemt at kopiere deres indhold.
// @name:de      Kopierknopf zu Chatnachrichten auf 360's bot.n.cn hinzufügen
// @description:de  Fügt einen "Kopieren"-Knopf zu Chatnachrichtenelementen hinzu, um deren Inhalt einfach zu kopieren.
// @name:el      Προσθήκη κουμπιού αντιγραφής στα μηνύματα συνομιλίας στο bot.n.cn της 360
// @description:el  Προσθέτει ένα κουμπί "Αντιγραφή" στα στοιχεία μηνυμάτων συνομιλίας για εύκολη αντιγραφή του περιεχομένου τους.
// @name:en      Add Copy Button to Chat Messages on 360's bot.n.cn
// @description:en  Adds a "Copy" button to chat message elements to easily copy their content.
// @name:eo      Aldoni Kopi-Butonon al Babilaj Mesaĝoj en bot.n.cn de 360
// @description:eo  Aldonas "Kopii"-butonon al babilaj mesaĝelementoj por facile kopii ilian enhavon.
// @name:es      Añadir botón de copiar a mensajes de chat en bot.n.cn de 360
// @description:es  Añade un botón "Copiar" a los elementos de mensajes de chat para copiar fácilmente su contenido.
// @name:fi      Lisää kopiointipainike chattiviesteihin 360:n bot.n.cn-sivustolla
// @description:fi  Lisää "Kopioi"-painikkeen chattiviestielementteihin niiden sisällön helppoa kopiointia varten.
// @name:fr      Ajouter un bouton Copier aux messages de chat sur bot.n.cn de 360
// @description:fr  Ajoute un bouton "Copier" aux éléments des messages de chat pour copier facilement leur contenu.
// @name:fr-CA   Ajouter un bouton Copier aux messages de clavardage sur bot.n.cn de 360
// @description:fr-CA  Ajoute un bouton "Copier" aux éléments des messages de clavardage pour en copier facilement le contenu.
// @name:he      הוסף כפתור העתקה להודעות צ'אט ב-bot.n.cn של 360
// @description:he  מוסיף כפתור "העתק" לרכיבי הודעות הצ'אט כדי להעתיק בקלות את תוכנם.
// @name:hr      Dodaj gumb za kopiranje porukama chata na bot.n.cn od 360
// @description:hr  Dodaje gumb "Kopiraj" elementima poruka chata za jednostavno kopiranje njihovog sadržaja.
// @name:hu      Másolás gomb hozzáadása a csevegőüzenetekhez a 360 bot.n.cn oldalán
// @description:hu  Hozzáad egy "Másolás" gombot a csevegőüzenet-elemekhez a tartalom egyszerű másolásához.
// @name:id      Tambah Tombol Salin ke Pesan Obrolan di bot.n.cn milik 360
// @description:id  Menambahkan tombol "Salin" ke elemen pesan obrolan untuk menyalin kontennya dengan mudah.
// @name:it      Aggiungi pulsante Copia ai messaggi di chat su bot.n.cn di 360
// @description:it  Aggiunge un pulsante "Copia" agli elementi dei messaggi di chat per copiarne facilmente il contenuto.
// @name:ja      360のbot.n.cnのチャットメッセージにコピーボタンを追加
// @description:ja  チャットメッセージ要素に「コピー」ボタンを追加して、内容を簡単にコピーできるようにします。
// @name:ka      დაამატეთ ასლი ღილაკი ჩატის შეტყობინებებში 360-ის bot.n.cn-ზე
// @description:ka  ჩატის შეტყობინებების ელემენტებში "ასლი" ღილაკის დამატება მათი შინაარსის მარტივად კოპირებისთვის.
// @name:ko      360의 bot.n.cn 채팅 메시지에 복사 버튼 추가
// @description:ko  채팅 메시지 요소에 "복사" 버튼을 추가하여 내용을 쉽게 복사할 수 있도록 합니다.
// @name:nb      Legg til en kopieringsknapp i chattemeldinger på 360s bot.n.cn
// @description:nb  Legger til en "Kopier"-knapp i chattemeldingselementer for å enkelt kopiere innholdet deres.
// @name:nl      Voeg een kopieerknop toe aan chatberichten op 360's bot.n.cn
// @description:nl  Voegt een "Kopiëren"-knop toe aan chatberichtelementen om de inhoud gemakkelijk te kopiëren.
// @name:pl      Dodaj przycisk Kopiuj do wiadomości czatu na bot.n.cn od 360
// @description:pl  Dodaje przycisk "Kopiuj" do elementów wiadomości czatu, aby łatwo skopiować ich zawartość.
// @name:pt-BR   Adicionar botão Copiar às mensagens de chat no bot.n.cn da 360
// @description:pt-BR  Adiciona um botão "Copiar" aos elementos de mensagens de chat para copiar facilmente seu conteúdo.
// @name:ro      Adaugă un buton de copiere la mesajele de chat pe bot.n.cn al 360
// @description:ro  Adaugă un buton "Copiază" la elementele mesajelor de chat pentru a le copia ușor conținutul.
// @name:ru      Добавить кнопку копирования в сообщения чата на bot.n.cn от 360
// @description:ru  Добавляет кнопку "Копировать" к элементам сообщений чата для легкого копирования их содержимого.
// @name:sk      Pridať tlačidlo Kopírovať do správ četu na bot.n.cn od 360
// @description:sk  Pridáva tlačidlo "Kopírovať" k prvkom správ četu na jednoduché kopírovanie ich obsahu.
// @name:sr      Додај дугме за копирање порукама у чету на bot.n.cn од 360
// @description:sr  Додаје дугме "Копирај" елементима порука у чету за лако копирање њиховог садржаја.
// @name:sv      Lägg till en kopieringsknapp i chattmeddelanden på 360:s bot.n.cn
// @description:sv  Lägger till en "Kopiera"-knapp i chattmeddelandeelement för att enkelt kopiera deras innehåll.
// @name:th      เพิ่มปุ่มคัดลอกให้กับข้อความแชทบน bot.n.cn ของ 360
// @description:th  เพิ่มปุ่ม "คัดลอก" ให้กับองค์ประกอบข้อความแชทเพื่อคัดลอกเนื้อหาได้อย่างง่ายดาย
// @name:tr      360'ın bot.n.cn üzerindeki sohbet mesajlarına Kopyala düğmesi ekle
// @description:tr  Sohbet mesajı öğelerine içeriğini kolayca kopyalamak için bir "Kopyala" düğmesi ekler.
// @name:ug      360 نىڭ bot.n.cn دىكى پاراڭلىشىش ئۇچۇرلىرىغا كۆچۈرۈش كۇنۇپكىسى قوشۇش
// @description:ug  پاراڭلىشىش ئۇچۇرلىرى ئېلېمېنتلىرىغا ئۇلارنىڭ مەزمۇنىنى ئاسان كۆچۈرۈش ئۈچۈن "كۆچۈرۈش" كۇنۇپكىسى قوشىدۇ.
// @name:uk      Додати кнопку копіювання до повідомлень чату на bot.n.cn від 360
// @description:uk  Додає кнопку "Копіювати" до елементів повідомлень чату для легкого копіювання їх вмісту.
// @name:vi      Thêm nút Sao chép vào tin nhắn trò chuyện trên bot.n.cn của 360
// @description:vi  Thêm nút "Sao chép" vào các phần tử tin nhắn trò chuyện để dễ dàng sao chép nội dung của chúng.
// @name:zh      为360的bot.n.cn上的聊天消息添加复制按钮
// @description:zh  为聊天消息元素添加“复制”按钮,以便轻松复制其内容。
// @name:zh-HK   為360嘅bot.n.cn上嘅聊天訊息添加複製按鈕
// @description:zh-HK  為聊天訊息元素添加「複製」按鈕,以便輕鬆複製其內容。
// @name:zh-SG   为360的bot.n.cn上的聊天消息添加复制按钮
// @description:zh-SG  为聊天消息元素添加“复制”按钮,以便轻松复制其内容。
// @name:zh-TW   為360的bot.n.cn上的聊天訊息添加複製按鈕
// @description:zh-TW  為聊天訊息元素添加「複製」按鈕,以便輕鬆複製其內容。
// @namespace    http://tampermonkey.net/
// @version      0.1.0
// @author       aspen138
// @match        *://bot.n.cn/*
// @grant        none
// @run-at       document-end
// @icon         https://p1.ssl.qhimg.com//t11098f6bcd26caa77d8aa4d2fb.png
// @license      MIT
// ==/UserScript==


(function() {
    'use strict';

    // Update these if class names change
    const MESSAGE_CONTENT_CLASS = 'UserMessage-module__container--cAvvK';
    const CHAT_MESSAGE_CONTENT_CLASS = 'ChatMessage-module__content--MYneF';
    const NEW_MESSAGE_SELECTOR = '.max-w-\\[80\\%\\].rounded-\\[16px\\].px-\\[16px\\].py-\\[10px\\].text-white.text-\\[15px\\].leading-\\[22px\\].whitespace-pre-line.break-all.overflow-x-hidden';

    function createCopyButton() {
        const button = document.createElement('button');
        button.innerText = 'Copy';
        button.classList.add('copy-button');
        button.style.position = 'sticky';
        button.style.top = '10px';
        button.style.right = '10px';
        button.style.backgroundColor = '#4CAF50';
        button.style.color = '#fff';
        button.style.border = 'none';
        button.style.borderRadius = '4px';
        button.style.padding = '5px 10px';
        button.style.cursor = 'pointer';
        button.style.fontSize = '0.9em';
        button.style.zIndex = '1000';
        button.style.boxShadow = '0 2px 6px rgba(0,0,0,0.2)';
        button.style.marginLeft = 'auto';
        button.style.float = 'right';
        button.style.display = 'inline-block';

        button.addEventListener('mouseenter', () => {
            button.style.backgroundColor = '#45a049';
        });
        button.addEventListener('mouseleave', () => {
            button.style.backgroundColor = '#4CAF50';
        });

        return button;
    }

    function addCopyButton(element) {
        if (element.querySelector('.copy-button')) return;

        const isNewMessage = element.matches(NEW_MESSAGE_SELECTOR);
        const contentElement = isNewMessage ? element : element.querySelector(`.${MESSAGE_CONTENT_CLASS}`);

        if (!contentElement) return;

        element.style.position = 'relative';
        element.style.display = 'block';

        const copyButton = createCopyButton();

        copyButton.addEventListener('click', () => {
            const textToCopy = contentElement.innerText.trim().replace(/Copy(?=[^Copy]*$)/, "");
            navigator.clipboard.writeText(textToCopy).then(() => {
                copyButton.innerText = 'Copied!';
                copyButton.style.backgroundColor = '#388E3C';
                setTimeout(() => {
                    copyButton.innerText = 'Copy';
                    copyButton.style.backgroundColor = '#4CAF50';
                }, 2000);
            }).catch(err => {
                console.error('Failed to copy text: ', err);
            });
        });

        element.appendChild(copyButton);
    }

    function processExistingMessages() {
        // Process original chat messages
        document.querySelectorAll(`.${CHAT_MESSAGE_CONTENT_CLASS}`).forEach(addCopyButton);
        // Process new gradient messages
        document.querySelectorAll(NEW_MESSAGE_SELECTOR).forEach(addCopyButton);
    }

    function observeNewMessages() {
        const observer = new MutationObserver((mutations) => {
            for (const mutation of mutations) {
                if (mutation.type === 'childList') {
                    mutation.addedNodes.forEach(node => {
                        if (node.nodeType === Node.ELEMENT_NODE) {
                            // Check for both message types
                            if (node.matches(`.${CHAT_MESSAGE_CONTENT_CLASS}, ${NEW_MESSAGE_SELECTOR}`)) {
                                addCopyButton(node);
                            }
                            // Check nested elements
                            node.querySelectorAll(`.${CHAT_MESSAGE_CONTENT_CLASS}, ${NEW_MESSAGE_SELECTOR}`).forEach(addCopyButton);
                        }
                    });
                }
            }
        });

        observer.observe(document.body, { childList: true, subtree: true });
    }

    function init() {
        processExistingMessages();
        observeNewMessages();
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址