Greasy Fork镜像 支持简体中文。

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

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

  1. // ==UserScript==
  2. // @name Add Copy Button to Chat Messages on 360's bot.n.cn
  3. // @description Adds a "Copy" button to chat message elements to easily copy their content.
  4. // @name:zh-CN 为360纳米AI聊天消息添加复制按钮
  5. // @description:zh-CN 为聊天消息元素添加“复制”按钮,以便轻松复制其内容。
  6. // @name:ar إضافة زر نسخ لرسائل الدردشة على bot.n.cn الخاص بـ 360
  7. // @description:ar يضيف زر "نسخ" إلى عناصر رسائل الدردشة لنسخ محتواها بسهولة.
  8. // @name:bg Добавяне на бутон за копиране към съобщенията в чата на bot.n.cn на 360
  9. // @description:bg Добавя бутон "Копиране" към елементите на съобщенията в чата за лесно копиране на тяхното съдържание.
  10. // @name:cs Přidat tlačítko Kopírovat do chatovacích zpráv na bot.n.cn od 360
  11. // @description:cs Přidává tlačítko "Kopírovat" k prvkům chatovacích zpráv pro snadné kopírování jejich obsahu.
  12. // @name:da Tilføj en kopiknap til chatbeskeder på 360's bot.n.cn
  13. // @description:da Tilføjer en "Kopiér"-knap til chatbeskedelementer for nemt at kopiere deres indhold.
  14. // @name:de Kopierknopf zu Chatnachrichten auf 360's bot.n.cn hinzufügen
  15. // @description:de Fügt einen "Kopieren"-Knopf zu Chatnachrichtenelementen hinzu, um deren Inhalt einfach zu kopieren.
  16. // @name:el Προσθήκη κουμπιού αντιγραφής στα μηνύματα συνομιλίας στο bot.n.cn της 360
  17. // @description:el Προσθέτει ένα κουμπί "Αντιγραφή" στα στοιχεία μηνυμάτων συνομιλίας για εύκολη αντιγραφή του περιεχομένου τους.
  18. // @name:en Add Copy Button to Chat Messages on 360's bot.n.cn
  19. // @description:en Adds a "Copy" button to chat message elements to easily copy their content.
  20. // @name:eo Aldoni Kopi-Butonon al Babilaj Mesaĝoj en bot.n.cn de 360
  21. // @description:eo Aldonas "Kopii"-butonon al babilaj mesaĝelementoj por facile kopii ilian enhavon.
  22. // @name:es Añadir botón de copiar a mensajes de chat en bot.n.cn de 360
  23. // @description:es Añade un botón "Copiar" a los elementos de mensajes de chat para copiar fácilmente su contenido.
  24. // @name:fi Lisää kopiointipainike chattiviesteihin 360:n bot.n.cn-sivustolla
  25. // @description:fi Lisää "Kopioi"-painikkeen chattiviestielementteihin niiden sisällön helppoa kopiointia varten.
  26. // @name:fr Ajouter un bouton Copier aux messages de chat sur bot.n.cn de 360
  27. // @description:fr Ajoute un bouton "Copier" aux éléments des messages de chat pour copier facilement leur contenu.
  28. // @name:fr-CA Ajouter un bouton Copier aux messages de clavardage sur bot.n.cn de 360
  29. // @description:fr-CA Ajoute un bouton "Copier" aux éléments des messages de clavardage pour en copier facilement le contenu.
  30. // @name:he הוסף כפתור העתקה להודעות צ'אט ב-bot.n.cn של 360
  31. // @description:he מוסיף כפתור "העתק" לרכיבי הודעות הצ'אט כדי להעתיק בקלות את תוכנם.
  32. // @name:hr Dodaj gumb za kopiranje porukama chata na bot.n.cn od 360
  33. // @description:hr Dodaje gumb "Kopiraj" elementima poruka chata za jednostavno kopiranje njihovog sadržaja.
  34. // @name:hu Másolás gomb hozzáadása a csevegőüzenetekhez a 360 bot.n.cn oldalán
  35. // @description:hu Hozzáad egy "Másolás" gombot a csevegőüzenet-elemekhez a tartalom egyszerű másolásához.
  36. // @name:id Tambah Tombol Salin ke Pesan Obrolan di bot.n.cn milik 360
  37. // @description:id Menambahkan tombol "Salin" ke elemen pesan obrolan untuk menyalin kontennya dengan mudah.
  38. // @name:it Aggiungi pulsante Copia ai messaggi di chat su bot.n.cn di 360
  39. // @description:it Aggiunge un pulsante "Copia" agli elementi dei messaggi di chat per copiarne facilmente il contenuto.
  40. // @name:ja 360のbot.n.cnのチャットメッセージにコピーボタンを追加
  41. // @description:ja チャットメッセージ要素に「コピー」ボタンを追加して、内容を簡単にコピーできるようにします。
  42. // @name:ka დაამატეთ ასლი ღილაკი ჩატის შეტყობინებებში 360-ის bot.n.cn-ზე
  43. // @description:ka ჩატის შეტყობინებების ელემენტებში "ასლი" ღილაკის დამატება მათი შინაარსის მარტივად კოპირებისთვის.
  44. // @name:ko 360의 bot.n.cn 채팅 메시지에 복사 버튼 추가
  45. // @description:ko 채팅 메시지 요소에 "복사" 버튼을 추가하여 내용을 쉽게 복사할 수 있도록 합니다.
  46. // @name:nb Legg til en kopieringsknapp i chattemeldinger på 360s bot.n.cn
  47. // @description:nb Legger til en "Kopier"-knapp i chattemeldingselementer for å enkelt kopiere innholdet deres.
  48. // @name:nl Voeg een kopieerknop toe aan chatberichten op 360's bot.n.cn
  49. // @description:nl Voegt een "Kopiëren"-knop toe aan chatberichtelementen om de inhoud gemakkelijk te kopiëren.
  50. // @name:pl Dodaj przycisk Kopiuj do wiadomości czatu na bot.n.cn od 360
  51. // @description:pl Dodaje przycisk "Kopiuj" do elementów wiadomości czatu, aby łatwo skopiować ich zawartość.
  52. // @name:pt-BR Adicionar botão Copiar às mensagens de chat no bot.n.cn da 360
  53. // @description:pt-BR Adiciona um botão "Copiar" aos elementos de mensagens de chat para copiar facilmente seu conteúdo.
  54. // @name:ro Adaugă un buton de copiere la mesajele de chat pe bot.n.cn al 360
  55. // @description:ro Adaugă un buton "Copiază" la elementele mesajelor de chat pentru a le copia ușor conținutul.
  56. // @name:ru Добавить кнопку копирования в сообщения чата на bot.n.cn от 360
  57. // @description:ru Добавляет кнопку "Копировать" к элементам сообщений чата для легкого копирования их содержимого.
  58. // @name:sk Pridať tlačidlo Kopírovať do správ četu na bot.n.cn od 360
  59. // @description:sk Pridáva tlačidlo "Kopírovať" k prvkom správ četu na jednoduché kopírovanie ich obsahu.
  60. // @name:sr Додај дугме за копирање порукама у чету на bot.n.cn од 360
  61. // @description:sr Додаје дугме "Копирај" елементима порука у чету за лако копирање њиховог садржаја.
  62. // @name:sv Lägg till en kopieringsknapp i chattmeddelanden på 360:s bot.n.cn
  63. // @description:sv Lägger till en "Kopiera"-knapp i chattmeddelandeelement för att enkelt kopiera deras innehåll.
  64. // @name:th เพิ่มปุ่มคัดลอกให้กับข้อความแชทบน bot.n.cn ของ 360
  65. // @description:th เพิ่มปุ่ม "คัดลอก" ให้กับองค์ประกอบข้อความแชทเพื่อคัดลอกเนื้อหาได้อย่างง่ายดาย
  66. // @name:tr 360'ın bot.n.cn üzerindeki sohbet mesajlarına Kopyala düğmesi ekle
  67. // @description:tr Sohbet mesajı öğelerine içeriğini kolayca kopyalamak için bir "Kopyala" düğmesi ekler.
  68. // @name:ug 360 نىڭ bot.n.cn دىكى پاراڭلىشىش ئۇچۇرلىرىغا كۆچۈرۈش كۇنۇپكىسى قوشۇش
  69. // @description:ug پاراڭلىشىش ئۇچۇرلىرى ئېلېمېنتلىرىغا ئۇلارنىڭ مەزمۇنىنى ئاسان كۆچۈرۈش ئۈچۈن "كۆچۈرۈش" كۇنۇپكىسى قوشىدۇ.
  70. // @name:uk Додати кнопку копіювання до повідомлень чату на bot.n.cn від 360
  71. // @description:uk Додає кнопку "Копіювати" до елементів повідомлень чату для легкого копіювання їх вмісту.
  72. // @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
  73. // @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.
  74. // @name:zh 为360的bot.n.cn上的聊天消息添加复制按钮
  75. // @description:zh 为聊天消息元素添加“复制”按钮,以便轻松复制其内容。
  76. // @name:zh-HK 為360嘅bot.n.cn上嘅聊天訊息添加複製按鈕
  77. // @description:zh-HK 為聊天訊息元素添加「複製」按鈕,以便輕鬆複製其內容。
  78. // @name:zh-SG 为360的bot.n.cn上的聊天消息添加复制按钮
  79. // @description:zh-SG 为聊天消息元素添加“复制”按钮,以便轻松复制其内容。
  80. // @name:zh-TW 為360的bot.n.cn上的聊天訊息添加複製按鈕
  81. // @description:zh-TW 為聊天訊息元素添加「複製」按鈕,以便輕鬆複製其內容。
  82. // @namespace http://tampermonkey.net/
  83. // @version 0.1.0
  84. // @author aspen138
  85. // @match *://bot.n.cn/*
  86. // @grant none
  87. // @run-at document-end
  88. // @icon https://p1.ssl.qhimg.com//t11098f6bcd26caa77d8aa4d2fb.png
  89. // @license MIT
  90. // ==/UserScript==
  91.  
  92.  
  93. (function() {
  94. 'use strict';
  95.  
  96. // Update these if class names change
  97. const MESSAGE_CONTENT_CLASS = 'UserMessage-module__container--cAvvK';
  98. const CHAT_MESSAGE_CONTENT_CLASS = 'ChatMessage-module__content--MYneF';
  99. 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';
  100.  
  101. function createCopyButton() {
  102. const button = document.createElement('button');
  103. button.innerText = 'Copy';
  104. button.classList.add('copy-button');
  105. button.style.position = 'sticky';
  106. button.style.top = '10px';
  107. button.style.right = '10px';
  108. button.style.backgroundColor = '#4CAF50';
  109. button.style.color = '#fff';
  110. button.style.border = 'none';
  111. button.style.borderRadius = '4px';
  112. button.style.padding = '5px 10px';
  113. button.style.cursor = 'pointer';
  114. button.style.fontSize = '0.9em';
  115. button.style.zIndex = '1000';
  116. button.style.boxShadow = '0 2px 6px rgba(0,0,0,0.2)';
  117. button.style.marginLeft = 'auto';
  118. button.style.float = 'right';
  119. button.style.display = 'inline-block';
  120.  
  121. button.addEventListener('mouseenter', () => {
  122. button.style.backgroundColor = '#45a049';
  123. });
  124. button.addEventListener('mouseleave', () => {
  125. button.style.backgroundColor = '#4CAF50';
  126. });
  127.  
  128. return button;
  129. }
  130.  
  131. function addCopyButton(element) {
  132. if (element.querySelector('.copy-button')) return;
  133.  
  134. const isNewMessage = element.matches(NEW_MESSAGE_SELECTOR);
  135. const contentElement = isNewMessage ? element : element.querySelector(`.${MESSAGE_CONTENT_CLASS}`);
  136.  
  137. if (!contentElement) return;
  138.  
  139. element.style.position = 'relative';
  140. element.style.display = 'block';
  141.  
  142. const copyButton = createCopyButton();
  143.  
  144. copyButton.addEventListener('click', () => {
  145. const textToCopy = contentElement.innerText.trim().replace(/Copy(?=[^Copy]*$)/, "");
  146. navigator.clipboard.writeText(textToCopy).then(() => {
  147. copyButton.innerText = 'Copied!';
  148. copyButton.style.backgroundColor = '#388E3C';
  149. setTimeout(() => {
  150. copyButton.innerText = 'Copy';
  151. copyButton.style.backgroundColor = '#4CAF50';
  152. }, 2000);
  153. }).catch(err => {
  154. console.error('Failed to copy text: ', err);
  155. });
  156. });
  157.  
  158. element.appendChild(copyButton);
  159. }
  160.  
  161. function processExistingMessages() {
  162. // Process original chat messages
  163. document.querySelectorAll(`.${CHAT_MESSAGE_CONTENT_CLASS}`).forEach(addCopyButton);
  164. // Process new gradient messages
  165. document.querySelectorAll(NEW_MESSAGE_SELECTOR).forEach(addCopyButton);
  166. }
  167.  
  168. function observeNewMessages() {
  169. const observer = new MutationObserver((mutations) => {
  170. for (const mutation of mutations) {
  171. if (mutation.type === 'childList') {
  172. mutation.addedNodes.forEach(node => {
  173. if (node.nodeType === Node.ELEMENT_NODE) {
  174. // Check for both message types
  175. if (node.matches(`.${CHAT_MESSAGE_CONTENT_CLASS}, ${NEW_MESSAGE_SELECTOR}`)) {
  176. addCopyButton(node);
  177. }
  178. // Check nested elements
  179. node.querySelectorAll(`.${CHAT_MESSAGE_CONTENT_CLASS}, ${NEW_MESSAGE_SELECTOR}`).forEach(addCopyButton);
  180. }
  181. });
  182. }
  183. }
  184. });
  185.  
  186. observer.observe(document.body, { childList: true, subtree: true });
  187. }
  188.  
  189. function init() {
  190. processExistingMessages();
  191. observeNewMessages();
  192. }
  193.  
  194. if (document.readyState === 'loading') {
  195. document.addEventListener('DOMContentLoaded', init);
  196. } else {
  197. init();
  198. }
  199. })();

QingJ © 2025

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