b站自动点赞投币

自动b站点赞投币

// ==UserScript==
// @name         b站自动点赞投币
// @namespace    http://tampermonkey.net/
// @version      1.1.0
// @description  自动b站点赞投币
// @author       whiteGoose
// @match        https://www.bilibili.com/video/BV*
// @match        https://www.bilibili.com/bangumi/play/*
// @icon         http://www.bilibili.com/favicon.ico
// @require		 https://code.jquery.com/jquery-3.7.1.min.js
// @require		 https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.all.min.js
// @license      MIT
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValues
// ==/UserScript==

function GetUp() {
    let name = $(".up-avatar").attr("href");
    //    console.log(name);
    if (name != undefined) {
        name = name.split("/")[3];
        return name;
    }
}
function init_config(){
    let config=GM_getValue("config",undefined)
    if(!config){
        GM_setValue("config",{"chase_auto_thumsup":true})
        config=GM_getValue("config",undefined)
    }
    let bangumi_md;
    let video_type=bv.videoType;
    if(video_type=="bangumi"){
        bangumi_md=get_bangumi()
        if(config.chase_auto_thumsup){
            if(is_chasing()){
                if(!GM_getValue(bangumi_md)){
                    GM_setValue(get_bangumi(), [get_bangumi_name(), 0])
                }
            }
        }
    }
    return config
}

function get_bangumi() {
    let url = $("#__next > div.home-container > div.main-container > div.plp-l.sticky > div > div.mediainfo_mediaInfoWrap__nCwhA > a").attr("href")
    // console.log(url.split("/")[5])
    return url.split("/")[5]
}
function get_bangumi_name() {
    let name = $("#__next > div.home-container > div.main-container > div.plp-l.sticky > div > div.mediainfo_mediaInfoWrap__nCwhA > div > a.mediainfo_mediaTitle__Zyiqh").text()
    // console.log(name)
    return name
}

function GetUps() {
    let name = $(".membersinfo-upcard");
    console.log(name.length);
    for (var i = 0; i < name.length; i++) {
        console.log(name[i].children[0].href.split("/")[3]);
    }
    return name;
}
function GetUpName() {
    let name = $("#mirror-vdcon > div.right-container > div > div.up-panel-container > div.up-info-container > div.up-info--right > div.up-info__detail > div > div.up-detail-top > a.up-name")
    name = name.text().trim();
    if (name == "") {
        name = $("#mirror-vdcon > div.right-container.is-in-large-ab > div > div.up-panel-container > div.up-info-container > div.up-info--right > div.up-info__detail > div > div.up-detail-top > a.up-name");
        name = name.text().trim();
    }
    return name;
}
function AddId() {
    let id = GetId();
    GetUpName();
    if (id == "None") {
        if (bv.videoType == "video") {
            GM_setValue(GetUp(), [GetUpName(), 0]);  //数字0,1,2,3.只点赞,投一个币,投两个币,三连
            console.log("已添加");
        } else {
            GM_setValue(get_bangumi(), [get_bangumi_name(), 0])
            console.log("已添加番剧")
        }
        Init();
    }
    //    console.log(id);
}
function GetId() {
    let result;
    if (bv.videoType == "video") {
        result = GM_getValue(GetUp(), "None");
    } else {
        result = GM_getValue(get_bangumi(), "None");
    }
    return result;
}
function DeleteId() {
    if (bv.videoType == "video") {
        let deleteResult = GM_deleteValue(GetUp());
    } else {
        let deleteResult = GM_deleteValue(get_bangumi());
    }
    console.log("已删除");
    Init();
}
function GetListId() {
    console.log(GM_listValues());
}
function GetListName() {
    let list = GM_listValues();
    // console.log(list)
    let data = [];
    for (var i = 0; i < list.length; i++) {
        // console.log(GM_getValue(list[i]),list[i]);
        if(list[i]=="config"){
            continue
        }
        if (bv.videoType == "video") {
            if (list[i].includes("md")) {
                continue
            }
        } else {
            if (!list[i].includes("md")) {
                continue
            }
        }
        let status = GM_getValue(list[i]);
        let result = { 'uid': list[i], 'name': status[0], 'mode': status[1] }
        data.push(result)
    }
    return data;
}
//投币
function toubi(result = null) {
    //    console.log("tou?");
    if(bv.videoType=="video"){
        let dianzanr = $("#arc_toolbar_report > div.video-toolbar-left > div.video-toolbar-left-main > div:nth-child(1) > div").attr("class") == "video-like video-toolbar-left-item on";
        if (dianzanr == true) return false;
        let toubis = $("#arc_toolbar_report > div.video-toolbar-left > div.video-toolbar-left-main > div:nth-child(2) > div");
        toubis.click();
        setTimeout(function () {
            
            if (result[1] == 1) {
                let quantity = $("body > div.bili-dialog-m > div > div > div.mc.clearfix > div.mc-box.left-con");
                quantity.click();
            }
            let confi = $("body > div.bili-dialog-m > div > div > div.coin-bottom > span");
            //    console.log(confi.text());
            confi.click();
        }, 1);
    }else{
        let coin_button=document.querySelector("#ogv_weslie_tool_coin_info")
        let enterEvent = new KeyboardEvent("keydown", {
            key: "w",
            code: "KeyQ",
            bubbles: true
        });
        coin_button.dispatchEvent(enterEvent);
        // 触发 keyup 事件
        let keyUpEvent = new KeyboardEvent("keyup", {
            key: "w",
            code: "KeyQ",
            bubbles: true
        });
        coin_button.dispatchEvent(keyUpEvent);
        setTimeout(function(){
            if (result[1] == 1) {
                let quantity = document.querySelector("#__next > div.home-container > div.main-container > div.dialogcoin_coin_dialog_mask__BEw2o > div > div > div.dialogcoin_mc__JNSq7");
                console.log(quantity.children[0])
                quantity.children[0].dispatchEvent(new MouseEvent("click"))
            }
        },1)
    }
    return true;
}
//点赞
function dianzan() {
    if(bv.videoType=="video"){
        let dianzanr = $("#arc_toolbar_report > div.video-toolbar-left > div.video-toolbar-left-main > div:nth-child(1) > div").attr("class") == "video-like video-toolbar-left-item on";
        // console.log(dianzanr);
        if (dianzanr == true) return true;
        let button = $("#arc_toolbar_report > div.video-toolbar-left > div.video-toolbar-left-main > div:nth-child(1) > div");
        if (button == undefined) return false;
        button.click();
    }else{
        let thumsup_button=document.querySelector(".like");
        // console.log(thumsup_button)
        if(thumsup_button==undefined)return false;
        if(thumsup_button.className=="like on")return true;
        let enterEvent = new KeyboardEvent("keydown", {
            key: "q",
            code: "KeyQ",
            bubbles: true
        });
        thumsup_button.dispatchEvent(enterEvent);
        // 触发 keyup 事件
        let keyUpEvent = new KeyboardEvent("keyup", {
            key: "q",
            code: "KeyQ",
            bubbles: true
        });
        thumsup_button.dispatchEvent(keyUpEvent);
    }
    return true;
}
//初始化按钮
function Init() {
    let button = $("#gooseAdd");
    let button2 = $("#gooseSetting");
    let button3 = $("#gooseInfo");
    // let buttons=$(".gooseCards");
    // if(buttons!="undefined"){
    //     buttons.each((index,element)=>{
    //         $(element).remove();
    //     })
    // }
    button.remove();
    button2.remove();
    button3.remove();
    SetButton();
}
//设置按钮
function SetButton() {
    // let upDiv = $("#mirror-vdcon > div.right-container.is-in-large-ab > div > div.up-panel-container > div.up-info-container > div.up-info--right > div.up-info__btn-panel");
    //关注行
    let upDiv2 = $("#mirror-vdcon > div.right-container.is-in-large-ab > div > div.up-panel-container > div.up-info-container > div.up-info--right > div.up-info__btn-panel > div");
    //up名字行
    let upDiv3 = $("#mirror-vdcon > div.right-container.is-in-large-ab > div > div.up-panel-container > div.up-info-container > div.up-info--right > div.up-info__detail > div > div.up-detail-top");
    let upDiv1 = $("#mirror-vdcon > div.right-container.is-in-large-ab > div > div.up-panel-container > div.up-info-container > div.up-info--left > div > a > div > div > img");
    let now_type = bv.videoType;
    let combinit = $(".membersinfo-upcard");
    let div4 = $("#mirror-vdcon > div.right-container > div > div.up-panel-container");
    let customerDiv = $("<div id='gooseCustomerDiv'></div>");
    if (now_type == "bangumi") {
        div4 = $("#__next > div.home-container > div.main-container > div.plp-l.sticky > div > div.mediainfo_mediaInfoWrap__nCwhA > div > div.mediainfo_mediaToolbar__8Q7bn");
    }
    div4.append(customerDiv);
    let ups = GetId();
    customerDiv.css({
        "text-align": "center",
    })
    let infoButton = InitInfoButton();
    customerDiv.append(infoButton);
    if (combinit.length != 0) {
        console.log(ups)
    } else {
        if (ups != "None") {
            let settingButton = InitSettingButton();
            customerDiv.append(settingButton);
        }
        let button = InitButton();
        customerDiv.append(button);
    }
}
//获取添加的按钮
function InitButton() {
    is_chasing()
    let result = GetId();
    let value = "";
    if (result == "None") {
        value = "添加";
    } else {
        value = "删除";
    }
    let button = document.createElement("input");
    button.setAttribute("id", "gooseAdd");
    button.setAttribute("value", value);
    button.setAttribute("type", "button");
    let styles = "border-radius:6px;border-color:pink;margin-left:10px;height:auto;width:25%;background-color:white;"
    button.setAttribute('style', styles);
    if (bv.videoType == "bangumi") {
        button.style.width = "auto";
    }
    if (value == "添加") {
        $(button).on("click", AddId);
    } else {
        $(button).on("click", DeleteId);
    }
    return button;
}
//获取设置按钮
function InitSettingButton() {
    let result = GetId()[1];
    let value = whatModeIs(result);
    let button = document.createElement("input");
    button.setAttribute("id", "gooseSetting");
    button.setAttribute("value", value);
    button.setAttribute("type", "button");
    let styles = "border-radius:6px;border-color:pink;margin-left:10px;height:auto;width:25%;background-color:white;"
    button.setAttribute('style', styles);
    button.addEventListener("click", setting);
    return button;
}
//获取信息按钮
function InitInfoButton() {
    let button = document.createElement("input");
    button.setAttribute("id", "gooseInfo");
    button.setAttribute("value", "列表");
    button.setAttribute("type", "button");
    let styles = "border-radius:6px;border-color:pink;margin-left:10px;height:auto;width:25%;background-color:white;"
    button.setAttribute('style', styles);
    if (bv.videoType == "bangumi") {
        button.style.width = "auto"
        button.style.height = "31.98px"
    }
    button.addEventListener("click", Info);
    return button;
}
//信息详情
function Info() {
    let text =
    `<input type="checkbox" id="chase_auto_thumsup" name="chase_auto_thumsup" value="chase_auto_thumsup">` +
    `<label for="chase_auto_thumsup">追番自动选择点赞</label>` +
    "<table id='gooseTable'>" +
    "<thead>" +
    "<tr>" +
    `<td>${bv.videoType == "video" ? "uid" : "md"}</td>` +
    `<td>${bv.videoType == "video" ? "up名" : "番剧名"}</td>` +
    "<td>设置</td>" +
    "<td>操作</td>" +
    "</tr>" +
    "</thead>" +
    "<tbody id='gooseUpsBody'>" +
    "</tbody>" +
    "</table>";
    Swal.fire({
        title: '自动点赞的列表',
        html: text,
        showConfirmButton: false,
        showCloseButton: true,
    })
    // console.log($(".like"))
    // console.log($(".like").attr("class"))
    let config=GM_getValue("config");
    $("#chase_auto_thumsup").prop("checked",config.chase_auto_thumsup)
    let data = GetListName();
    data.forEach((element) => {
        let uid = element['uid'];
        let name = element['name'];
        let mode = whatModeIs(element['mode']);
        let tr = `
        <tr>
            <td class="canclick" id="gooseUid">${uid}</td>
            <td class="canclick">${name}</td>
            <td class="canclick" id="gooseMode">${mode}</td>
            <td>删除</td>
        </tr>
        `;
        $("#gooseUpsBody").append(tr);
        $("#gooseTable").css({
            "width": "100%",
            "border-collapse": "collapse",
            "background-color": "#e9e9e9",
        })
        $("#gooseTable thead tr").css({
            "background-color": "lightskyblue",
        })
        $("#gooseTable tr td").css({
            "border": " 1px solid #ccc",
            "cursor": "pointer",
        })
    })
    $("#chase_auto_thumsup").click(function(){
        let conf=GM_getValue("config")
        let now_statu=this.checked
        conf.chase_auto_thumsup=now_statu
        GM_setValue("config",conf)
    })
    $("#gooseTable tbody tr").each((index, element) => {
        let uid = $(element).children()[0];
        let name = $(element).children()[1];
        let mode = $(element).children()[2];
        let del = $(element).children()[3];
        let thisId = $(uid).text()
        let thisName = $(name).text();
        if (thisId == (bv.videoType == "video" ? GetUp() : get_bangumi())) {
            $(element).css({ "background-color": "#bae5ff" })
        }
        $(uid).click(() => {
            // console.log($(uid).text(),$(uid).val())
            if (bv.videoType == "video") {
                window.open("https://space.bilibili.com/" + $(uid).text(), "_blank")
            } else {
                window.open("https://www.bilibili.com/bangumi/media/" + $(uid).text(), "_blank")
            }
        })
        $(name).click(() => {
            if (bv.videoType == "video") {
                window.open("https://space.bilibili.com/" + $(uid).text(), "_blank")
            } else {
                window.open("https://www.bilibili.com/bangumi/media/" + $(uid).text(), "_blank")
            }
        })
        $(mode).click(() => {
            let result = GM_getValue(thisId);
            result[1] = (result[1] + 1) % 3;
            GM_deleteValue(thisId);
            GM_setValue(thisId, [thisName, result[1]]);
            $(mode).text(whatModeIs(result[1]))
            // console.log(result);
            Init();
        })
        $(del).click(() => {
            console.log($(element));
            GM_deleteValue($(uid).text());
            $(element).remove()
            Init();
        })
    })
}
function whatModeIs(id) {
    let mode = "";
    switch (id) {
        case 0:
            mode = bv.videoType=="video"?"只点赞":"点赞";
            break;
        case 1:
            mode = "投一个币";
            break;
        case 2:
            mode = "投两个币";
            break;
        case 3:
            mode = "三连";
            break;
    }
    return mode;
}
//设置 按钮的事件
function setting() {
    let list = GetId()
    list[1] = (list[1] + 1) % 3;
    GM_deleteValue(GetId());
    if (bv.videoType == "video") {
        GM_setValue(GetUp(), [GetUpName(), list[1]]);
    } else {
        GM_setValue(get_bangumi(), [get_bangumi_name(),0]);
    }
    Init();
}
function GetBV() {
    let URL = window.location.href.split("/")[4];
    return URL;
}
function IsJunmping(BV, send) {
    console.log(BV, send);
    console.log(BV != GetBV());
    if (BV == null) {
        console.log("这是刚进网页的时候");
    }
    if (BV == GetBV() && send != 0) {
        console.log("还没跳转哦")
        setTimeout(IsJunmping, 3000, BV, send -= 1)
    }
    if (BV != GetBV()) {
        console.log("跳转啦!")
        setTimeout(PageInit(), 1);
        return true;
    }
    if (send == 0) {
        console.log("你是不是取消了呀?")
        return false;
    }
    console.log("what happend?");
}

function is_chasing() {
    let chase = $("#ogv-weslie-media-info-follow > span").text()
    // console.log(chase)
    return chase == "已追番"
}

let youbian = false;
let alla = false;
let ended = false;
//页面初始化
function PageInit() {
    let mq = new MessageQueue(1000, 10);
    console.log("pageinit running")
    setTimeout(function () {
        mq.Clear()
        let BV = GetBV();
        let video_type=bv.videoType
        let config=GM_getValue("config")
        init_config()
        Init();            //初始化按钮
        //合作视频卡片
        let combinit = $(".membersinfo-upcard");
        let result;
        let max = 0;
        if (combinit.length != 0) {
            console.log("这是合作视频")
            combinit.each((index, element) => {
                let up_uid = $(element.children[1].children[0]).attr("href").split("/")[3]
                let up_value = GM_getValue(up_uid, "None")
                if (up_value != "None") {
                    if (up_value[1] > max) {
                        max = up_value[1]
                    }
                    result = [up_value[0], max]
                }
            })
        } else {
            result = GetId();
        }

        if (result != "None") {    //如果被加入了,则投币
            switch (result[1]) {
                case 0:
                    mq.Add(dianzan);
                    break;
                case 1:
                case 2:
                    mq.Add(function temptou() {
                        toubi(result)
                    });
                    break;
                case 3:
                    break;
            }
        }
        mq.Run();
    }, 4000);
}
class MessageQueue {
    functionArray = [];
    timeouts;
    constructor(timeout, timeouts = 10) {
        this.timeout = timeout;
        this.timeouts = timeouts;
        this.timeouted = 0;
    }
    Add(func) {
        this.functionArray.push(func);
    }
    Print() {
        console.log(this.functionArray);
        // this.functionArray.forEach(element => {
        //     element();
        // });
        // console.log("print is ending");
    }
    async Run() {
        if (this.isRunning) {
            console.log("任务队列已经在运行中,无法重复调用");
            return; // 如果正在运行,则返回
        }
        this.isRunning = true; // 标记为正在运行
        console.log("函数列表:", this.functionArray, "超时计数器:", this.timeouted);
        while (this.functionArray.length > 0) {
            let result;
            const currentFunc = this.functionArray[0];
            result = currentFunc();
            console.log("现在正在运行的函数名为:", currentFunc.name);
            if (result === true || result === 1) {
                this.timeouted = 0;
                this.functionArray.shift(); // 移除已完成的函数
            } else {
                this.timeouted++;
            }
            if (this.timeouted === this.timeouts) {
                console.log("超时!超时的函数为:", currentFunc.name);
                this.isRunning = false; // 结束运行
                this.functionArray = [];
                return false;
            }
            let timeout = (this.timeouted * 150) + 1;
            await this.delay(timeout); // 延时函数
        }

        console.log("所有任务已完成");
        this.isRunning = false; // 结束运行
        return true;
    }
    Clear() {
        this.functionArray = [];
        this.isRunning = false; // 停止运行标志
        this.delay((this.timeouted * 150) + 1)
        this.timeouted = 0; // 重置超时计数器
    }
    delay(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
}

class BVGet {
    bvnow;
    videoType; // {0==番剧}
    constructor() {
        this.reset()
    }
    reset() {
        var now = window.location.pathname.split("/")
        this.videoType = now[1];
        if (this.videoType == "bangumi") {
            this.bvnow = now[3];
        }
        if (this.videoType == "video") {
            this.bvnow = now[2];
        }
        console.log(this.bvnow)
        // console.log(`这个页面的类型是${this.videoType}`)
    }
    bvGet() {
        var bvnow = window.location.pathname.split("/");
        if (this.videoType == "bangumi") {
            bvnow = bvnow[3];
        }
        if (this.videoType == "video") {
            bvnow = bvnow[2];
        }
        // console.log(this.bvnow,bvnow);
        // console.log(bvnow == this.bvnow)
        if (bvnow != this.bvnow) {
            this.isJumping();
        }
    }
    isJumping() {
        let temp = this.bvnow
        this.reset()
        if (temp == '') {
            // console.log("页面初始化!")
            return
        }
        console.log(`bv已经从${temp}跳转:${this.bvnow}`)
        PageInit();
    }
    run() {
        setInterval(() => this.bvGet(), 2000);
    }
}
var bv = new BVGet();
(function () {
    window.onload = function () {
        bv.run();
        PageInit();
        // console.log(GetUp());
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址