您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动标注成分,原:A畜3畜野狗大杂烩指示器·改,极简版,无倾向性(太nt除外eg伪史论者),侵删
当前为
// ==UserScript== // @name B站大杂烩成分指示器(极简版) // @name:en Bilibili_Agent_Simple // @version v1.0.9 // @update cake // @author trychen,miayoshi,TenSin,klxf // @license GPLv3 // @description 自动标注成分,原:A畜3畜野狗大杂烩指示器·改,极简版,无倾向性(太nt除外eg伪史论者),侵删 // @description:en Automatic labeling of ingredients, original: A livestock 3 animal wild dog hodgepodge indicator change, simply, no tendency, if invasion else deletion // @match https://www.bilibili.com/video/* // @match https://www.bilibili.com/read/* // @match https://www.bilibili.com/opus/* // @match https://t.bilibili.com/* // @match https://space.bilibili.com/* // @match https://www.bilibili.com/judgement/* // @icon https://static.hdslb.com/images/favicon.ico // @match https://www.bilibili.com/v/topic/detail/* // @icon https://static.hdslb.com/images/favicon.ico // @connect bilibili.com // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_xmlhttpRequest // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js // @namespace https://greasyfork.org/users/1110013 // ==/UserScript== const blog = 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?&host_mid=' const followapi = 'https://api.bilibili.com/x/relation/followings?vmid=' const medalapi = 'https://api.live.bilibili.com/xlive/web-ucenter/user/MedalWall?target_id=' $(function () { 'use strict'; const default_checkers = [ { displayName: "抽奖", displayIcon: "🎁", keywords: ["互动抽奖", "转发本条动态"], } , { displayName: "", displayIcon: "@600w_600h_1c_1s.webp", keywords: [""], followings: [] } , { displayName: "地平论者",//你没事吧 displayIcon: "https://i0.hdslb.com/bfs/face/051056a87a1cbdc56cce513714aa2a3ad6490c98.jpg@600w_600h_1c_1s.webp", keywords: ["地平"], followings: [ 563479941,//天圆地方地球骗局 1030963504,//平坦的陆地 //待续 ] } , { displayName: "伪史论者", //难绷 displayIcon: "https://shufa.supfree.net/k/104074.gif", keywords: ["神都俗人","周楚山","何新","河清"], followings: [ 167541240,//神都俗人 351610385,//周楚山 386840843,//阿波罗登月造假,原名:数学名师汇 310877780,//何新老家伙——伪史论亚圣 1761823456,//河清 387542456,//驰豹_ 1543803026,//云影方寸 2123823309,//老Q 3546387329321268,//栖梧辨史 3546597122116354,//老丁说文 3493091193391214,//孔言史语 385959641,//历史集结号 634980447,//我所认知的历史 2031292544,//老雪文史 1162474667,//程咬金说明朝故事 //待续 ] } , { displayName: "阿甘", displayIcon: "https://i1.hdslb.com/bfs/face/787bec68454f36ebfdc78bf828a88cfdee98df2e.jpg@600w_600h_1c_1s.webp", keywords: ["军情阿甘"], followings: [3546620310326128] } , { displayName: "赛雷", displayIcon: "https://i1.hdslb.com/bfs/face/4eb764b8c6afc48ad1e7aaf84b0f58db3d4dbb3f.jpg@600w_600h_1c_1s.webp", keywords: ["赛雷"], followings: [26108626,151482404,510362725] } , { displayName: "荷兰人", displayIcon: "https://i0.hdslb.com/bfs/face/0339cce3092b22d20f6cd33edc041459fd86d9fe.jpg@600w_600h_1c_1s.webp", keywords: ["天空飞翔荷兰人","天空的荷兰人"], followings: [401861362,372383049] } , { displayName: "新华社", displayIcon: "https://i1.hdslb.com/bfs/face/396b93a7f619882afa711879dbf2cb98a40e7367.jpg@600w_600h_1c_1s.webp", keywords: ["新华网","新华社"], followings: [473837611] } , { displayName: "二流媒体", displayIcon: "https://i2.hdslb.com/bfs/face/19a041ba0e78ed43b7a3eab35edfc998eaa7db8e.jpg@600w_600h_1c_1s.webp", keywords: ["人民日报","人民网"], followings: [1131457022,33775467] } , { displayName: "电哥", displayIcon: "https://i1.hdslb.com/bfs/face/c277af542ef1ad8657dab6cff68c2744a842724c.jpg@600w_600h_1c_1s.webp", keywords: ["电哥"], followings: [2053632613,1526687911,436361773] } , { displayName: "央视", displayIcon: "https://i1.hdslb.com/bfs/face/2dc9c34444ba9f8e891fdc98e6c331fa3c02d127.jpg@600w_600h_1c_1s.webp", keywords: ["央视"], followings: [456664753,222103174,433587902,451320374] } , { displayName: "黑神话", displayIcon: "https://i1.hdslb.com/bfs/face/5fdac7d9820175f5f0ae1b6c33968bb8f64cc82c.jpg@240w_240h_1c_1s.webp", keywords: ["黑神话"], followings: [642389251] } , { displayName: "老猫", displayIcon: "折腾的老猫", keywords: ["https://i2.hdslb.com/bfs/face/7c943a916e46c53170426f286c33bb3a116a483c.jpg@240w_240h_1c_1s.webp"], followings: [1175509358] } , { displayName: "七哥", displayIcon: "https://i1.hdslb.com/bfs/face/d862ad470125a518ddbaab50d88ffb8332de9e3d.jpg@240w_240h_1c_1s.webp", keywords: ["七哥"], followings: [323397658,3546588567833451,3546688025266313,626116668,1908575732,650014862] } , { displayName: "户晨风", displayIcon: "https://i1.hdslb.com/bfs/face/06f1ead2473e5af54d4f6ae35ce2baf825d31414.jpg@240w_240h_1c_1s.webp", keywords: ["戶晨风","户晨风"], followings: [9047380,49869761] } , { displayName: "峰哥", displayIcon: "https://i2.hdslb.com/bfs/face/ae439693d6fd79a55b1b5f935ed6474ae6fba35b.jpg@240w_240h_1c_1s.webp", keywords: ["峰哥"], followings: [35847683,476655153,322296103] } , { displayName: "胜利文绉绉", displayIcon: "https://i0.hdslb.com/bfs/face/2235f4376c1cc61919bbf7972a8236b59ff50409.jpg@240w_240h_1c_1s.webp", keywords: ["胜利文绉绉"], followings: [12300996] } , { displayName: "环球", displayIcon: "https://i0.hdslb.com/bfs/face/c8a2502a53adf1b6d309171e15c167e73beaad44.jpg@240w_240h_1c_1s.webp", keywords: ["环球时报","环球网"], followings: [10303206,483787858] } , { displayName: "夹头", displayIcon: "https://i2.hdslb.com/bfs/face/0b542ee82fa15dd80a722053dfd679358d793a09.jpg@240w_240h_1c_1s.webp", keywords: ["司马南"], followings: [612492134] } , { displayName: "赵灵敏", displayIcon: "https://i1.hdslb.com/bfs/face/6d74df8b444250f534ff75068189d78bb246ed87.jpg@240w_240h_1c_1s.webp", keywords: ["赵灵敏"], followings: [488066419] } , { displayName: "259", displayIcon: "https://i2.hdslb.com/bfs/face/3cc68939935451e0c263a533b06b64a9d96dce19.jpg@240w_240h_1c_1s.webp", keywords: ["advent"], followings: [3546687211572101] } , { displayName: "极客小冷", displayIcon: "https://i0.hdslb.com/bfs/face/00c0713a09ded3f5e319ad8da2c964f784b16b8d.jpg@240w_240h_1c_1s.webp", keywords: ["极客小冷"], followings: [316410045] } , { displayName: "心医", displayIcon: "https://i1.hdslb.com/bfs/face/560914dab69fde91b1f493deab08431395cde9db.jpg@600w_600h_1c_1s.webp", keywords: ["心医","林霖"], followings: [1482025194,492808243,1671690277,3546613272284121,385421054,3494349717375890,3546610338367633] //分身好多 } , { displayName: "素材库", displayIcon: "https://i0.hdslb.com/bfs/face/7bbf5c68622f61a0d33d4beebaa9bbdbfccf235d.jpg@600w_600h_1c_1s.webp", keywords: ["虫类素材库"], followings: [1456398987] } , { displayName: "章北海", displayIcon: "https://i1.hdslb.com/bfs/face/645f6e958a0b6bf8d34a1ae396302cf112dd1a3c.jpg@600w_600h_1c_1s.webp", keywords: ["章北海official"], followings: [570064] } , { displayName: "MHY", displayIcon: "https://i2.hdslb.com/bfs/face/f7e24cfec824e0aaf67fdd62c960c13026768f70.jpg@600w_600h_1c_1s.webp", keywords: ["MHYY"], followings: [199676483] } , { displayName: "水东", displayIcon: "https://i0.hdslb.com/bfs/face/6d4403558d95515ca3e95e296b0648c7931bef32.jpg@600w_600h_1c_1s.webp", keywords: ["水东揭秘"], followings: [486404538] } , { displayName: "异化", displayIcon: "https://i1.hdslb.com/bfs/face/f586d7a72b4e1d891bd46abdb2614ead33b71435.jpg@600w_600h_1c_1s.webp", keywords: ["灵笼","艺画"], followings: [3494361474009190,14328316] } , { displayName: "HOLO", displayIcon: "https://i1.hdslb.com/bfs/face/52f316ed4b89f48f3fea7cc165585c04c32f32df.jpg@600w_600h_1c_1s.webp", keywords: ["holo"], followings: [286700005] } , { displayName: "饭-wyb", displayIcon: "https://i0.hdslb.com/bfs/face/3621591c438b83798cf32287837a10f16c1eb5a6.jpg@600w_600h_1c_1s.webp", keywords: ["YIBO-OFFICIAL"], followings: [688694784] } , { displayName: "饭-exo", displayIcon: "https://i0.hdslb.com/bfs/face/b77988a74a83ade540857045781ad9485685554d.jpg@600w_600h_1c_1s.webp", keywords: ["EXO"], followings: [3493262484572295] } , { displayName: "饭-zyx", displayIcon: "https://i1.hdslb.com/bfs/face/6fda05166cc55cdeed94475e2a944427f64ec7f4.jpg@600w_600h_1c_1s.webp", keywords: ["张艺兴"], followings: [161158015] } , { displayName: "未明子", displayIcon: "https://i0.hdslb.com/bfs/face/71ad8ea7787e8acc85bd2a70b554150c35fc1e57.jpg@600w_600h_1c_1s.webp", keywords: ["未明子"], followings: [23191782] } , { displayName: "蜗牛柯基", displayIcon: "https://i1.hdslb.com/bfs/face/939bc84b0ff28599c31e5b274ce70121268649b4.jpg@600w_600h_1c_1s.webp", keywords: ["蜗牛柯基weibo"], followings: [153890218] } , { displayName: "观察者", displayIcon: "https://i0.hdslb.com/bfs/face/3d0dba3789065512f5217387ab135a093ae10c45.jpg@600w_600h_1c_1s.webp", keywords: ["观察者网","观视频工作室"], followings: [10330740,54992199] } , { displayName: "共青团", displayIcon: "https://i1.hdslb.com/bfs/face/05725218e6cd8d0916da4f27ab56ca0957545c48.jpg@600w_600h_1c_1s.webp", keywords: ["共青团"], followings: [20165629] } , { displayName: "孤烟暮蝉", displayIcon: "https://i2.hdslb.com/bfs/face/b6ef567cc83c4ab09b7682c729e85a145aa0b4e2.jpg@600w_600h_1c_1s.webp", keywords: ["孤烟暮蝉"], followings: [19248926] } , { displayName: "白话频道", displayIcon: "https://i0.hdslb.com/bfs/face/59156298fd2f29265cb6496a6208ca3c4c8ee89a.jpg@600w_600h_1c_1s.webp", keywords: ["白话频道"], followings: [92241267] } , { displayName: "阿吞啊", displayIcon: "https://i0.hdslb.com/bfs/face/3f4964d1015329a1a548be584a0261079045c7c5.jpg@600w_600h_1c_1s.webp", keywords: ["阿吞啊"], followings: [622986240] } , { displayName: "俄罗斯", displayIcon: "https://i1.hdslb.com/bfs/face/d1a491998bc767ccc5cd914f336e83fb6fed3f82.jpg@600w_600h_1c_1s.webp", keywords: ["RT今日俄罗斯","俄罗斯卫星通讯社官网","RT娱乐"], followings: [501247999,1156910727,493270535539606,3493081961728612] } , { displayName: "杰哥", displayIcon: "https://i1.hdslb.com/bfs/face/1799d75c67b9d1e447973610df9842a3fc5562ea.jpg@600w_600h_1c_1s.webp", keywords: ["鹏城杰森"], followings: [664086886] } , { displayName: "欧肯", displayIcon: "https://i2.hdslb.com/bfs/face/6333b48c19de82716cbfe9ab4b4dcef4f48f006d.jpg@600w_600h_1c_1s.webp", keywords: ["欧肯视线"], followings: [6859997] } , { displayName: "尼禄", displayIcon: "https://i2.hdslb.com/bfs/face/5423011a2b2547003fe46d354e82f35c32e5d95e.jpg@600w_600h_1c_1s.webp", keywords: ["神皇尼禄","装甲尼禄","装甲NERO","傲慢尼禄"], followings: [335504294,1058667278,368081298,3546687668750650] } , { displayName: "马超", displayIcon: "https://i1.hdslb.com/bfs/face/1c56737dfc0deffffc31c78e0cefb0c3ecf7e000.jpg@600w_600h_1c_1s.webp", keywords: ["马督工","小黛晨读","睡前消息"], followings: [316568752,1556651916,59104725,64219557] } , { displayName: "¥3000", displayIcon: "https://i0.hdslb.com/bfs/face/8bb0b1ea83b892a1f396bd75849d60b61a49273f.jpg@600w_600h_1c_1s.webp", keywords: ["陈平眉山论剑"], followings: [526559715] } , { displayName: "火星方阵", displayIcon: "https://i1.hdslb.com/bfs/face/8699bb487e1768f3990688eec7231ea7318d7bd2.jpg@600w_600h_1c_1s.webp", keywords: ["火星方阵"], followings: [649022917] } , { displayName: "桀哥", displayIcon: "https://i0.hdslb.com/bfs/face/f4d39ce4c3a5a306de2e5bb51fcae9a6c4f95215.jpg@600w_600h_1c_1s.webp", keywords: ["超级小桀的日常","Evelinas","神奇的维C","桀哥","小桀"], followings: [29440965,17832078,14392124] } , { displayName: "磊哥", displayIcon: "https://i1.hdslb.com/bfs/face/4897372932374c750fd3999e933885af1a1d0a93.jpg@600w_600h_1c_1s.webp", keywords: ["磊哥聊政经"], followings: [303981427] } , { displayName: "金灿荣", displayIcon: "https://i2.hdslb.com/bfs/face/0bf6685ac1ef31832fe141416a98a4897f716195.jpg@600w_600h_1c_1s.webp", keywords: ["金灿荣"], followings: [1488338933] } , { displayName: "圆脸", displayIcon: "https://i2.hdslb.com/bfs/face/f8f0fc4114bb06a87481abe12faa006a383cbe6d.jpg@600w_600h_1c_1s.webp", keywords: ["波士顿圆脸"], followings: [346563107] } , { displayName: "王骁", displayIcon: "https://i0.hdslb.com/bfs/face/4b7f791af4dec3b9017c6fd9993dcd2087da3159.jpg@600w_600h_1c_1s.webp", keywords: ["王骁"], followings: [52165725,1140672573] } , { displayName: "Lex", displayIcon: "https://i2.hdslb.com/bfs/face/27e06996840a7cb3ee0fee52f6b4616cd6567def.jpg@600w_600h_1c_1s.webp", keywords: ["LexBurner"], followings: [777536] } , { displayName: "沈逸", displayIcon: "https://i2.hdslb.com/bfs/face/14633072e31671d939bd49bf2c2077f64929f9e8.jpg@600w_600h_1c_1s.webp", keywords: ["沈逸老师","沈逸"], followings: [648113003] } , { displayName: "美食王刚", displayIcon: "https://i1.hdslb.com/bfs/face/1463fa4ea6bffd867dc257dca87248bb1d671cde.jpg@600w_600h_1c_1s.webp", keywords: ["美食作家王刚R","王刚"], followings: [290526283] } , { displayName: "俄餐美学", displayIcon: "https://i0.hdslb.com/bfs/face/a1d2ea000355154c038df6d022aed6d09193541d.jpg@600w_600h_1c_1s.webp", keywords: ["俄餐美学",""], followings: [2077889889] } , { displayName: "大漠叔叔", displayIcon: "https://i2.hdslb.com/bfs/face/bd405797f0d4d6305b76caafff66c98ae1062a35.jpg@600w_600h_1c_1s.webp", keywords: ["大漠叔叔",""], followings: [67141499] } , { displayName: "哈米伦的弄笛者", displayIcon: "https://i1.hdslb.com/bfs/face/0909d7649e770b94d4f4cfd5628ee68206018ae4.jpg@600w_600h_1c_1s.webp", keywords: ["哈米伦的弄笛者",""], followings: [11742550] } , { displayName: "A", displayIcon: "https://i2.hdslb.com/bfs/face/43b21998da8e7e210340333f46d4e2ae7ec046eb.jpg@240w_240h_1c_1s.jpg", keywords: ["想到晚的瞬间","晚晚","嘉晚饭","乃贝","贝极星空间站","乃琳夸夸群","顶碗人","皇珈骑士","贝极星","乃宝","嘉心糖的手账本","嘉心糖","拉姐","然然","asoul","A-SOUL","水母","来点然能量","奶淇琳","珈乐","贝拉拉的717片星空"], followings: [703007996,672342685,672328094,672353429,672346917,351609538] } , { displayName: "塔", displayIcon: "https://i1.hdslb.com/bfs/face/4907464999fbf2f2a6f9cc8b7352fceb6b3bfec3.jpg@240w_240h_1c_1s.jpg", keywords: ["谢谢喵","taffy","雏草姬"], followings: [1265680561] } , { displayName: "莲宝", displayIcon: "https://i0.hdslb.com/bfs/face/ced15dc126348dc42bd5c8eefdd1de5e48bdd8e6.jpg@240w_240h_1c_1s.jpg", keywords: ["東雪蓮Official","东雪莲","莲宝"], followings: [1437582453] } , { displayName: "T", displayIcon: "https://i0.hdslb.com/bfs/face/6be92dec2240b0593a40d2c696b37aa75c704ff6.jpg@240w_240h_1c_1s.jpg", keywords: ["小星星","瞳宝","瞳子","瞳瞳","瞳星结","星瞳"], followings: [401315430,2122506217] } , { displayName: "梓", displayIcon: "https://i2.hdslb.com/bfs/face/ba9ce36ef60a53e24a97f54429e62bdb951530a0.jpg@240w_240h_1c_1s.jpg", keywords: ["阿梓从小就很可爱","阿梓","小孩梓","达达","AME"], followings: [7706705] } , { displayName: "小米", displayIcon: "https://i0.hdslb.com/bfs/face/77feb972004154b08ded4f1d388dbc1058fad2d9.jpg@600w_600h_1c_1s.webp", keywords: ["小米"], followings: [1476167907] } , { displayName: "华为", displayIcon: "https://i2.hdslb.com/bfs/face/d09290cd18c3e048ca0b2eefa3647a487ed11b77.jpg@600w_600h_1c_1s.webp", keywords: ["华为"], followings: [102999485,578227337,439499363] } , { displayName: "荣耀", displayIcon: "https://i0.hdslb.com/bfs/face/0cdc6b649da44ea38e71591b0297d47d86844f0e.jpg@600w_600h_1c_1s.webp", keywords: ["荣耀手机"], followings: [99748932] } , { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/d2a95376140fb1e5efbcbed70ef62891a3e5284f.jpg@100w_100h.webp", keywords: ["互动抽奖 #原神", "#原神", "#米哈游#", "#miHoYo#", "原神", "芙宁娜", "白术", "赛诺", "神里绫人", "神里绫华", "夏洛蒂", "珊瑚宫", "九条裟罗", "班尼特", "夜阑", "那维莱特", "枫原万叶", "万叶", "钟离", "纳西妲", "香菱", "八重神子", "久岐忍", "菲谢尔", "艾尔海森", "胡桃", "林尼", "达达利亚", "提纳里", "宵宫", "莫娜", "甘雨", "罗莎莉亚", "刻晴", "九条裟罗", "温迪", "阿贝多", "云堇", "芭芭拉", "可莉", "迪卢克", "烟绯", "重云", "雷泽", "凝光", "坎蒂丝", "辛焱"], followings: [401742377] // 原神官方号的 UID } , { displayName: "", displayIcon: "https://cf.qq.com/favicon.ico", keywords: ["穿越火线"], followings: [ 315554376, // 穿越火线官方号的 UID 204120111, // CF农哥吊打小怪兽 1083400219, // cf孙某 398597510, // CF教父 456180476, // CF猫七 33281681, // CF威廉I黑化版 440017413, // 穿越火线兴兴 474595618, // 穿越火线赛事 ] }, { displayName: "", displayIcon: "https://dnf.qq.com/favicon.ico", keywords: ["地下城与勇士", "DNF"], followings: [ 102176172, // 地下城与勇士官方号的 UID 90179837, // dnf老搬 27253173, // DNF面码 8233456, // DNF枪魂冰子 332349, // DNF死兔子 168090912, // 17173DNF官方 353944511, // DNF手游假猪 325314188 ] }, { displayName: "", displayIcon: "https://pubg.qq.com/favicon.ico", keywords: ["绝地求生", "PUBG"], followings: [ 449704680, // 意识DT 6528910, // 小贝的游戏食堂 46708782, // 鲁大能 50329485, // 吃鸡赛事 552064023, // 吃鸡小表弟 ] }, { displayName: "", displayIcon: "https://lol.qq.com/favicon.ico", keywords: ["英雄联盟", "LOL"], followings: [ 50329118, // 哔哩哔哩英雄联盟赛事官方号的 UID 4895244, // LOL丶诺诺 470840543, // LOL楠神李青 178778949, // 英雄联盟 50329220, // 哔哩哔哩LOL赛事直播 302651406, // WBG英雄联盟分部 652663378, // LOL小超梦 23364027, // 英雄联盟-小白鸦 ] }, { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/c4cbdafecef76836b94f2ba8832d0a04d709a499.jpg@100w_100h.webp", keywords: ["第五人格", "#第五人格", "互动抽奖 #第五人格"], followings: [ 211005705, // 网易第五人格手游官方号的 UID 105022844, // 第五人格赛事 452627895, // 狼队电竞第五人格分部 1385707562, // TE溯第五人格分部 ] }, { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/6afedb4d85ea6c4115f5548146dc8d7127886ca0.jpg@100w_100h.webp", keywords: ["蛋仔派对", "#蛋仔派对", "互动抽奖 #蛋仔派对"], followings: [ 1306451842, // 网易蛋仔派对官方号的 UID ] }, { displayName: "", displayIcon: "https://i2.hdslb.com/bfs/face/57b6e8c16b909a49bfc8d8394d946f908cabe728.jpg@240w_240h_1c_1s.jpg", keywords: ["互动抽奖 #崩坏星穹铁道","崩坏星穹铁道"], followings: [1340190821] } , { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/049b47e0e73fc5cc1564343bb0aeacce8ae8e6f8.jpg@240w_240h_1c_1s.jpg", keywords: ["互动抽奖 #绝区零","绝区零"], followings: [1636034895] } , { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/effbafff589a27f02148d15bca7e97031a31d772.jpg@100w_100h.webp", keywords: ["互动抽奖 #王者荣耀", "#王者荣耀", "王者荣耀"], followings: [ 57863910, // 王者荣耀 392836434, // 哔哩哔哩王者荣耀赛事 ] }, { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/fe2e1a6e3dc702a6c91378e096ef37ca71bf4629.jpg@100w_100h.webp", keywords: ["互动抽奖 #三国杀", "#三国杀", "三国杀", "#2023三国杀"], followings: [1254932367] // 三国杀十周年官方号的 UID }, { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/c5578966c447a70edf831bbf7e522b7be6090fea.jpg@100w_100h.webp", keywords: ["我的世界", "minecraft", "#我的世界", "我的世界拜年祭", "MCBBS", "我的世界中文论坛", "MC玩家"], followings: [ 43310262, // 我的世界官方号的 UID 39914211, // 我的世界中文论坛(MCBBS)官方号的 UID ] }, { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/a7591e5e0278aafb76cc083b11ca5dd46f049420.jpg@100w_100h.webp", keywords: ["mnsj", "迷你世界", "miniworld", "#迷你世界", "迷你世界拜年祭"], followings: [ 470935187, // 迷你世界官方号的 UID ] }, { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/89154378c06a5ed332c40c2ca56f50cd641c0c90.jpg@240w_240h_1c_1s.jpg", keywords: ["互动抽奖 #明日方舟","危机合约","《明日方舟》"], followings: [161775300] } , { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/764412727f7dda317f2fd7a6cbc5ab5abe71e8cc.jpg@600w_600h_1c_1s.webp", keywords: ["命运-冠位指定"], followings: [233108841] } , { displayName: "", displayIcon: "https://i1.hdslb.com/bfs/face/063ffbf06d3115d94f6a5241500ee63c4cae9915.jpg@600w_600h_1c_1s.webp", keywords: ["战舰世界"], followings: [573693898] } , { displayName: "", displayIcon: "https://i1.hdslb.com/bfs/face/b00fa47b1b1f6d929aca215c909928859993b5d4.jpg@600w_600h_1c_1s.webp", keywords: ["少女前线2","少前2"], followings: [697654195] } , { displayName: "", displayIcon: "https://i0.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg@100w_100h.webp", keywords: ["碧蓝航线", "#碧蓝航线", "#舰船新增#"], followings: [ 233114659, // 碧蓝航线官方号的 UID ] }, { displayName: "", displayIcon: "https://i2.hdslb.com/bfs/face/667e4b1ca39300bff0672774f1980c02c2353b11.jpg@600w_600h_1c_1s.webp", keywords: ["少女前线","少前"], followings: [32472953] } , { displayName: " 可🌟风纪委🌟能 ", displayIcon: "https://i2.hdslb.com/bfs/face/5c4677f2f5c6aa4aa3ee22c5744ddc5a11dde31c.jpg@600w_600h_1c_1s.webp", keywords: ["风纪委","风纪委员","#风纪委员会#","B站新风纪委建议反馈收集 #风纪委","B站新风纪委建议反馈收集 #","风纪委员会调研","风纪委员会众议观点的赞和踩改为同意与不同","风纪委员会众议观点的赞和踩改为同意与不同 #","#B站新风纪委建议反馈收集","风纪委员","焱缪-猫猫兔"], } ] const checked = {} const checking = {} var printed = false // 读取保存的设置,若不存在则读取默认 if(GM_getValue("settings") == undefined) GM_setValue("settings", default_checkers) var checkers = GM_getValue("settings") // 注册设置按钮 addSettingsDialog() GM_registerMenuCommand('设置', openSettingsMenu); function openSettingsMenu() { $(".checkerSettings").show() } // 监听用户ID元素出现 listenKey(".user-name", addButton); listenKey(".sub-user-name", addButton); listenKey(".user .name", addButton); listenKey(".h #h-name", addSpaceButton); // 添加查成分按钮(评论区) function addButton(element) { let node = $(`<div style="display: inline; z-index: 1;" class="composition-checkable"><div class="iBadge"> <a class="iName">查</a> </div></div>`) node.on('click', function () { node.find(".iName").text("检查中...") checktag(element, node.find(".iName")) }) element.after(node) } // 添加查成分按钮(个人主页) function addSpaceButton(element) { let box = $(`<div><div class="section"><h3 class="section-title">成分查询</h3><div style="margin: 30px 0 15px; text-align: center;" class="composition-checkable"></div></div></div>`) let node = $(`<div class="iBadge launcher"> <a class="iName">查</a> </div>`) node.on('click', function () { node.find(".iName").text("检查中...") checktag($("div.col-2:last-child > div:first-child > div.section > div.composition-checkable"), node.find(".iName")) }) $("div.col-2:last-child").prepend(box) $("div.col-2:last-child > div:first-child > div.section > div.composition-checkable").prepend(node) } // 添加标签 function addtag(id, element, setting) { let node = $(`<div style="display: inline; z-index: 1;"><div class="iBadge"> <a class="iName">${setting.displayName}</a> <img src="${setting.displayIcon}" class="iIcon"> </div></div>`) element.after(node) } // 检查标签 function checktag(element, loadingElement) { // 用户ID let UID = element.attr("data-user-id") || element.attr("data-usercard-mid") // 用户名 let name = element.text().charAt(0) == "@" ? element.text().substring(1) : element.text() // 若在主页则在个人资料取uid if(UID == undefined && window.location.hostname == "space.bilibili.com") UID = $("div.info-personal > div.info-wrap:first-child > span.info-value:last-child").text() if (checked[UID]) { // 已经缓存过了 for(let setting of checked[UID]) { addtag(UID, element, setting) } loadingElement.parent().remove() } else if (checking[UID] != undefined) { // 检查中 if (checking[UID].indexOf(element) < 0) checking[UID].push(element) } else { checking[UID] = [element] // 获取最近动态 GM_xmlhttpRequest({ method: "get", url: blog + UID, 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) { // 获取关注列表 GM_xmlhttpRequest({ method: "get", url: followapi + UID, 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: followingRes => { if(followingRes.status === 200) { // 获取勋章列表 GM_xmlhttpRequest({ method: "get", url: medalapi + UID, 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: medalRes => { if(medalRes.status === 200) { // 查询关注列表 let followingData = JSON.parse(followingRes.response) // 可能无权限 let following = followingData.code == 0 ? followingData.data.list.map(it => it.mid) : [] // 查询并拼接动态数据 let st = JSON.stringify(JSON.parse(res.response).data.items) // 获取勋章列表 let medalData = JSON.parse(medalRes.response) let medals = medalData.code == 0 ? medalData.data.list.map(it => it.medal_info.target_id) : [] // 找到的匹配内容 let found = [] for(let setting of checkers) { // 检查动态内容 if (setting.keywords) if (setting.keywords.find(keyword => st.includes(keyword))) { if (found.indexOf(setting) < 0) found.push(setting) continue; } // 检查关注列表 if (setting.followings) for(let mid of setting.followings) { if (following.indexOf(mid) >= 0) { if (found.indexOf(setting) < 0) found.push(setting) continue; } } // 检查勋章列表 if (setting.followings) for(let target_id of setting.followings) { if (medals.indexOf(target_id) >= 0) { if (found.indexOf(setting) < 0) found.push(setting) continue; } } } // 添加标签 if (found.length > 0) { if (!printed) { // console.log(JSON.parse(res.response).data) printed = true } checked[UID] = found // 给所有用到的地方添加标签 for (let element of checking[UID]) { for(let setting of found) { addtag(UID, element, setting) } } loadingElement.parent().remove() } else { loadingElement.text('无') } // 小孩子瞎写着玩的,不想看到 tips 可以注释掉 let tips = "" if(followingData.code != 0) tips += "无法获取" + name + "的关注列表(" + followingData.code + ": " + followingData.message + ")<br>" if(medalData.data.close_space_medal == 1) tips += "无法获取" + name + "的粉丝牌(主页显示被设为隐私)" if(tips != "") checkerTip(tips) } else { loadingElement.text('失败') } delete checking[UID] }, onerror: err => { loadingElement.text('失败') delete checking[UID] } }) } else { loadingElement.text('失败') delete checking[UID] } }, onerror: err => { loadingElement.text('失败') delete checking[UID] } }) } else { loadingElement.text('失败') delete checking[UID] } }, onerror: err => { loadingElement.text('失败') delete checking[UID] } }); } } addGlobalStyle(` .iBadge { display: inline-flex; justify-content: center; align-items: center; width: fit-content; background: #07beff26; border-radius: 10px; margin: -6px 0; margin: 0 5px; font-family: PingFang SC, HarmonyOS_Regular, Helvetica Neue, Microsoft YaHei, sans-serif; } .iName { line-height: 13px; font-size: 13px; color: #07beff; padding: 2px 8px; } .iIcon { width: 25px; height: 25px; border-radius: 50%; border: 2px solid white; margin: -6px; margin-right: 5px; } .user-info, .sub-user-info { width: max-content; background: #fff; padding: 0px 10px; border-radius: 6px; position: static; } .user-info .user-level { z-index: 1; } .checkerSettings { display: none; position: fixed; top: 10%; left: 10px; height: 80%; width: 400px; overflow-y: auto; background: #fff; z-index: 10; box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, .5); } .menuTab { position: fixed; background: #fff; } .menuTitle { margin: 10px 20px; width: 350px; padding-left: 5px; font-size: 24px; font-weight: bold; border-left: var(--Lb5) 5px solid; } .menuItems { margin: 60px 20px; padding-left: 5px; } .menuItems p { margin: 5px 0; } .checker { margin-bottom: 10px; padding: 5px; } .checker:hover { background: #eee; } .checker .icon { width: 50px; height: 50px; margin-right: 10px; } .checker .displayName { display: block; font-weight: bold; margin-bottom: 5px; } .checker .keywords { font-size: 14px; color: gray; } .checker .followings { font-size: 14px; color: blue; } .input-container { margin-bottom: 10px; } .input-label { display: block; margin-bottom: 5px; } .input-field { width: 100%; padding: 5px; margin-bottom: 10px; } .input-field:invalid { background-color: lightpink; } .save-button { padding: 10px 20px; background-color: #4CAF50; color: white; border: none; cursor: pointer; } .save-button:hover { background-color: #45a049; } .edit-button { padding: 5px 10px; background-color: #2196F3; color: white; border: none; cursor: pointer; margin-left: 10px; float: right; } .edit-button:hover { background-color: #0b7dda; } .delete-button { padding: 5px 10px; background-color: #f32121; color: white; border: none; cursor: pointer; margin-left: 10px; float: right; } .delete-button:hover { background-color: #da0b15; } .export-button { padding: 5px 10px; background-color: #2196f3; color: white; border: none; cursor: pointer; margin-left: 10px; } .export-button:hover { background-color: #0b7dda; } .import-button { padding: 5px 10px; background-color: #2196f3; color: white; border: none; cursor: pointer; margin-left: 10px; } .import-button:hover { background-color: #0b7dda; } #msgDisplay { color: lightpink; } `) 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); } // 添加设置窗口 function addSettingsDialog() { let menu = `<div class="checkerSettings"> <div class="menuTab"><div class="menuTitle">设置菜单<span onClick="this.parentNode.parentNode.parentNode.style.display = 'none'" style="float: right; font-size: 14px;">关闭</span></div></div> <div class="menuItems"> <div class="input-container"> <label class="input-label" for="displayNameInput">展示名称:</label> <input id="displayNameInput" class="input-field" type="text"> </div> <div class="input-container"> <label class="input-label" for="displayIconInput">展示图标链接:</label> <input id="displayIconInput" class="input-field" type="text" placeholder="以https://或http://开头" pattern="^((http://)|(https://)).*$"> </div> <div class="input-container"> <label class="input-label" for="keywordsInput">关键词:</label> <input id="keywordsInput" class="input-field" type="text" placeholder="(可选)可输入多个,使用英文逗号分割"> </div> <div class="input-container"> <label class="input-label" for="followingsInput">UID:</label> <input id="followingsInput" class="input-field" type="text" placeholder="(可选)可输入多个,使用英文逗号分割" pattern="^[0-9, ]+$"> </div> <button id="saveButton" class="save-button">保存</button> <div id="checkersContainer"></div> <button id="exportButton" class="export-button">导出到剪切板</button> <button id="importButton" class="import-button">从剪切板导入</button> <div id="msgDisplay"></div> <script> var checker_list = ` + JSON.stringify(GM_getValue("settings")) + `; var checkersContainer = document.getElementById("checkersContainer"); var displayNameInput = document.getElementById("displayNameInput"); var displayIconInput = document.getElementById("displayIconInput"); var keywordsInput = document.getElementById("keywordsInput"); var followingsInput = document.getElementById("followingsInput"); var saveButton = document.getElementById("saveButton"); var update_token = 0; saveButton.addEventListener("click", function() { var displayName = displayNameInput.value; var displayIcon = displayIconInput.value; var keywords = keywordsInput.value.split(",").map(function(keyword) { return keyword.trim(); }); var followings = followingsInput.value.split(",").map(function(following) { return parseInt(following.trim()); }); if (displayName && displayIcon && keywords.length > 0 && followings.length > 0) { var existingChecker = findChecker(displayName); if (existingChecker) { // Update the properties of the existing checker existingChecker.displayIcon = displayIcon; existingChecker.keywords = keywords; existingChecker.followings = followings; } else { // Create a new checker and add it to the checkers array var newChecker = { displayName: displayName, displayIcon: displayIcon, keywords: keywords, followings: followings }; checker_list.push(newChecker); } renderCheckers(); clearInputs(); } update_token = 1; }); function findChecker(displayName) { for (var i = 0; i < checker_list.length; i++) { if (checker_list[i].displayName === displayName) { return checker_list[i]; } } return null; } function renderCheckers() { checkersContainer.innerHTML = ""; checker_list.forEach(function(checker, index) { var checkerElement = document.createElement("div"); checkerElement.className = "checker"; var iconElement = document.createElement("img"); iconElement.className = "icon"; iconElement.src = checker.displayIcon; var displayNameElement = document.createElement("span"); displayNameElement.className = "displayName"; displayNameElement.textContent = checker.displayName; var keywordsElement = document.createElement("p"); keywordsElement.className = "keywords"; keywordsElement.textContent = checker.keywords.join(", "); var followingsElement = document.createElement("p"); followingsElement.className = "followings"; followingsElement.textContent = checker.followings.join(", "); var editButton = document.createElement("button"); editButton.className = "edit-button"; editButton.textContent = "编"; editButton.addEventListener("click", function() { fillInputs(checker); document.getElementsByClassName("checkerSettings")[0].scrollTo({top: 0,behavior: "smooth"}); }); var deleteButton = document.createElement("button"); deleteButton.className = "delete-button"; deleteButton.textContent = "删"; deleteButton.addEventListener("click", createDeleteHandler(checker.displayName)); checkerElement.appendChild(displayNameElement); checkerElement.appendChild(iconElement); checkerElement.appendChild(deleteButton); checkerElement.appendChild(editButton); checkerElement.appendChild(keywordsElement); checkerElement.appendChild(followingsElement); checkersContainer.appendChild(checkerElement); }); } function createDeleteHandler(displayName) { return function() { deleteChecker(displayName); }; } function deleteChecker(displayName) { for (var i = 0; i < checker_list.length; i++) { if (checker_list[i].displayName === displayName) { checker_list.splice(i, 1); break; } } update_token = 1; renderCheckers(); } function fillInputs(checker) { displayNameInput.value = checker.displayName; displayIconInput.value = checker.displayIcon; keywordsInput.value = checker.keywords.join(", "); followingsInput.value = checker.followings.join(", "); } function clearInputs() { displayNameInput.value = ""; displayIconInput.value = ""; keywordsInput.value = ""; followingsInput.value = ""; } var msgDisplay = document.getElementById("msgDisplay"); var exportButton = document.getElementById("exportButton"); exportButton.addEventListener("click", function() { exportCheckers(); }); var importButton = document.getElementById("importButton"); importButton.addEventListener("click", function() { importCheckers(); }); function exportCheckers() { var checkersText = JSON.stringify(checker_list, null, 2); navigator.clipboard.writeText(checkersText) .then(function() { msgDisplay.textContent = "规则导出成功"; }) .catch(function(error) { msgDisplay.textContent = "导出失败: " + error; }); } function importCheckers() { navigator.clipboard.readText() .then(function(text) { var importedCheckers = JSON.parse(text); if (validateCheckers(importedCheckers)) { checker_list = importedCheckers; renderCheckers(); msgDisplay.textContent = "规则导入成功"; update_token = 1; } else { msgDisplay.textContent = "导入失败: 剪切板内容无效或不完整"; } }) .catch(function(error) { msgDisplay.textContent = "导入失败: " + error; }); } function validateCheckers(checkers) { if (!Array.isArray(checkers)) { return false; } for (var i = 0; i < checkers.length; i++) { var checker = checkers[i]; if (typeof checker !== "object" || !checker.hasOwnProperty("displayIcon") || !checker.hasOwnProperty("displayName") || !checker.hasOwnProperty("followings") || !checker.hasOwnProperty("keywords")) { return false; } } return true; } renderCheckers(); </script> </div> </div> ` $("body").append(menu) } // 创建提示 function checkerTip(msg) { // 创建个元素 var element = document.createElement('div'); // 设置显示的文本(HTML) element.innerHTML = msg; // 设置元素的样式 element.style.position = 'fixed'; element.style.top = '50%'; element.style.left = '50%'; element.style.transform = 'translate(-50%, -50%)'; element.style.backgroundColor = 'blue'; element.style.position = 'fixed'; element.style.zIndex = '12000'; element.style.padding = '15px 30px'; element.style.color = '#fff'; element.style.fontSize = '14px'; element.style.textAlign = 'center'; element.style.borderRadius = '4px'; element.style.boxShadow = '0 2px 4px rgba(0,0,0,.14)'; element.style.backgroundColor = 'rgba(0,0,0,.8)'; element.style.transition = 'all .5s'; document.body.appendChild(element); element.style.opacity = '1'; setTimeout(function() { element.style.opacity = '0'; setTimeout(function() { document.body.removeChild(element); }, 500); }, 3000); } function listenKey(selectorTxt, actionFunction, bWaitOnce, iframeSelector) { var targetNodes, btargetsFound; if (typeof iframeSelector == "undefined") targetNodes = $(selectorTxt); else targetNodes = $(iframeSelector).contents () .find (selectorTxt); if (targetNodes && targetNodes.length > 0) { btargetsFound = true; targetNodes.each ( function () { var jThis = $(this); var alreadyFound = jThis.data ('alreadyFound') || false; if (!alreadyFound) { //--- Call the payload function. var cancelFound = actionFunction (jThis); if (cancelFound) btargetsFound = false; else jThis.data ('alreadyFound', true); } } ); } else { btargetsFound = false; } var controlObj = listenKey.controlObj || {}; var controlKey = selectorTxt.replace (/[^\w]/g, "_"); var timeControl = controlObj [controlKey]; //--- Now set or clear the timer as appropriate. if (btargetsFound && bWaitOnce && timeControl) { clearInterval (timeControl); delete controlObj [controlKey] } else { //设置定时器 if ( ! timeControl) { timeControl = setInterval ( function () { listenKey(selectorTxt,actionFunction,bWaitOnce,iframeSelector); if(update_token == 1) { console.log("更新") GM_setValue("settings", checker_list) update_token = 0 } checkers = GM_getValue("settings") }, 300); controlObj [controlKey] = timeControl; } } listenKey.controlObj = controlObj; } })