- // ==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/sweetalert2@11.12.2/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());
- }
- })();