勞資不想看到你個sb

通過網頁操作, 達成屏蔽與解除屏蔽使用者

当前为 2024-03-04 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         勞資不想看到你個sb
// @namespace    http://tampermonkey.net/
// @version      1.04
// @description  通過網頁操作, 達成屏蔽與解除屏蔽使用者
// @author       You
// @match        *://jandan.net/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=jandan.net
// @grant        none
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// ==/UserScript==


(function () {
    // 檢查 localStorage 中是否存在 banCode 鍵值對 , 若不存在則新增一個空物件
    localStorage.getItem('banCode') == undefined ? localStorage.setItem('banCode', '{}') : console.log('Here is who you ban: ' + localStorage.getItem('banCode'))

    // 將 localStorage 中的 banCode 鍵值對解析為 JSON 物件
    var banCode = JSON.parse(localStorage.getItem('banCode'))

    // 計算 banCode 物件中的鍵值對數量
    var banCodeKeys = Object.keys(banCode).length

    // 獲取網頁中的所有評論列表
    var comment = document.getElementsByClassName("commentlist")
    var lis = comment[0].getElementsByTagName("li")

    // 獲取網頁中的所有 .text 元素
    var row = document.querySelectorAll('.text')


    // 定義屏蔽按鈕
    var voteElements = document.querySelectorAll(".jandan-vote")

    //定義unban函式
    function unban(e) {
        // 獲取 li 元素
        var li = e.parentNode.parentNode.parentNode;

        // 獲取作者姓名
        var author = li.getElementsByClassName("author")[0].getElementsByTagName("strong")[0].textContent;

        // 確認是否解除屏蔽
        if (confirm("讓我看看 " + author + " 這傢夥有什麼長進")) {
            // 從 banCode 物件中刪除 author 對應的鍵值對
            delete banCode[author];

            // 將更新後的 banCode 物件存入 localStorage
            localStorage.setItem('banCode', JSON.stringify(banCode));

            // 重新載入頁面
            location.reload();
        }
    }


    // 定義 ban() 函式
    function ban(e) {
        // 獲取 li 元素
        var li = e.parentNode.parentNode.parentNode;

        // 獲取作者姓名
        var author = li.getElementsByClassName("author")[0].getElementsByTagName("strong")[0];

        // 獲取作者防偽碼
        var privCode = $(author).attr('title').split('防伪码:').pop();

        // 確認是否屏蔽
        if (confirm("您確定要屏蔽 " + author.textContent + " 嗎?")) {
            // 將作者姓名和防偽碼新增至 banCode 物件中
            banCode[author.textContent] = privCode;

            // 將更新後的 banCode 物件存入 localStorage
            localStorage.setItem('banCode', JSON.stringify(banCode));

            // 重新載入頁面
            location.reload();
        }
    }

    // 屏蔽防偽碼標記用戶
    for (var i = lis.length - 1; i >= 0; --i) {
        // 獲取作者姓名
        var author = lis[i].getElementsByClassName("author")[0].getElementsByTagName("strong")[0];

        // 遍歷 banCode 物件中的所有鍵值對
        for (var j = 0; j < banCodeKeys; ++j) {
            // 若作者姓名與 banCode 物件中的鍵值對匹配
            if (author.textContent === Object.entries(banCode)[j][0]) {
                // 獲取評論內容
                var contentBox = lis[i].getElementsByClassName("text")
                var content = $(contentBox).find('p:not(.bad_content)')[0].innerHTML.split('<br>').join()

                // 將評論內容替換為 "[已屏蔽]" 標記
                lis[i].getElementsByClassName("text")[0].innerHTML = `<del style="display: inline-block; margin-bottom: 20px; margin-top: 7px; margin-right: 5px;"><span class="math-inline">${author.textContent} - 已屏蔽</span></del><i title="${content}" style="display: inline-block; font-size: 10px; ">偷看一下(懸停)</i>`;

                // 跳出內層迴圈
                break
            }
        }
    }


    // 遍歷所有 .jandan-vote 元素
for (var x = 0; x < voteElements.length; x++) {
    // 創建一個新的 a 元素
    var button = document.createElement("a");

    // 若評論內容包含 "[已屏蔽]" 標記
    if (row[x].innerHTML.includes('del')) {
        // 設定按鈕文字為 "[解除屏蔽]"
        button.textContent = "[解除屏蔽]";

        // 為按鈕添加點擊解除屏蔽函式
        button.addEventListener("click", function () {
            unban(this);
        });
    } else {
        // 設定按鈕文字為 "[屏蔽]"
        button.textContent = "[屏蔽]";

        // 為按鈕添加點擊屏蔽函式
        button.addEventListener("click", function () {
            ban(this);
        });
    }

    // 設定按鈕顏色為 "#c8c7cc"
    button.style.color = "#c8c7cc";

    // 將按鈕插入到 .jandan-vote 元素的開頭
    voteElements[x].prepend(button);
}
})();