GF Auto Add to My Set

在脚本详情页一键把脚本加入自定义集合并保存

// ==UserScript==
// @name         GF Auto Add to My Set
// @namespace    https://gf.qytechs.cn/
// @version      1.0
// @description  在脚本详情页一键把脚本加入自定义集合并保存
// @match        https://gf.qytechs.cn/*/scripts/*
// @match        https://gf.qytechs.cn/*/users/*/sets/*/edit*  
// @grant        GM_openInTab
// @grant        GM_addStyle
// @run-at       document-idle
// @license MIT
// ==/UserScript==

(() => {
  'use strict';

  // —— 配置区 ——  
  // 1. 填成你的集合编辑页面 URL(如截图里那条)
  const SET_EDIT_URL = 'https://gf.qytechs.cn/zh-CN/users/xxx/sets/yyy/edit';  // 这里需要改成你实际的集合编辑页面地址

  // —— 样式 ——  
  GM_addStyle(`
    .gf-autoadd-btn {
      font-size:16px;
      color:#d4a017;
      background:transparent;
      border:none;
      cursor:pointer;
      margin-left:.5em;
    }
  `);

  // —— 脚本详情页逻辑 ——  
  if (/^\/[^\/]+\/scripts\/\d+/.test(location.pathname) &&
      !/\/sets\/\d+\/edit/.test(location.pathname)) {
    const m = location.pathname.match(/scripts\/(\d+)/);
    if (!m) return;
    const scriptId = m[1];

    // 找到标题节点(兼容多布局)
    const titleEl = document.querySelector(
      '[itemprop="name"], .script-header__title, .script-page__title, h1, h2'
    );
    if (!titleEl) return;

    // 插入按钮
    const btn = document.createElement('button');
    btn.textContent = '★ 加入集合';
    btn.className = 'gf-autoadd-btn';
    btn.title = '一键添加并保存到自定义集合';
    titleEl.appendChild(btn);

    btn.onclick = () => {
      // 打开编辑页并带上 ?add=ID
      GM_openInTab(`${SET_EDIT_URL}?add=${scriptId}`, { active: true });
    };
    return;
  }

  // —— 编辑页面自动填充逻辑 ——  
  if (location.href.startsWith(SET_EDIT_URL)) {
    const url = new URL(location.href);
    const addId = url.searchParams.get('add');
    if (!addId) return;

    // 1) 文本框里追加(若已存在则不重复)
    const ta = document.querySelector('textarea');
    const items = ta.value.split(/\s+/).filter(Boolean);
    if (!items.includes(addId)) {
      ta.value = (ta.value.trim() ? ta.value + '\n' : '') + addId;
    }

    // 2) 点击「包含」
    setTimeout(() => {
      const includeBtn = [...document.querySelectorAll('button, input[type="button"]')]
        .find(el => el.innerText.trim() === '包含');
      includeBtn && includeBtn.click();

      // 3) 再点击「保存」
      setTimeout(() => {
        const saveBtn = [...document.querySelectorAll('button, input[type="submit"]')]
          .find(el => el.innerText.trim() === '保存');
        saveBtn && saveBtn.click();
      }, 500);
    }, 500);
  }
})();

QingJ © 2025

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