Greasy Fork

Greasy Fork is available in English.

远景小助手

远景论坛自定义小功能~:自定义常用语,屏蔽指定用户的发言,隐藏等级|徽章|表情显示等。

当前为 2024-10-20 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         远景小助手
// @namespace    http://tampermonkey.net/
// @version      5.0.0.3
// @description  远景论坛自定义小功能~:自定义常用语,屏蔽指定用户的发言,隐藏等级|徽章|表情显示等。
// @author       lalaki
// @match        https://*.pcbeta.com/*
// @icon         https://bbs.pcbeta.com/favicon.ico
// @grant        GM_setValue
// @grant        GM_getValue
// @license      MIT
// ==/UserScript==
(function () {
    "use strict";
    const FINAL_VERSION = 5.3;
    //UI
    let gui = document.createElement("div");
    gui.innerHTML = `
    <div style="font-size:144%" draggable="false">
        <div style="background:#ff5245;padding:4px 12px 4px 12px;border-top-right-radius:10px">
        <img src="/favicon.ico" style="pointer-events:none;width:24px;position:absolute"><h1 style="margin:0 0 0 28px;color:#fff;">远景小助手</b>
        <div style="float:right;color:red;font-size:24px;line-height:20px;cursor:pointer;transform: translateX(10px);" id="tool_gui_close">❎</div>
        </div>
        <div style="display:flex;padding:2px 8px 5px 8px;background:#f3f3f3">
        <ul>
        <li><input id="hide_exp" type="checkbox"><label for="hide_exp">不显示默认表情</label></li>
        <li><input id="hide_star" type="checkbox"><label for="hide_star">不显示用户等级</label></li>
        <li><input id="hide_ava" type="checkbox"><label for="hide_ava">不展示用户徽章</label></li>
        <li><input id="hide_user_sign" type="checkbox"><label for="hide_user_sign">不展示用户签名</label></li>
        <li><input id="hide_ip_address" type="checkbox"><label for="hide_ip_address">不展示IP属地</label></li>
        <li><input id="hide_details" type="checkbox"><label for="hide_details">不展示用户详细信息(仅显示头像与名字)</label></li>
        <li><input id="show_all_ava" type="checkbox"><label for="show_all_ava">为自己佩戴全部徽章</label></li>
        <li><input id="fast_send_msg" type="checkbox"><label for="fast_send_msg">快捷发言</label></li>
        <li id="fast_send_msg_ct" style="display:none"><div>常用语(每行一句话):</div><textarea id="faster_msg_area" style="resize:both;width:382px;height:120px"></textarea></li>
        <li><div>黑名单(每行一个用户名):</div><textarea id="deny_users_area" style="resize:both;width:382px;height:120px"></textarea></li>
        <li><a id="up_pcbeta_tools" style="font-size:14px;color:green;display:none" target="_blank" href="https://lalaki.cn/pb/">有新版可用,点此获取</a><input type="button" id="tool_gui_save" value="存储配置" style="font-size:18px;float:right"></li>
        </ui>
        </div>
    </div>
        `;
    gui.style =
        "border-top-right-radius: 15px;display:none;user-select:none;position:fixed;left:0;top:0;z-index:999999;background:#333;box-shadow:5px 5px 10px rgba(0,0,0,0.3);";
    document.body.append(gui);
    document.querySelector("#tool_gui_close").onclick = () => {
        gui.style.display = "none";
    };
    //等级
    let hideStar = document.querySelector("#hide_star");
    hideStar.checked = GM_getValue("star", "false") == true;
    hideStar.addEventListener("change", () => {
        GM_setValue("star", hideStar.checked);
    });
    //徽章
    let hideAva = document.querySelector("#hide_ava");
    hideAva.checked = GM_getValue("ava", "false") == true;
    hideAva.addEventListener("change", () => {
        GM_setValue("ava", hideAva.checked);
    });
    //表情
    let hideExp = document.querySelector("#hide_exp");
    hideExp.checked = GM_getValue("exp", "false") == true;
    hideExp.addEventListener("change", () => {
        GM_setValue("exp", hideExp.checked);
    });
    //所有徽章体验
    let showAllAva = document.querySelector("#show_all_ava");
    showAllAva.checked = GM_getValue("avas", "false") == true;
    showAllAva.addEventListener("change", () => {
        GM_setValue("avas", showAllAva.checked);
    });
    //隐藏用户详细信息
    let hideDetail = document.querySelector("#hide_details");
    hideDetail.checked = GM_getValue("dts", "false") == true;
    hideDetail.addEventListener("change", () => {
        GM_setValue("dts", hideDetail.checked);
    });
    //不要地域黑
    let hideIPAddr = document.querySelector("#hide_ip_address");
    hideIPAddr.checked = GM_getValue("hip", "false") == true;
    hideIPAddr.addEventListener("change", () => {
        GM_setValue("hip", hideIPAddr.checked);
    });
    if (hideIPAddr.checked) {
        document.querySelectorAll("span").forEach((aa) => {
            if ((aa.innerHTML + "").trim().startsWith("IP属地")) {
                aa.style = "display:none";
            }
        });
    }
    //快捷发言
    let fastMsg = document.querySelector("#fast_send_msg");
    fastMsg.checked = GM_getValue("fmg", "false") == true;
    fastMsg.addEventListener("change", () => {
        GM_setValue("fmg", fastMsg.checked);
        document.querySelector("#fast_send_msg_ct").style = "display:"+(fastMsg.checked?"block":"none");
    });
    //不显示签名
    let hideUserSign = document.querySelector("#hide_user_sign");
    hideUserSign.checked = GM_getValue("hsg", "false") == true;
    hideUserSign.addEventListener("change", () => {
        GM_setValue("hsg", hideUserSign.checked);
    });
    if (hideUserSign.checked) {
        document.querySelectorAll(".sign")?.forEach((sg) => {
            sg.style = "display:none";
        });
    }
    fetch("https://lalaki.cn/up/")
        .then(async (res) => ({
        status: res.status,
        body: await res.text(),
    }))
        .then(({ status, body }) => {
        if (status == 200 && body != FINAL_VERSION) {
            document.querySelector("#up_pcbeta_tools").style.display = "inline";
        } else {
            document.querySelector("#up_pcbeta_tools").innerHTML =
                "版本号: V" + FINAL_VERSION;
            document.querySelector("#up_pcbeta_tools").style.display = "inline";
            document
                .querySelector("#up_pcbeta_tools")
                .removeAttribute("href", location.href + "#");
            document.querySelector("#up_pcbeta_tools").setAttribute("target", "");
        }
    });
    document.querySelector("#tool_gui_save").onclick = () => {
        GM_setValue("denyUsers", document.querySelector("#deny_users_area").value);
        GM_setValue("fastMsgs", document.querySelector("#faster_msg_area").value);
        gui.style.display = "none";
        showDialog("配置已存储", "notice", "提示", () => {
            location.reload();
        });
    };
    //UI---
    //加载快捷发言
    const fastMsgList = GM_getValue("fastMsgs", "UNSET");
    if (fastMsgList != "UNSET") {
        let tmp = ("" + fastMsgList).trim();
        if (tmp != "") {
            document.querySelector("#faster_msg_area").value = tmp;
        }
    }
    let denyUsers = [];
    const denyList = GM_getValue("denyUsers", "UNSET");
    if (denyList != "UNSET") {
        let tmp = ("" + denyList).trim();
        if (tmp != "") {
            denyUsers = tmp.split("\n");
            document.querySelector("#deny_users_area").value = tmp;
        }
    }
    let me = (document.querySelector(".vwmy a")?.innerHTML + "").trim();
    document.querySelector("#postlist")?.childNodes.forEach((p) => {
        //在用户名后面添加拉黑按钮
        let pid = p.id;
        if (("" + pid).startsWith("post_")) {
            let user = document.querySelector("#" + pid + " .authi a");
            let username = ("" + user.innerHTML).trim();
            if (username != "" && denyUsers.indexOf(username) != -1) {
                p.style = "display:none";
            }
            let parent = user.parentNode;
            let block = document.createElement("a");
            block.innerHTML = "拉黑Ta";
            block.style = "float:right;cursor:pointer";
            block.onclick = () => {
                if (block.innerHTML == "已拉黑") {
                    return;
                }
                showDialog(
                    "确定要拉黑 <b>" + username + "</b> 吗?",
                    "confirm",
                    "询问",
                    () => {
                        document.querySelector("#deny_users_area").value =
                            document.querySelector("#deny_users_area").value +
                            "\n" +
                            username;
                        document.querySelector("#tool_gui_save").click();
                        block.innerHTML = "已拉黑";
                    }
                );
            };
            if (me != username) {
                parent.append(block);
            }
            //去掉引用内容
            let quote = document.querySelector("#" + pid + " .quote");
            denyUsers.forEach((du) => {
                if (("" + quote?.innerText).trim().startsWith(du)) {
                    quote.style = "display:none";
                }
            });
            //去掉点评内容
            document.querySelectorAll("#" + pid + " .pstl.xs1").forEach((x) => {
                let name = ("" + x.querySelector(".psti a").innerHTML).trim();
                if (name != "" && denyUsers.indexOf(name) != -1) {
                    x.style = "display:none";
                }
            });
        }
    });
    //屏蔽用户评分
    document.querySelectorAll(".rate li").forEach((r) => {
        let username = ("" + r.lastElementChild.innerText).trim();
        if (username != "" && denyUsers.indexOf(username) != -1) {
            r.style = "display:none";
        }
    });
    //屏蔽提醒消息
    document.querySelectorAll("dl").forEach((nt) => {
        let username = (nt.querySelector(".ntc_body a")?.innerHTML + "").trim();
        if (username != "" && denyUsers.indexOf(username) != -1) {
            nt.style = "display:none";
        }
    });
    //屏蔽主题贴子
    document.querySelectorAll(".pbw").forEach((t) => {
        let all = t.querySelectorAll("a");
        let last = all[all.length - 2];
        let username = ("" + last.innerHTML).trim();
        if (username != "" && denyUsers.indexOf(username) != -1) {
            t.style = "display:none";
        }
    });
    //屏蔽随便看看
    document.querySelectorAll("tbody").forEach((b) => {
        b.querySelectorAll("tr").forEach((tr) => {
            let username = ("" + tr.querySelectorAll("a")[3]?.innerHTML).trim();
            if (username != "" && denyUsers.indexOf(username) != -1) {
                tr.style = "display:none";
            }
        });
    });
    //屏蔽板块帖子
    document.querySelectorAll(".by a").forEach((un) => {
        let username = (un.innerHTML + "").trim();
        if (username != "" && denyUsers.indexOf(username) != -1) {
            let parent = un.parentNode;
            while (parent != null) {
                if (parent.nodeName == "TR") {
                    parent.style = "display:none";
                    break;
                }
                parent = parent.parentNode;
            }
        }
    });
    //屏蔽等级显示
    if (hideStar.checked) {
        document
            .querySelectorAll(".avatar_p")
            .forEach((a) => (a.style = "display:none"));
        document.querySelectorAll("p").forEach((st) => {
            if (("" + st.id).startsWith("g_up")) {
                st.style = "display:none";
            }
        });
    }
    //屏蔽徽章显示
    if (hideAva.checked) {
        document
            .querySelectorAll(".md_ctrl")
            .forEach((a) => (a.style = "display:none"));
    }
    //屏蔽论坛小表情
    if (hideExp.checked) {
        document.querySelectorAll("img").forEach((i) => {
            if (
                ("" + i.src).startsWith("https://bbs.pcbeta.com/static/image/smiley")
            ) {
                i.style = "display:none";
            }
        });
    }
    //一键客套
    let faster = document.createElement("span");
    if (fastMsg.checked) {
        document.querySelector("#fast_send_msg_ct").style = "display:block";
        setInterval(() => {
            if(document.querySelector(".area textarea")!=null){
                document.querySelector("#fwin_content_reply .fpd")?.append(faster);
                document.querySelector(".bar")?.append(faster);
            }
        }, 700);
    }
    faster.innerHTML = "&nbsp;&nbsp;常用语模板";
    faster.style = "position:absolute;cursor:pointer;user-select:none";
    faster.onclick = () => {
        let fasterUIGet = faster.parentNode.querySelector("ul");
        if (fasterUIGet != null) {
            if (fasterUIGet.style.display == "block") {
                fasterUIGet.style.display = "none";
            } else {
                fasterUIGet.style.display = "block";
            }
            return;
        }
        let fasterListUI = document.createElement("ul");
        fasterListUI.style =
            "left:" +
            faster.offsetLeft +
            "px;padding:4px;margin-top: 26px;position:absolute;background:#fff; box-shadow: -5px 5px 10px rgba(0, 0, 0, 0.2),5px 5px 10px rgba(0, 0, 0, 0.2),0 5px 10px rgba(0, 0, 0, 0.2);";
        let fastMsgs1 = document.querySelector("#faster_msg_area").value.trim();
        if (fastMsgs1 != "") {
            fasterListUI.innerHTML = "<style>.my-hover:hover{color:red;}</style>";
            fastMsgs1.split("\n").forEach((fm) => {
                let fasterListItem = document.createElement("li");
                fasterListItem.innerHTML = fm;
                fasterListItem.className = "my-hover";
                fasterListItem.style = "cursor:pointer";
                fasterListItem.onclick = () => {
                    document.querySelector(".area textarea").value =
                        fasterListItem.innerHTML;
                    fasterListUI.style.display = "none";
                };
                fasterListUI.append(fasterListItem);
            });
            faster.after(fasterListUI);
        }
    };
    //装逼模式
    let avas = [
        "https://i.pcbeta.com/static/image/common/medal_201209/zscj.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/yxbz.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/xcs.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/ycxf.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/rxhy.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/jdz.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/hdzz.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/cyxf.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/jydr.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/ryhy.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/yjsf.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/yxbs.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/nmxx.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/mhdr.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/kfdr.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/jsdr.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/jzt.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/byg.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/yxdr.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/xbs.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/xbs2.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/pcdr.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/tsgx.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/ss.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/rich.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/7.png",
        "https://i.pcbeta.com/static/image/common/medal_iety.png",
        "https://i.pcbeta.com/static/image/common/medal_surface1.png",
        "https://i.pcbeta.com/static/image/common/medal_movies.png",
        "https://i.pcbeta.com/static/image/common/medal_appx.png",
        "https://i.pcbeta.com/static/image/common/medal_zdx.png",
        "https://i.pcbeta.com/static/image/common/medal_book.png",
        "https://i.pcbeta.com/static/image/common/medal_8th.png",
        "https://i.pcbeta.com/static/image/common/medal_smdr.png",
        "https://i.pcbeta.com/static/image/common/medal_dianzan.png",
        "https://i.pcbeta.com/static/image/common/medal_windowsphone.png",
        "https://i.pcbeta.com/static/image/common/medal_worldcup.png",
        "https://i.pcbeta.com/static/image/common/medal_daxuesheng.png",
        "https://i.pcbeta.com/static/image/common/medal_9a.png",
        "https://i.pcbeta.com/static/image/common/Win_10_forerunner.png",
        "https://i.pcbeta.com/static/image/common/10.png",
        "https://i.pcbeta.com/static/image/common/medal_201209/medal_11th.png",
    ];
    if (showAllAva.checked) {
        let bava = document.createElement("p");
        bava.className = "md_ctrl";
        avas.forEach((au) => {
            let avico = document.createElement("img");
            avico.src = au;
            bava.append(avico);
        });
        document.querySelectorAll(".pil.cl").forEach((ckme) => {
            let ifMe = ckme.parentNode.querySelector(".authi a").innerHTML.trim();
            if (ifMe == me && me != "") {
                ckme.after(bava);
            }
        });
    }
    let shortcut = document.createElement("a");
    shortcut.innerHTML = "远景小助手";
    shortcut.style = "cursor:pointer;";
    shortcut.onclick = () => {
        gui.style.display = "block";
    };
    let alla = document.querySelectorAll("a");
    for (let i = 0; i < alla.length; i++) {
        if (alla[i]?.innerHTML == "马甲") {
            alla[i].before(shortcut);
            break;
        }
    }
    if (hideDetail.checked) {
        document.querySelectorAll(".pil.cl")?.forEach((dt) => {
            dt.style = "display:none";
        });
    }
})();