快速评论,支持掘金、CSDN 和简书

快速评论,支持掘金、CSDN 和简书。评论前请在 commentList 内填写你想要自动评论的内容。

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         快速评论,支持掘金、CSDN 和简书
// @namespace    https://github.com/NICEXAI
// @version      0.4
// @description  快速评论,支持掘金、CSDN 和简书。评论前请在 commentList 内填写你想要自动评论的内容。
// @author       afeyer
// @match        *://*.csdn.net/*
// @run-at document-end
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 自动过滤CSDN搜索列表内的下载内容
    const filterDownload = true;
    //当前评论的用户名,设置后如果当前用户已评论则不再开启快速评论
    const commentUserName = "Afeyer";
    // 请在此设置你想自动评论的内容,设置完毕后脚本会随机从评论列表内抽取一条自动回复
    const commentList = ["Leaflet 最新中文文档,可点击查看:https://leafletjs.cn", "Leaflet 中文文档更新了,详细内容可以查看:https://leafletjs.cn"];

    // 获取一个 button
    const getClickButton = function(fn) {
        let button = document.createElement("button"); //创建一个按钮
        button.textContent = "一键点赞评论"; //按钮内容
        button.style.width = "100px"; //按钮宽度
        button.style.height = "28px"; //按钮高度
        button.style.align = "center"; //文本居中
        button.style.color = "white"; //按钮文字颜色
        button.style.background = "#e33e33"; //按钮底色
        button.style.border = "1px solid #e33e33"; //边框属性
        button.style.borderRadius = "4px"; //按钮四个角弧度
        button.addEventListener("click", fn); //监听按钮点击事件
        return button;
    }

    // 过滤CSDN查询列表内的下载内容
    const filterCSDNArticle = function() {
        let csdnList = document.querySelectorAll(".list-container .list-item");
        let container = document.querySelector(".list-container .so-result-list");
        let downloadList = [];
        let articleList = [];
        let fragment = document.createDocumentFragment();

        if(csdnList.length) {
            for(let i = 0; i < csdnList.length; i ++) {
                let curDom = csdnList[i]

                if(!curDom.querySelector(".download-size")) {
                    articleList.push(curDom);
                } else {
                    downloadList.push(curDom);
                }
            }
        }

        if(articleList.length && downloadList.length) {
            for(let i = 0; i < articleList.length; i ++) {
                fragment.appendChild(articleList[i]);
            }

            container.innerHTML = ""
            container.appendChild(fragment)
            console.log("filter")
        }
    }


    const href = window.location.href
    //往CSDN详情页面注入操作
    if(href.match(RegExp(".*blog.csdn.net/.*/article/details/.*"))) {
        let button = getClickButton(function(){
            setTimeout(function(){
                let commentIndex = Math.floor(Math.random()* (commentList.length - 1)) ;//从 comment 随机读取一条内容进行回复
                document.getElementsByClassName("tool-item-comment")[0].click(); //打开评论区
                document.getElementById("comment_content").value = commentList[commentIndex]; //随机把一条预先写好的评论赋值到评论框里面
                document.getElementsByClassName("btn-comment")[0].click(); //发表评论
            },100);// setTimeout 0.1秒后执行
        })
        // 如果检测到当前页面已被评论,则无需往页面注入快捷操作
        let commentStatus = false;
        setTimeout(function(){
            if(commentUserName != "") {
                let commentUserList = document.querySelectorAll(".new-info-box .name");
                if(commentUserList.length) {
                    for(let i = 0; i < commentUserList.length; i ++) {
                        if(commentUserList[i].innerText == commentUserName) {
                            commentStatus = true
                        }
                    }
                }
            }
            if(commentStatus) return;
            let like_comment = document.getElementsByClassName('toolbox-list')[0]; //getElementsByClassName 返回的是数组,所以要用[] 下标
            like_comment.appendChild(button); //把按钮加入到 x 的子节点中
        }, 500)
    }

    // 过滤CSDN查询页内的下载内容
    if(href.match(RegExp(".*so.csdn.net/so/search/*"))) {
        setTimeout(function(){
            let container = document.querySelector(".list-container .so-result-list");
            if(!container) return;

            let observer = new MutationObserver(function(){
                filterCSDNArticle();
            });
            observer.observe(container, {
                subtree: true,
                childList: true
            })

            filterCSDNArticle()
        }, 500)
    }

})();