autodouban3

try to take over the world!

Terá de instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Terá de instalar uma extensão como Tampermonkey para instalar este script.

Terá de instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Terá de instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Terá de instalar uma extensão como Tampermonkey para instalar este script.

Terá de instalar uma extensão de gestão de scripts de utilizador para instalar este script.

(Já tenho um gestor de scripts de utilizador, deixe-me instalá-lo!)

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

(Já tenho um gestor de estilos de utilizador, deixe-me instalá-lo!)

// ==UserScript==
// @name         autodouban3
// @namespace    http://tampermonkey.net/
// @version      0.9
// @description  try to take over the world!
// @author       You
// @match        https://music.douban.com/subject/**
// @match        https://book.douban.com/subject/**
// @match        https://www.douban.com/group/**
// @match        https://www.douban.com/people/**
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
function sleep(milliseconds) {
    const date = Date.now();
    let currentDate = null;
    do {
        currentDate = Date.now();
    } while (currentDate - date < milliseconds);
}


(function () {
    'use strict';

    var blacklists;
    blacklists = GM_getValue("blacklists");


    var blockedtarget;
    blockedtarget = GM_getValue("blockedtarget");

    var blackdone_lists;
    blackdone_lists = GM_getValue("blackdone_lists");


    var idiv = document.createElement("div");
    idiv.id = "_myDiv";

    var idivStyle = idiv.style;
    idivStyle.position = "fixed";
    idivStyle.display = "flex";
    idivStyle.width = "5%";
    idivStyle.height = "5%";
    idivStyle.left = "50%";
    idivStyle.top = "20%";
    idivStyle.fontSize = "15px"
    idiv.textContent = "!";
    idiv.style.backgroundColor = "blue";
    var startTask;
    startTask = GM_getValue("startTask");

    if (startTask) {
        idiv.style.backgroundColor = "red";

    } else {
        idiv.style.backgroundColor = "blue";

    }


    idiv.onclick = function (e) {

        if (startTask) {
            startTask = "";
            idiv.style.backgroundColor = "blue";

        } else {
            startTask = "1";
            idiv.style.backgroundColor = "red";

        }
        GM_setValue("startTask", startTask);
        location.reload();

    };


    document.body.appendChild(idiv);

    if (!startTask) {

        return;
    }



    if (! window.location.href.match("https://www.douban.com/people")) {

        // find all user who mark 3,4,5 star
        var badUsers = document.evaluate('//div[@class="article"]//dl[@class="obu"]/dt/a//@href | //div[@id="content"][h1[contains(text(), "小组成员管理")]]//div[@class="article"]//div[@class="member-list"]//@href | //div[@class="sub_ins"]//td[p/span[@class="allstar30" or @class="allstar40" or @class="allstar50"]]/div//@href | //div[@class="comments-wrapper"]//div[@class="comment"]//span[@class="comment-info"][span[contains(@class, "allstar30") or contains(@class, "allstar40") or contains(@class, "allstar50")]]//@href', document, null, XPathResult.ANY_TYPE, null);
        var badUsers_links = [];
        var l = badUsers.iterateNext();
        while (l) {
            badUsers_links.push(l.value);
            l = badUsers.iterateNext();
        }

        // update all blacklists
        var badUsers_links_str = "";
        badUsers_links_str = badUsers_links_str.concat(badUsers_links);
        if (blacklists) {

            blacklists += "," + badUsers_links_str;

        } else {
            blacklists = badUsers_links_str;
        }

        // console.log("init blacklists:\n" + blacklists);

        // array to set
        let blacklists_arr = blacklists.split(",");
        let blacklists_set = new Set(blacklists_arr);
        blacklists_arr = Array.from(blacklists_set);
        blacklists = "";
        blacklists = blacklists.concat(blacklists_arr);
        // console.log("clan blacklists:\n" + blacklists);

        GM_setValue("blacklists", blacklists);

        // find next page
        var nextPage = document.evaluate('//div[@class="article"]//div[@class="paginator"]//span[@class="next"][a[@href]]//@href | //div[@class="paginator"]//span[@class="next"][//a[@href]]//@href | //div[@class="paginator-wrapper"]//a[contains(text(), "后一页")]//@href | //div[@class="paginator"]//span[@class="next"]//@href', document, null, XPathResult.ANY_TYPE, null);

        var nextPageUrl = nextPage.iterateNext();
        if (nextPageUrl) {
            //console.log("go to next page");
            window.location.href = nextPageUrl.value;
        } else {
            console.log("get final page, start block user");
            var blacklists_;

            blacklists_ = GM_getValue("blacklists");
            // console.log("blacklists_:\n" + blacklists_);


        }

    }

    if (window.location.href.match("https://www.douban.com/people")) {



        let isFriend = document.evaluate('//div[@class="user-group"]//span[@class="user-cs"][contains(text(),"已关注")]', document, null, XPathResult.ANY_TYPE, null);

        let isFriend_tag = isFriend.iterateNext();

        var blacklists_vec = blacklists.split(",");
        // console.log("blacklists length :" + blacklists_vec.length);
        // console.log("window.location.href:\n" + window.location.href);
        // console.log("blacklists:\n" + blacklists);
        sleep(10);

        if ( blockedtarget == window.location.href || blacklists) {
            // console.log("111try block :\n" + window.location.href);
            // console.log("222try block :\n" + blacklists);
            if (!isFriend_tag && (blockedtarget == window.location.href || blacklists.match(window.location.href))) {
                // console.log("333try block :\n" + window.location.href);


                if (typeof PEOPLE_NAME !== "undefined") {
                    var msg = PEOPLE_NAME + '将不能:\n- 关注你(已关注的会自动取消)\n- 给你发豆邮\n- 在你的日记、相册、广播、推荐、留言板留言\n\n确定把' + PEOPLE_NAME + '加入黑名单?';
                    console.log(msg);
                    $.postJSON_withck(
                        '/j/contact/addtoblacklist',
                        { 'people': PEOPLE_ID },
                        function (r) {
                            if (r.result) {
                                //location.reload();

                            } else {
                                //alert(r.msg);
                            }
                        }
                    );



                    // update a blocked list
                    if(blackdone_lists){
                        blackdone_lists+="," + window.location.href;
                    }else{
                        blackdone_lists=  window.location.href;


                    }
                    GM_setValue("blackdone_lists", blackdone_lists);
                } else {
                    // console.log("fuck");




                }

            }

            // go to new page
            let blacklists_vec_sample = blacklists_vec.pop();
            if (blacklists_vec_sample) {



                if(blackdone_lists){
                    while(blackdone_lists.match(blacklists_vec_sample)){
                        blacklists_vec_sample = blacklists_vec.pop();
                        if(!blacklists_vec_sample){
                            console.log("work done");
                            return;

                        }
                    }
                }



                console.log("go to new page: " + blacklists_vec_sample);
                console.log("blacklists_vec.length: " + blacklists_vec.length);

                let blacklists_vec_str = "";

                blacklists_vec_str = blacklists_vec_str.concat(blacklists_vec);
                GM_setValue("blacklists", blacklists_vec_str);
               

                GM_setValue("blockedtarget", blacklists_vec_sample);
                window.location.href = blacklists_vec_sample;

            } else {
                console.log("work done");


            }




        } else {
            // console.log("fuck2");

        }
    }







})();