Pixiv like/unlike manager

Manager like/unlike for artworks with a reset option in the menu

当前为 2024-11-13 提交的版本,查看 最新版本

// ==UserScript==
// @name         Pixiv like/unlike manager
// @namespace    http://tampermonkey.net/
// @version      2.5
// @description  Manager like/unlike for artworks with a reset option in the menu
// @icon         https://s.pximg.net/www/js/build/89b113d671067311.svg
// @match        https://www.pixiv.net/*
// @grant        GM_registerMenuCommand
// @license      CC BY-NC-ND 4.0
// ==/UserScript==

(function () {
    "use strict";
    const defaultLeft = "20px";
    const defaultTop = "800px";

    // Add a "Reset to default" option in the Violentmonkey menu
    GM_registerMenuCommand("Reset to default", () => {
        localStorage.removeItem("popupLeft");
        localStorage.removeItem("popupTop");
        alert("Popup position has been reset to default.");
        location.reload(); // Reload the page to apply changes
    });

    // Create popup
    const popupLeft = localStorage.getItem("popupLeft") || defaultLeft;
    const popupTop = localStorage.getItem("popupTop") || defaultTop;
    const popup = document.createElement("div");
    popup.style.position = "fixed";
    popup.style.top = popupTop;
    popup.style.left = popupLeft;
    popup.style.backgroundColor = "rgb(51, 51, 51)";
    popup.style.border = "1px solid #ccc";
    popup.style.borderRadius = "5px";
    popup.style.padding = "15px";
    popup.style.boxShadow = "0 2px 10px rgba(0, 0, 0, 0.2)";
    popup.style.zIndex = "1000";
    popup.style.opacity = "0.5";
    popup.style.width = "200px";
    popup.style.cursor = "move";
    popup.style.pointerEvents = "auto";

    let isDragging = false;

    popup.onmousedown = function (event) {
        isDragging = true;
        let shiftX = event.clientX - popup.getBoundingClientRect().left;
        let shiftY = event.clientY - popup.getBoundingClientRect().top;

        function moveAt(pageX, pageY) {
            popup.style.left = pageX - shiftX + "px";
            popup.style.top = pageY - shiftY + "px";
        }

        function onMouseMove(event) {
            moveAt(event.pageX, event.pageY);
            localStorage.setItem("popupLeft", popup.style.left);
            localStorage.setItem("popupTop", popup.style.top);
        }

        document.addEventListener("mousemove", onMouseMove);

        document.onmouseup = function () {
            isDragging = false;
            document.removeEventListener("mousemove", onMouseMove);
            document.onmouseup = null;
        };

        popup.onmouseup = function () {
            isDragging = false;
        };
    };

    popup.ondragstart = function () {
        return false;
    };

    // Create buttons and message area
    const likeButton = document.createElement("button");
    likeButton.innerText = "Like";
    likeButton.style.cursor = "pointer";
    likeButton.style.backgroundColor = "#28a745";
    likeButton.style.color = "white";
    likeButton.style.border = "none";
    likeButton.style.borderRadius = "5px";
    likeButton.style.padding = "10px";
    likeButton.style.marginBottom = "10px";
    likeButton.style.width = "100%";

    const unlikedButton = document.createElement("button");
    unlikedButton.innerText = "Unlike";
    unlikedButton.style.cursor = "pointer";
    unlikedButton.style.backgroundColor = "#dc3545";
    unlikedButton.style.color = "white";
    unlikedButton.style.border = "none";
    unlikedButton.style.borderRadius = "5px";
    unlikedButton.style.padding = "10px";
    unlikedButton.style.width = "100%";

    const message = document.createElement("div");
    message.style.marginTop = "10px";
    message.style.color = "white";
    message.style.fontWeight = "bold";
    message.style.textAlign = "center";

    // Append buttons to the popup
    popup.appendChild(likeButton);
    popup.appendChild(unlikedButton);
    popup.appendChild(message);

    document.body.appendChild(popup);

    // Like button functionality
    likeButton.onclick = function () {
        handleAction("like", "fYcrPo", "Liked");
    };

    // Unlike button functionality
    unlikedButton.onclick = function () {
        handleAction("unlike", "bXjFLc", "Unliked");
    };

    function handleAction(action, svgClass, actionText) {
        const buttons = document.querySelectorAll("button.sc-kgq5hw-0");
        let actionCount = 0;
        let totalButtons = 0;

        message.innerText = "Scanning...";

        buttons.forEach((button) => {
            const svg = button.querySelector("svg.sc-j89e3c-1");
            if (svg && svg.classList.contains(svgClass)) {
                totalButtons++;
            }
        });

        if (totalButtons === 0) {
            message.innerText = `All artworks ${actionText.toLowerCase()}ed`;
            return;
        } else {
            message.innerText = `Total ${totalButtons} artworks to ${action}`;
        }

        buttons.forEach((button) => {
            const svg = button.querySelector("svg.sc-j89e3c-1");
            if (svg && svg.classList.contains(svgClass)) {
                const randomDelay = Math.random() * 900 + 100;

                setTimeout(() => {
                    button.click();
                    actionCount++;
                    message.innerText = `${actionText} ${actionCount}/${totalButtons} artworks`;
                }, randomDelay);
            }
        });
    }
})();

QingJ © 2025

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