您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
B站视频及动态评论区自动标注各种游戏玩家,依据是动态里是否有各种游戏相关,可自定义关键词,提供给各位乐子人,纯图一乐,默认添加了原神、幻塔、明日方舟等高热度游戏(乐子人角度)
// ==UserScript== // @name 乐子人玩家指示器 // @version 0.9 // @description B站视频及动态评论区自动标注各种游戏玩家,依据是动态里是否有各种游戏相关,可自定义关键词,提供给各位乐子人,纯图一乐,默认添加了原神、幻塔、明日方舟等高热度游戏(乐子人角度) // @author xulaupuz,trychen,abcd1234564499sc // @match https://*.bilibili.com/* // @icon https://static.hdslb.com/images/favicon.ico // @connect bilibili.com // @grant GM_xmlhttpRequest // @license GPLv3 // @run-at document-end // @namespace https://gf.qytechs.cn/users/958001 // ==/UserScript== (function() { 'use strict'; const solvedPid = new Set() const solvedDict = {} const checkArr = [] // 添加各种关键词、关注B站号的UID,以及对应标签 checkArr.push({ "tag":"原神玩家", "keywords":["原神"], "followings": [401742377] // 官方号的 UID }) checkArr.push({ "tag":"幻塔玩家", "keywords":["幻塔"], "followings": [586631367] // 官方号的 UID }) checkArr.push({ "tag":"明日方舟玩家", "keywords":["明日方舟"], "followings": [161775300] // 官方号的 UID }) checkArr.push({ "tag":"碧蓝航线玩家", "keywords":["碧蓝航线"], "followings": [233114659] // 官方号的 UID }) checkArr.push({ "tag":"崩坏三玩家", "keywords":["崩坏三","崩坏3"], "followings": [27534330] // 官方号的 UID }) checkArr.push({ "tag":"FGO玩家", "keywords":["fgo","fate grand order"], "followings": [233108841] // 官方号的 UID }) const blog = 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?&host_mid=' 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]['href'].replace(/[^\d]/g, "") } } const get_comment_list = () => { 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) } for (let c of document.getElementsByClassName('user')) { lst.add(c) } return lst } const get_tag = (context,checkArr) => { context = context.toLowerCase() let reTags = new Set() checkArr.forEach(checkDict => { // 检查动态内容 if (checkDict.keywords){ if (checkDict.keywords.find(keyword => context.includes(keyword))) { reTags.add(checkDict.tag) return } } // 检查关注列表 if (checkDict.followings){ if (checkDict.followings.find(keyword => context.includes(keyword))) { reTags.add(checkDict.tag) return } } }) return reTags } const create_tags = (elem,tags) =>{ // 动态使用的样式 let divModelStart = '<div class="true-love" style="width: ' let divModelMiddle = 'px; padding-left: 2px; padding-right: 0; border-color:rgba(169, 195, 233, 0.1803921568627451); color:rgba(87, 127, 184, 1); background-image: linear-gradient(90deg, rgba(244, 109, 67, 0.2), rgba(244, 109, 67, 0.2))"><div class="tinyfont">' let divModelEnd = '</div></div><div class="medal-level" style="border-color:rgba(169, 195, 233, 0.1803921568627451);color:rgba(154, 176, 210, 1) background-image: linear-gradient(90deg, rgba(158, 186, 232, 0.2), rgba(158, 186, 232, 0.2))"><div class="tinyfont">乐</div></div>' // 视频评论区使用的样式 let divModelStart2 = '<div class="composition-badge"><span class="composition-name">' let divModelEnd2 = '</span></div>' tags.forEach(tag =>{ var strLength = tag.length var modelLength = 12*strLength let divStr // 根据父节点判断当前元素类型 var parentNode = elem.parentNode var parentNodeCls = parentNode.className let checkContent let addNode let newNode = document.createElement("div") if(parentNodeCls=="user-info"){ //视频评论区主评论 divStr = divModelStart2 + tag + divModelEnd2 checkContent = parentNode.textContent addNode = parentNode newNode.setAttribute("class","composition-checkable") newNode.style="display: inline;" newNode.innerHTML = divStr } else if(parentNodeCls=="sub-user-info"){ // 视频评论区评论回复 divStr = divModelStart2 + tag + divModelEnd2 checkContent = parentNode.textContent addNode = parentNode newNode.setAttribute("class","composition-checkable") newNode.style="display: inline;" newNode.innerHTML = divStr } else if(parentNodeCls=="con ") { // 动态评论区主评论 divStr = divModelStart2 + tag + divModelEnd2 checkContent = parentNode.textContent let tmpNodeMain = document.createElement("span") tmpNodeMain.style="marging:5px;float:right;" var beforeNodeMain = elem.nextSibling parentNode.insertBefore(tmpNodeMain,beforeNodeMain) addNode = tmpNodeMain newNode.setAttribute("class","medal") newNode.style="padding-left:0px" newNode.innerHTML = divStr } else if(parentNodeCls=="reply-con") { // 动态评论区评论回复 divStr = divModelStart + modelLength + divModelMiddle + tag + divModelEnd checkContent = elem.textContent let tmpNode = document.createElement("span") var beforeNode = elem.getElementsByTagName("span")[0] elem.insertBefore(tmpNode,beforeNode) addNode = tmpNode newNode.setAttribute("class","medal") newNode.style="padding-left:0px" newNode.innerHTML = divStr } else { // 其他 console.log(parentNodeCls) console.log(elem.textContent) } if (checkContent.includes(tag) === false) { addNode.appendChild(newNode) } }) } console.log(is_new) console.log("正常加载") let jiance = setInterval(()=>{ let commentlist = get_comment_list() if (commentlist.length != 0){ // clearInterval(jiance) commentlist.forEach(c => { let pid = get_pid(c) if (solvedPid.has(pid)){ var nowTags = solvedDict[pid] create_tags(c,nowTags) return } //console.log(pid) let blogurl = blog + pid // let xhr = new XMLHttpRequest() GM_xmlhttpRequest({ method: "get", url: blogurl, 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: function(res){ if(res.status === 200){ //console.log('成功') let st = JSON.stringify(JSON.parse(res.response).data) let reTags = get_tag(st,checkArr) //console.log(reTags) create_tags(c,reTags) solvedPid.add(pid) solvedDict[pid]=reTags }else{ console.log('失败') console.log(res) } }, }); }); } }, 4000) // 添加标签样式 addGlobalStyle(` .composition-badge { display: inline-flex; justify-content: center; align-items: center; width: fit-content; background: #00AEEC26; border-radius: 10px; margin: -6px 0; margin: 0 5px; font-family: PingFang SC, HarmonyOS_Regular, Helvetica Neue, Microsoft YaHei, sans-serif; } .composition-name { line-height: 13px; font-size: 13px; color: #00AEEC; padding: 2px 8px; } .composition-icon { width: 25px; height: 25px; border-radius: 50%; border: 2px solid white; margin: -6px; margin-right: 5px; } `) function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址