Greasy Fork

Greasy Fork is available in English.

auto_rainbow_medal

PT站点用户名自动添加动态彩虹样式.添加勋章!如果想要适配PT站点请联系我:[email protected]

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         auto_rainbow_medal
// @namespace    https://example.com/
// @version      1.1.2
// @description  PT站点用户名自动添加动态彩虹样式.添加勋章!如果想要适配PT站点请联系我:[email protected]
// @license MIT
// @copyright (c) 2025-01-01
// @author       wiiii
// @match        *://pt.m-team.cc/*.php*
// @match        *://kp.m-team.cc/*.php*
// @match        *://xp.m-team.io/*.php*
// @match        *://xp.m-team.cc/*
// @match        *://pt.btschool.club/*.php*
// @match        *://hhanclub.top/*.php*
// @match        *://ubits.club/*.php*
// @match        *://rousi.zip/*.php*
// @match        *://hdfans.org/*.php*
// @match        *://carpt.net/*.php*
// @match        *://www.tjupt.org/*.php*
// @match        *://njtupt.top/*.php*
// @match        *://sunnypt.top/*.php*
// @match        *://www.hddolby.com/*.php*
// @match        *://ourbits.club/*.php*
// @match        *://audiences.me/*.php*
// @match        *://hdhome.org/*.php*
// @match        *://xingtan.one/*.php*
// @match        *://share.ilolicon.com/*.php*
// @grant        none
// ==/UserScript==

(function () {
  "use strict";

  // 动态插入 CSS 样式到页面中
  let style = document.createElement("style");

  // 允许的颜色数量选项
  const allowedColors = [10, 20, 50, 100];

  // 获取当前站点的域名
  const currentSite = window.location.hostname;

  // 检查 localStorage 中是否已保存该站点的彩虹设置
  const siteSettings = JSON.parse(
    localStorage.getItem("rainbowSettings") || "{}"
  );
  const now = Date.now();
  const expirationTime = 180 * 24 * 60 * 60 * 1000; // 180 天(以毫秒为单位)

  // 检查站点状态或缓存是否过期
  function isSettingExpired(timestamp) {
    return now - timestamp >= expirationTime; // 如果超过 180 天则返回 true
  }

  // 控制台日志输出函数
  function logMessage(message, color) {
    console.log(`%c${message}`, `color: ${color}; font-weight: bold;`);
  }

  // 获取渐变颜色
  function generateGradientColors(steps) {
    const colors = [];
    const hueStep = 360 / steps; // 每一步的色相间隔
    for (let i = 0; i < steps; i++) {
      const hue = i * hueStep; // 当前颜色的色相
      colors.push(`hsl(${hue}, 100%, 50%)`); // 使用 HSL 模式生成颜色
    }
    return colors.join(", "); // 返回逗号分隔的颜色字符串
  }

  // 提示用户选择颜色数量
  function getGradientStepCount() {
    let gradientStepCount = parseInt(
      prompt(
        `请选择彩虹渐变颜色数量(仅允许输入:10、20、50、100):`,
        allowedColors.includes(siteSettings[currentSite]?.colors)
          ? siteSettings[currentSite].colors
          : 20
      ),
      10
    );
    while (!allowedColors.includes(gradientStepCount)) {
      alert(`输入无效!请仅输入以下选项之一:${allowedColors.join("、")}`);
      gradientStepCount = parseInt(
        prompt(`请选择彩虹渐变颜色数量(仅允许输入:10、20、50、100):`, "20"),
        10
      );
    }
    return gradientStepCount;
  }

  // 功能:根据不同站点动态插入对应配置的勋章图片
  function applyRainbowEffect(userId, gradientStepCount) {
    const currentHost = window.location.host; // 获取当前页面的域名

    // 不同站点的勋章配置
    const siteBadgeConfig = {
      "hhanclub.top": [
        {
          src: "pic/medal/vip.svg",
          title: "永久VIP勋章",
          className:
            "nexus-username-medal preview !max-w-8 !max-h-8 !rounded-md",
          style: "margin-left: 2pt",
          width: "35", // 保证宽度生效
          height: "35", // 保证高度生效
        },
        {
          src: "pic/medal/temp.svg",
          title: "二周年站庆徽章",
          className:
            "nexus-username-medal preview !max-w-8 !max-h-8 !rounded-md",
          style: "margin-left: 2pt",
          width: "35", // 保证宽度生效
          height: "35", // 保证高度生效
        },
        {
          src: "pic/medal/anniversary.svg",
          title: "一周年站庆徽章",
          className:
            "nexus-username-medal preview !max-w-8 !max-h-8 !rounded-md",
          style: "margin-left: 2pt",
          width: "35", // 保证宽度生效
          height: "35", // 保证高度生效
        },
        {
          src: "pic/trans.gif",
          alt: "Donor",
          className: "star",
          style: "margin-left: 2pt",
        },
      ],
      "ubits.club": [
        // ubits 的勋章配置(倒序排列)
        {
          src: "/pic/Medal/Copper_One_Year_Normal.png",
          title: "1周年铜质勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/pic/Medal/Gold_One_Year_Normal.png",
          title: "1周年金质勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/pic/Medal/UPload_Team_Normal.png",
          title: "发布组",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/pic/Medal/Seeding_Normal.png",
          title: "保种组",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/pic/Medal/Sliver_One_Year_Normal.png",
          title: "1周年银质勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/pic/Medal/1K_torrent_Normal.png",
          title: "官种千种纪念勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/pic/Medal/2W_torrent_sliver_normal.png",
          title: "2万种纪念银质勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/pic/trans.gif",
          alt: "Donor",
          className: "starbig",
          style: "margin-left: 4pt",
        },
      ],
      "carpt.net": [
        {
          src: "/medal/youche2.png",
          title: "有车勋章_豪华款",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "/medal/youche1.png",
          title: "有车勋章_普通款",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
      ],
      "hdfans.org": [
        {
          src: "http://img.hdfans.org/images/2024/04/30/HDFans.fw.png",
          title: "HDFans四周年纪念勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "http://img.hdfans.org/images/2023/06/01/HDFans-2023.png",
          title: "HDFans三周年纪念勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "http://img.hdfans.org/images/2023/06/01/HDFans-2022.png",
          title: "HDFans二周年纪念勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
        {
          src: "http://img.hdfans.org/images/2023/06/01/HDFans-2021.png",
          title: "HDFans一周年纪念勋章",
          className: "nexus-username-medal-big preview",
          style: "max-height: 16px; max-width: 16px; margin-left: 4pt",
        },
      ],
      // 可以为其他站点添加更多配置
      "another-site.com": [
        {
          src: "pic/medal/special.svg",
          title: "特别勋章",
          className: "special-medal",
          style: "margin-left: 3pt",
          width: "30",
          height: "30",
        },
      ],
    };

    // 根据当前站点获取对应的勋章配置
    const images = siteBadgeConfig[currentHost] || []; // 如果找不到站点配置,返回空数组

    const links = document.querySelectorAll("a");
    links.forEach(function (link) {
      const href = link.getAttribute("href"); // 获取 href 属性值
      if (href && href.includes(`userdetails.php?id=${userId}`)) {
        const boldElement = link.querySelector("b"); // 找到嵌套的 <b> 标签
        if (boldElement) {
          // 为 <b> 标签添加彩虹样式
          boldElement.classList.add("beautifulrainbow");

          // 遍历当前站点的勋章配置,并按顺序插入
          images.forEach((imageData) => {
            const img = document.createElement("img");
            img.src = imageData.src;
            if (imageData.alt) img.alt = imageData.alt;
            if (imageData.className) img.className = imageData.className;
            if (imageData.style) img.style = imageData.style;
            if (imageData.title) img.title = imageData.title;

            // 确保设置宽度和高度
            img.style.width = `${imageData.width}px`;
            img.style.height = `${imageData.height}px`;

            // 将 <img> 标签插入到 <a> 标签之后
            link.insertAdjacentElement("afterend", img);
          });

          logMessage(`为链接 ${href} 添加了彩虹样式和图片标签`, "green");
        }
      }
    });

    // 动态生成 CSS 样式
    const style = document.createElement("style");
    style.textContent = `
            /* 彩虹样式 */
            .beautifulrainbow {
                display: inline-block !important;
                margin: 0 !important;
                padding: 0 !important;
                font-size: inherit !important;
                line-height: inherit !important;
                text-align: center !important;
                text-decoration: none !important;
                background: linear-gradient(
                    to right,
                    ${generateGradientColors(
                      gradientStepCount
                    )} /* 动态生成的渐变颜色 */
                );
                background-size: ${
                  gradientStepCount * 10
                }% 100%; /* 根据颜色数量调整背景尺寸 */
                -webkit-background-clip: text !important;
                background-clip: text !important;
                color: transparent !important;
                animation: beautifulrainbow_animation 8s linear infinite alternate; /* 动画时间为 8 秒 */
            }

            /* 动态彩虹动画 */
            @keyframes beautifulrainbow_animation {
                0% { background-position: 0% 50%; }
                100% { background-position: 100% 50%; }
            }
        `;
    document.head.appendChild(style);
  }

  // 检查站点是否启用
  if (
    siteSettings[currentSite] &&
    !isSettingExpired(siteSettings[currentSite].timestamp)
  ) {
    if (siteSettings[currentSite].status === "DISABLED") {
      logMessage(
        `彩虹效果已禁用(180 天有效期内),站点:${currentSite}`,
        "red"
      );
      return;
    } else if (siteSettings[currentSite].status === "PENDING") {
      const userId = prompt(
        "您已启用彩虹效果,但尚未输入您的 ID。\n\n请输入您的用户 ID(例如:userdetails.php?id=12345):"
      );
      if (userId) {
        const gradientStepCount =
          siteSettings[currentSite].colors || getGradientStepCount();
        siteSettings[currentSite] = {
          status: userId,
          colors: gradientStepCount,
          timestamp: now,
        };
        localStorage.setItem("rainbowSettings", JSON.stringify(siteSettings));
        alert("彩虹效果已应用!页面将动态处理您的 ID。");
        logMessage(
          `彩虹效果已启用,输入的 ID 为 ${userId},站点:${currentSite},颜色数量:${gradientStepCount}`,
          "green"
        );
        applyRainbowEffect(userId, gradientStepCount);
      } else {
        alert("您未输入 ID,彩虹效果暂时未启用。找到您的 ID 后可以再次输入。");
        logMessage(
          `用户未输入 ID,彩虹效果暂时未启用,站点:${currentSite}`,
          "red"
        );
      }
      return;
    } else if (siteSettings[currentSite].status) {
      const gradientStepCount = siteSettings[currentSite].colors || 20;
      applyRainbowEffect(siteSettings[currentSite].status, gradientStepCount);
      logMessage(
        `彩虹效果正在应用(180 天有效期内),站点:${currentSite},用户 ID:${siteSettings[currentSite].status},颜色数量:${gradientStepCount}`,
        "green"
      );
      return;
    }
  }

  const enableRainbow = confirm(
    `是否为当前站点 (${currentSite}) 启用彩虹效果?`
  );
  if (enableRainbow) {
    const gradientStepCount = getGradientStepCount();
    siteSettings[currentSite] = {
      status: "PENDING",
      colors: gradientStepCount,
      timestamp: now,
    };
    localStorage.setItem("rainbowSettings", JSON.stringify(siteSettings));
    alert(
      `彩虹效果已启用!渐变颜色数量设置为 ${gradientStepCount},请找到您的 ID 后输入。`
    );
    logMessage(
      `彩虹效果已启用,但未输入 ID,站点:${currentSite},渐变颜色数量:${gradientStepCount}`,
      "green"
    );
  } else {
    siteSettings[currentSite] = {
      status: "DISABLED",
      colors: null,
      timestamp: now,
    };
    localStorage.setItem("rainbowSettings", JSON.stringify(siteSettings));
    alert("您已选择不启用彩虹效果,180 天内不再提示。");
    logMessage(`彩虹效果已禁用,站点:${currentSite}`, "red");
  }
})();