Greasy Fork

Greasy Fork is available in English.

Steam_Zoom_Like

批量点赞Steam动态朋友圈, 原作者 Garen

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name:zh-CN            Steam 动态批量点赞
// @name                  Steam_Zoom_Like
// @namespace             https://blog.chrxw.com
// @supportURL            https://blog.chrxw.com/scripts.html
// @contributionURL       https://afdian.com/@chr233
// @version               1.8
// @description:zh-CN     批量点赞Steam动态朋友圈, 原作者 Garen
// @description           批量点赞Steam动态朋友圈, 原作者 Garen
// @author                Garen, Chr_
// @license               AGPL-3.0
// @icon                  https://blog.chrxw.com/favicon.ico
// @match                 https://steamcommunity.com/id/*/home*
// @match                 https://steamcommunity.com/profiles/*/home*
// @grant                 GM_addStyle
// @grant                 GM_registerMenuCommand
// ==/UserScript==

// 原版脚本: http://greasyfork.icu/zh-CN/scripts/379844

(function () {
    'use strict';

    // 获取添加按钮的父元素
    const titleArea = document.querySelector('div.blotter_page_title');

    // 创新点赞按钮
    const btnArea = document.createElement("div");
    btnArea.className = "panel_szl";
    titleArea.appendChild(btnArea);

    const chkReview = genChk("评测", "发布评测", "szl_chk_review", btnArea);
    const chkPurchase = genChk("购买", "购买新游戏", "szl_chk_purchase", btnArea);
    const chkScreenshot = genChk("截图", "上传截图", "szl_chk_image", btnArea);
    const chkUserstatus = genChk("状态", "用户状态", "szl_chk_userstatus", btnArea);
    const chkOther = genChk("其它", "艺术作品, 指南, 创意工坊, 其它", "szl_chk_other", btnArea);
    const btnLike = genBtn("开始点赞", "btn_szl", startLike, btnArea);

    let t = 0;
    let autoStart = localStorage.getItem("szl_auto") === "true";

    function startLike() {
        if (t === 0) {
            btnLike.textContent = "停止点赞";
            t = setInterval(() => {
                const elemets = document.querySelectorAll("div.blotter_day>div.blotter_block>div[class]:not([like])");
                for (let ele of elemets) {
                    const clsName = ele.className;
                    let a = undefined;

                    if (chkReview.checked && clsName === "blotter_recommendation") {
                        a = ele.querySelector("div.control_block>a[onclick^='UserReviewVoteUp']:not(.btn_active)");
                    } else if (
                        (chkPurchase.checked && clsName === "blotter_gamepurchase") ||
                        (chkScreenshot.checked && clsName === "blotter_screenshot") ||
                        (chkUserstatus.checked && clsName === "blotter_userstatus") ||
                        (chkOther.checked && clsName !== "blotter_gamepurchase" && clsName !== "blotter_screenshot" && clsName !== "blotter_userstatus")
                    ) {
                        a = ele.querySelector("div.blotter_control_container>a[id^='vote_up']:not(.active)");
                    }

                    if (a) {
                        ele.setAttribute("like", "");
                        a.click();
                        break;
                    }
                }
            }, 100);
        } else {
            btnLike.textContent = "开始点赞";
            clearInterval(t);
            t = 0;
        }
    }

    GM_registerMenuCommand(autoStart ? "自动开始点赞 [开]" : "自动开始点赞 [关]", () => {
        autoStart = !autoStart;
        localStorage.setItem("szl_auto", autoStart);
        ShowAlertDialog("提示", "设置已保存, 刷新页面后生效");
        if (!autoStart && t > 0) {
            startLike();
        }
    });

    if (autoStart) {
        startLike();
    }

    function genChk(name, title, key, parent) {
        const d = document.createElement("div");
        const l = document.createElement("label");
        const i = document.createElement("input");
        d.className = "container_szl";
        i.textContent = name;
        i.title = title;
        i.type = "checkbox";
        i.id = key;
        i.checked = localStorage.getItem(key) === "true";
        i.addEventListener('change', () => { localStorage.setItem(key, i.checked); });
        l.title = title;
        l.textContent = name;
        l.setAttribute("for", key);
        d.appendChild(i);
        d.appendChild(l);
        parent.appendChild(d);
        return i;
    }
    function genBtn(name, cls, func, parent) {
        const b = document.createElement("button");
        b.textContent = name;
        b.className = cls;
        b.addEventListener("click", func);
        parent.appendChild(b);
        return b;
    }
})();

GM_addStyle(`
div.panel_szl {
    float: right;
    margin-right: 2%;
    margin-top: -2%;
    display: inline-flex;
}
div.panel_szl > * {
    margin-left: 6px;
}
div.container_szl {
    align-items: center;
    display: flex;
}
button.btn_szl {
    width: 75px;
    border-radius: 2px;
    border: none;
    padding: 1px;
    display: inline-block;
    cursor: pointer;
    text-decoration: none !important;
    color: #fff !important;
    background: #acb5bd;
    background: -webkit-linear-gradient(top, #acb5bd 5%, #414a52 95%);
    background: linear-gradient(to bottom, #acb5bd 5%, #414a52 95%);
}
`);