本帖最后由 nctot 于 2024-5-23 13:12 编辑
本来要上传gif动图, 但不知道为什么上传不了。具体效果看图,代码在后面,加载提示词会有一个跨越请求,需要同意。
[JavaScript] 纯文本查看 复制代码 // ==UserScript==
// @name ChatGPT助手
// @namespace http://tampermonkey.net/
// @version 2024-04-10
// @description try to take over the world!
// @author You
// @match https://chat.openai.com/*
// @match https://[color=#000]chatgpt.com[/color]/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=openai.com
// @grant GM_xmlhttpRequest
// @require https://lib.sinaapp.com/js/jquery/1.12.4/jquery-1.12.4.min.js
// ==/UserScript==
$(document).ready(function() {
// 创建面板并插入到页面中
var panelHTML = '<div id="toggleButton" style="position: fixed;top: 59px;right: 10px;padding: 10px;background-color: #f0f0f0;border: 1px solid #ccc;cursor: pointer;z-index: 999;">开/缩</div>'+
'<div class="panel" style="position: fixed;bottom:50px;top: 50px; right: 10px; width: 200px; background-color: #fff;">' +
'<div class="panel-header" style="background-color: #f0f0f0; padding: 10px; cursor: pointer;"><input style="width:-webkit-fill-available" type="text" id="keyword" placeholder="输入关键词">' +
'</div>' +
'<div class="panel-content" style="border: 1px solid #ccc;border-top: none;padding: 10px;overflow-y:auto;height:calc(100% - 40px)">' +
'<!-- 这里是面板内容 -->' +
'</div>' +
'</div>';
// 将面板插入到页面中
$('body').append(panelHTML);
// 添加按钮点击事件,收缩面板
$('#toggleButton').click(function() {
$('.panel').slideToggle();
});
getPrompts();
});
function getPrompts(){
$(".panel-content").html("更新中...");
GM_xmlhttpRequest({
method: "get",
url: "https://api.apim.work/prompts/getPrompts",
headers: {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN",
"Host": "api.apim.work",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) uTools/4.0.1 Chrome/108.0.5359.215 Electron/22.3.12 Safari/537.36"
},
data:"",
onload: function(response){
console.log("请求成功");
var res=response.responseText;
console.log();
res=JSON.parse(res);
var data=res.data;
var data2=[];
for (var i = 0; i < data.length; i++) {
var messages = data[i].params.messages;
if (messages[0].content.trim() != "") {
data2.push(data[i]);
}
}
serach(data2);
$('#keyword').off("input").on('input', function(){
serach(data2);
});
},
onerror: function(response){
console.log("请求失败");
$(".panel-content").html("请求失败");
}
});
}
function setNativeValue(element, value) {
const valueSetter = Object.getOwnPropertyDescriptor(element, 'value').set;
const prototype = Object.getPrototypeOf(element);
const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
if (valueSetter && valueSetter !== prototypeValueSetter) {
prototypeValueSetter.call(element, value);
} else {
valueSetter.call(element, value);
}
element.dispatchEvent(new Event('input', { bubbles: true }));
}
function serach(data){
var arr_data=[];
var html_str="";
var keyword= $('#keyword').val().toLowerCase();
if(keyword!=""){
for(var i=0;i<data.length;i++){
if(data[i].nickname.toLowerCase().indexOf(keyword)>=0){
arr_data.push(data[i]);
}
}
}else{
arr_data=data;
}
for(var j=0;j<arr_data.length;j++){
var cid=arr_data[j].cid;//分类id
var nickname=arr_data[j].nickname.toLowerCase().replace(keyword,"<span style='color:red'>"+keyword+"</span>");//名称
var info=arr_data[j].info;//简介
var prompt=arr_data[j].params.messages[0].content;//命令
//if(prompt!=""){
html_str+="<a class='prompt' href='javascript:void(0)'cid='"+cid+"' title='"+info+"' prompt='"+prompt+"'>"+"【"+(j+1)+"】"+nickname+"</a><br>";
// }
}
$(".panel-content").html(html_str);
$(".prompt").click(function(){
var a=$(this);
var prompt=a.attr("prompt");
// $("#prompt-textarea").val(prompt);
// $("#prompt-textarea").focus();
setNativeValue(document.getElementById('prompt-textarea'),prompt);
});
}
|