新·三相之力指示器F

B站评论区自动标注三相玩家,依据是动态里是否有三相相关内容(基于原神指示器和原三相一些小的修改)

  1. // ==UserScript==
  2. // @name 新·三相之力指示器F
  3. // @namespace NightSwan
  4. // @version 0.37
  5. // @description B站评论区自动标注三相玩家,依据是动态里是否有三相相关内容(基于原神指示器和原三相一些小的修改)
  6. // @author xulaupuz&nightswan
  7. // @match https://www.bilibili.com/video/*
  8. // @match https://t.bilibili.com/*
  9. // @match https://space.bilibili.com/*
  10. // @match https://space.bilibili.com/*
  11. // @match https://www.bilibili.com/read/*
  12. // @icon https://static.hdslb.com/images/favicon.ico
  13. // @connect bilibili.com
  14. // @grant GM_xmlhttpRequest
  15. // @license MIT
  16. // @run-at document-end
  17. // ==/UserScript==
  18.  
  19.  
  20. (function () {
  21. 'use strict';
  22. const unknown = new Set()
  23.  
  24. //是否显示vtuber
  25. let bshow = true
  26.  
  27. //成分,可自定义
  28. const yuanyou = new Set()
  29. const no_yuanyou = new Set()
  30. const zhouyou = new Set()
  31. const no_zhouyou = new Set()
  32. const nongyou = new Set()
  33. const no_nongyou = new Set()
  34. const sanxiang = new Set()
  35. const no_sanxiang = new Set()
  36. const yuanzhou = new Set()
  37. const no_yuanzhou = new Set()
  38. const yuannong = new Set()
  39. const no_yuannong = new Set()
  40. const nongzhou = new Set()
  41. const no_nongzhou = new Set()
  42. const nor = new Set()
  43. const no_nor = new Set()
  44. const cj = new Set()
  45. const no_cj = new Set()
  46. const jxt = new Set()
  47. const no_jxt = new Set()
  48. const ccj = new Set()
  49. const no_ccj = new Set()
  50. const gcb = new Set()
  51. const no_gcb = new Set()
  52. const jn = new Set()
  53. const no_jn = new Set()
  54. const mml = new Set()
  55. const no_mml = new Set()
  56.  
  57. //关键词,可自定义
  58. const keyword_yuan = "原神"
  59. const keyword_zhou = "明日方舟"
  60. const keyword_nong = "王者荣耀"
  61. const keyword_cj = "抽奖"
  62. const keyword_jxt = "嘉然"
  63. const keyword_ccj = "塔菲"
  64. const keyword_gcb = "雪蓮"
  65. const keyword_jn = "七海"
  66. const keyword_mml = "猫雷"
  67.  
  68. //贴上标签,可自定义
  69. const tag_nor = " 【 普通 | 纯良】"
  70. const tag_yuan = " 【 稀有 | 原批】"
  71. const tag_zhou = " 【 稀有 | 粥畜】"
  72. const tag_nong = " 【 稀有 | 农批】"
  73. const tag_yuanzhou = " 【 史诗 | 二次元双象限】"
  74. const tag_yuannong = " 【 史诗 | 双批齐聚】"
  75. const tag_zhounong = " 【 史诗 | 稀有的存在】"
  76. const tag_sanxiang = " 【 传奇 | 三相之力】"
  77. const tag_cj = " 【 隐藏 | 动态抽奖】"
  78. const tag_jxt = " 嘉心糖"
  79. const tag_ccj = " 雏草姬"
  80. const tag_gcb = " 棺材板"
  81. const tag_jn = " 杰尼"
  82. const tag_mml = " 喵喵露"
  83.  
  84.  
  85. const blog = 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?&host_mid='
  86. const is_new = true // 检测是不是新版
  87.  
  88. //标签颜色,可自定义,默认为B站会员色
  89. const tag_nor_Inner = "<b style='color: #11DD77'>" + tag_nor + "</b>"
  90. const tag_yuan_Inner = "<b style='color: #6600CC'>" + tag_yuan + "</b>"
  91. const tag_zhou_Inner = "<b style='color: #6600CC'>" + tag_zhou + "</b>"
  92. const tag_nong_Inner = "<b style='color: #6600CC'>" + tag_nong + "</b>"
  93. const tag_yuanzhou_Inner = "<b style='color: #FF0000'>" + tag_yuanzhou + "</b>"
  94. const tag_yuannong_Inner = "<b style='color: #FF0000'>" + tag_yuannong + "</b>"
  95. const tag_nongzhou_Inner = "<b style='color: #FF0000'>" + tag_zhounong + "</b>"
  96. const tag_sanxiang_Inner = "<b style='color: #FFD700'>" + tag_sanxiang + "</b>"
  97. const tag_cj_Inner = "<b style='color: #254680'>" + tag_cj + "</b>"
  98.  
  99. const tag_jxt_Inner = "<b style='color: #946845'>" + tag_jxt + "</b>"
  100. const tag_ccj_Inner = "<b style='color: #946845'>" + tag_ccj + "</b>"
  101. const tag_gcb_Inner = "<b style='color: #946845'>" + tag_gcb + "</b>"
  102. const tag_jn_Inner = "<b style='color: #946845'>" + tag_jn + "</b>"
  103. const tag_mml_Inner = "<b style='color: #946845'>" + tag_mml + "</b>"
  104.  
  105.  
  106. const get_pid = (c) => {
  107. if (is_new) {
  108. return c.dataset['userId']
  109. } else {
  110. return c.children[0]['href'].replace(/[^\d]/g, "")
  111. }
  112. }
  113.  
  114. const get_comment_list = () => {
  115. if (is_new) {
  116. let lst = new Set()
  117. for (let c of document.getElementsByClassName('user-name')) {
  118. lst.add(c)
  119. }
  120. for (let c of document.getElementsByClassName('sub-user-name')) {
  121. lst.add(c)
  122. }
  123. return lst
  124. } else {
  125. return document.getElementsByClassName('user')
  126. }
  127. }
  128.  
  129.  
  130. console.log(is_new)
  131. console.log("正常加载")
  132.  
  133.  
  134. let jiance = setInterval(() => {
  135. let commentlist = get_comment_list()
  136. if (commentlist.length != 0) {
  137. // clearInterval(jiance)
  138. commentlist.forEach(c => {
  139. let pid = get_pid(c)
  140. if (cj.has(pid)) {
  141. if (c.textContent.includes(tag_cj) === false) {
  142. c.innerHTML += tag_cj_Inner
  143. }
  144. return
  145. } else if (no_sanxiang.has(pid)) {
  146. // do nothing
  147. return
  148. }
  149. if (jxt.has(pid)) {
  150. if (c.textContent.includes(tag_jxt) === false) {
  151. c.innerHTML += tag_jxt_Inner
  152. }
  153. return
  154. } else if (no_jxt.has(pid)) {
  155. // do nothing
  156. return
  157. }
  158. if (ccj.has(pid)) {
  159. if (c.textContent.includes(tag_ccj) === false) {
  160. c.innerHTML += tag_ccj_Inner
  161. }
  162. return
  163. } else if (no_ccj.has(pid)) {
  164. // do nothing
  165. return
  166. }
  167. if (gcb.has(pid)) {
  168. if (c.textContent.includes(tag_gcb) === false) {
  169. c.innerHTML += tag_gcb_Inner
  170. }
  171. return
  172. } else if (no_gcb.has(pid)) {
  173. // do nothing
  174. return
  175. }
  176. if (jn.has(pid)) {
  177. if (c.textContent.includes(tag_jn) === false) {
  178. c.innerHTML += tag_jn_Inner
  179. }
  180. return
  181. } else if (no_jn.has(pid)) {
  182. // do nothing
  183. return
  184. }
  185. if (mml.has(pid)) {
  186. if (c.textContent.includes(tag_mml) === false) {
  187. c.innerHTML += tag_mml_Inner
  188. }
  189. return
  190. } else if (no_mml.has(pid)) {
  191. // do nothing
  192. return
  193. }
  194. if (sanxiang.has(pid)) {
  195. if (c.textContent.includes(tag_sanxiang) === false) {
  196. c.innerHTML += tag_sanxiang_Inner
  197. }
  198. return
  199. } else if (no_sanxiang.has(pid)) {
  200. // do nothing
  201. return
  202. }
  203. if (yuannong.has(pid)) {
  204. if (c.textContent.includes(tag_yuannong) === false) {
  205. c.innerHTML += tag_yuannong_Inner
  206. }
  207. return
  208. } else if (no_yuanzhou.has(pid)) {
  209. // do nothing
  210. return
  211. }
  212. if (nongzhou.has(pid)) {
  213. if (c.textContent.includes(tag_nongzhou) === false) {
  214. c.innerHTML += tag_nongzhou_Inner
  215. }
  216. return
  217. } else if (no_sanxiang.has(pid)) {
  218. // do nothing
  219. return
  220. }
  221. if (yuanzhou.has(pid)) {
  222. if (c.textContent.includes(tag_yuanzhou) === false) {
  223. c.innerHTML += tag_yuanzhou_Inner
  224. }
  225. return
  226. } else if (no_yuanzhou.has(pid)) {
  227. // do nothing
  228. return
  229. }
  230. if (yuanyou.has(pid)) {
  231. if (c.textContent.includes(tag_yuan) === false) {
  232. c.innerHTML += tag_yuan_Inner
  233. }
  234. return
  235. } else if (no_yuanyou.has(pid)) {
  236. // do nothing
  237. return
  238. }
  239.  
  240. if (zhouyou.has(pid)) {
  241. if (c.textContent.includes(tag_zhou) === false) {
  242. c.innerHTML += tag_zhou_Inner
  243. }
  244. return
  245. } else if (no_zhouyou.has(pid)) {
  246. // do nothing
  247. return
  248. }
  249.  
  250. if (nongyou.has(pid)) {
  251. if (c.textContent.includes(tag_nong) === false) {
  252. c.innerHTML += tag_nong_Inner
  253. }
  254. return
  255. } else if (no_nongyou.has(pid)) {
  256. // do nothing
  257. return
  258. }
  259. if (nor.has(pid)) {
  260. if (c.textContent.includes(tag_nor) === false) {
  261. c.innerHTML += tag_nor_Inner
  262. }
  263. return
  264. } else if (no_nor.has(pid)) {
  265. // do nothing
  266. return
  267. }
  268. unknown.add(pid)
  269. //console.log(pid)
  270. let blogurl = blog + pid
  271. // let xhr = new XMLHttpRequest()
  272. GM_xmlhttpRequest({
  273. method: "get",
  274. url: blogurl,
  275. data: '',
  276. headers: {
  277. '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'
  278. },
  279. onload: function (res) {
  280. if (res.status === 200) {
  281. //console.log('成功')
  282. let st = JSON.stringify(JSON.parse(res.response).data)
  283. unknown.delete(pid)
  284. //vtuber
  285. if (bshow && (st.includes(keyword_jxt) || st.includes(keyword_ccj) || st.includes(keyword_gcb))) {
  286. c.innerHTML += "<b style='color: #946845' >【 Vtuber | "
  287. //添加嘉然标签
  288. if (st.includes(keyword_jxt)) {
  289. c.innerHTML += tag_jxt_Inner
  290. jxt.add(pid)
  291. } else {
  292. no_jxt.add(pid)
  293. }
  294. //添加塔菲标签
  295. if (st.includes(keyword_ccj)) {
  296. c.innerHTML += tag_ccj_Inner
  297. ccj.add(pid)
  298. } else {
  299. no_ccj.add(pid)
  300. }
  301. //添加東雪莲标签
  302. if (st.includes(keyword_gcb)) {
  303. c.innerHTML += tag_gcb_Inner
  304. gcb.add(pid)
  305. } else {
  306. no_gcb.add(pid)
  307. }
  308. //添加七海标签
  309. if (st.includes(keyword_jn)) {
  310. c.innerHTML += tag_jn_Inner
  311. jn.add(pid)
  312. } else {
  313. no_jn.add(pid)
  314. }
  315. //添加猫雷!标签
  316. if (st.includes(keyword_mml)) {
  317. c.innerHTML += tag_mml_Inner
  318. mml.add(pid)
  319. } else {
  320. no_mml.add(pid)
  321. }
  322. c.innerHTML += "<b style='color: #946845' >】</b>"
  323. }
  324.  
  325. //添加三相标签
  326. if (st.includes(keyword_nong) && st.includes(keyword_yuan) && st.includes(keyword_zhou)) {
  327. c.innerHTML += tag_sanxiang_Inner
  328. sanxiang.add(pid)
  329. } else {
  330. no_sanxiang.add(pid)
  331. }
  332. //添加二次元标签
  333. if (st.includes(keyword_yuan) && st.includes(keyword_zhou) && !st.includes(keyword_nong)) {
  334. c.innerHTML += tag_yuanzhou_Inner
  335. yuanzhou.add(pid)
  336. } else {
  337. no_yuanzhou.add(pid)
  338. }
  339. //添加批批标签
  340. if (st.includes(keyword_yuan) && !st.includes(keyword_zhou) && st.includes(keyword_nong)) {
  341. c.innerHTML += tag_yuannong_Inner
  342. yuannong.add(pid)
  343. } else {
  344. no_yuannong.add(pid)
  345. }
  346. //添加稀有标签
  347. if (!st.includes(keyword_yuan) && st.includes(keyword_zhou) && st.includes(keyword_nong)) {
  348. c.innerHTML += tag_nongzhou_Inner
  349. nongzhou.add(pid)
  350. } else {
  351. no_nongzhou.add(pid)
  352. }
  353. //添加原神标签
  354. if (st.includes(keyword_yuan) && !st.includes(keyword_zhou) && !st.includes(keyword_nong)) {
  355. c.innerHTML += tag_yuan_Inner
  356. yuanyou.add(pid)
  357. } else {
  358. no_yuanyou.add(pid)
  359. }
  360. //添加方舟标签
  361. if (!st.includes(keyword_yuan) && st.includes(keyword_zhou) && !st.includes(keyword_nong)) {
  362. c.innerHTML += tag_zhou_Inner
  363. zhouyou.add(pid)
  364. } else {
  365. no_zhouyou.add(pid)
  366. }
  367. //添加农药标签
  368. if (!st.includes(keyword_yuan) && !st.includes(keyword_zhou) && st.includes(keyword_nong)) {
  369. c.innerHTML += tag_nong_Inner
  370. nongyou.add(pid)
  371. } else {
  372. no_nongyou.add(pid)
  373. }
  374. //添加隐藏标签
  375. if (st.includes(keyword_cj)) {
  376. c.innerHTML += tag_cj_Inner
  377. cj.add(pid)
  378. return
  379. } else {
  380. no_cj.add(pid)
  381. }
  382. //添加纯良标签
  383. if (!st.includes(keyword_nong) && !st.includes(keyword_yuan) && !st.includes(keyword_zhou)) {
  384. c.innerHTML += tag_nor_Inner
  385. nor.add(pid)
  386. } else {
  387. no_nor.add(pid)
  388. }
  389. } else {
  390. console.log('失败')
  391. console.log(res)
  392. }
  393. },
  394. });
  395. });
  396. }
  397. }, 4000)
  398. })();

QingJ © 2025

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