B友成分指示器

B站评论区自动标注成分(基于原神指示器的一些修改)

目前為 2022-09-15 提交的版本,檢視 最新版本

// ==UserScript==
// @name        B友成分指示器
// @namespace    NEKOnyako
// @version      0.1.9
// @description  B站评论区自动标注成分(基于原神指示器的一些修改)
// @author       NEKOnyako,xulaupuz
// @match        *://www.bilibili.com/video/*
// @match        *://www.bilibili.com/*
// @icon          https://static.hdslb.com/images/favicon.ico
// @connect      bilibili.com
// @grant         GM_xmlhttpRequest
// @grant        window.onurlchange
// @license MIT
// @run-at document-end
// ==/UserScript==

(function() {

    'use strict';
    console.log('%c  bpcheck   %c 加载成功 ',"display: inline-block;color:#444;background-color:#eee ; padding:5px 0;border-radius: 5px;","")

    const hasData = new Set()
    //vtb标签开关
    let tagVtb=true
    //自定义标签
    let tag_data = [
        {tag_name:'原批',color:'#06c5ff',keyword:['钟离','#原神#','#雷电将军#','雷电将军','派蒙','原神','胡桃','优菈'],vtb:false},
        {tag_name:'粥畜',color:'#FB7299',keyword:['明日方舟','#明日方舟三周年#','罗德岛','整合运动','乌萨斯','方舟'],vtb:false},
        {tag_name:'农批',color:'#19273F',keyword:['王者荣耀','王者快跑','百里守约','KPL','LPL'],vtb:false},
        {tag_name:'隐藏|动态抽奖',color:'#333333',keyword:['#转发+关注抽奖#','#转发抽奖#','互动抽奖'],vtb:false},
        {tag_name:'喵喵露',color:'#11DD77',keyword:['猫雷','@猫雷NyaRu_Official','尿尿露'],vtb:true},
        {tag_name:'黑白狐',color:'',keyword:['Mana'],vtb:true}
    ]

    const is_new = document.getElementsByClassName('item goback').length != 0 // 检测是不是新版

    const get_pid = (c) => {
        if (is_new) {
            return c.dataset['userId']
        } else {
            return c.children[0].getAttribute('href').replace(/[^\d]/g, "")
        }
    }

    const get_comment_list = () => {
        if (is_new) {
            let lst = new Set()
            for (let c of document.getElementsByClassName('user-name')) {
                lst.add(c)
            }
            for (let c of document.getElementsByClassName('sub-user-name')) {
                lst.add(c)
            }
            return lst
        } else {
            return document.getElementsByClassName('user')
        }
    }

    async function HttpRequestBlog(pid){
        return new Promise((resolve,reject)=>{
            GM_xmlhttpRequest({
                    method: "get",
                    url: 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?&host_mid='+pid,
                    data: '',
                    headers:  {
                        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
                    },
                    onload: (res)=>{
                       if(res.status === 200){
                            let userData = JSON.stringify(JSON.parse(res.response).data)
                            return resolve(userData)
                            }else if(res.status === 403){
                                console.log("拒绝访问")
                                return
                            }else return
                    }
        })
    })
    }

    //url变化时获取uptag
    window.addEventListener('urlchange', ()=>{
        getTagUp()
    })


    setInterval(()=>{
    let commentlist = get_comment_list()
         if (commentlist.length != 0){
             commentlist.forEach(async c=>{
                 let pid = get_pid(c)

                 let resUserData =await HttpRequestBlog(pid)
                     tagCheck(resUserData,c,pid)

                     hasData.add(pid)

                 })
         }
        //检测URL变化
        window.addEventListener('urlchange', ()=>{
            const hasData = new Set()
            window.location.reload('#v_upinfo')
        })
    },4000)


     //获取up主tag
     async function getTagUp() {
          let elUpName = document.querySelector('div.name').children[0]
         //window.location.reload(elUpName)
        //拿到up主pid
        let upPid = document.querySelector('.username').getAttribute('href').replace(/[^\d]/g, "")
        let res = await HttpRequestBlog(upPid)

        if(res){
            elUpName.style.overflow='visible'
            //添加tag
            tagCheck(res,elUpName,upPid)
            hasData.add(upPid)
        }};

     //追加tag
     function tagCheck(resUserData,element,pid){
         tag_data.forEach(item=>{
             const tagSpan =`<span style='background-color:${item.color};min-width:70px;border-radius: 8px;color: #FFFFFF;margin-right:5px;display:inline-block;text-align:center;'>${item.tag_name}</span>`
             //判断关键词
             if((item.keyword).length>=2){
                 if (item.keyword.find(keyword=>resUserData.includes(keyword))&&!hasData.has(pid)&&tagVtb){
                     element.innerHTML += tagSpan
                 }else if(item.keyword.find(keyword=>resUserData.includes(keyword))&&!hasData.has(pid)&&!tagVtb&&!item.vtb){
                     element.innerHTML += tagSpan
                 }else{
                     return
                 }
             }else{
                 if (resUserData.includes(item.keyword)&&!hasData.has(pid)&&tagVtb){
                     element.innerHTML += tagSpan
                 }else if(resUserData.includes(item.keyword)&&!hasData.has(pid)&&!tagVtb&&!item.vtb){
                     element.innerHTML += tagSpan
                 }else if((resUserData.includes('Mana')&&!hasData.has(pid)&&tagVtb)){
                     element.innerHTML += `<span style='background:-webkit-linear-gradient(left ,#F3F9F9,#31262F);width:70px;border-radius: 8px;color: #FFFFFF;display:inline-block;text-align:center;'>黑白狐</span>`
                 }
                 else{
                     return
                 }
             }
         })
     }
    })
();

QingJ © 2025

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