您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
删除所有抽奖动态并自动取关
当前为
// ==UserScript== // @name 抽奖动态删除 // @namespace xuanshui // @version 0.1 // @description 删除所有抽奖动态并自动取关 // @author xuanshui(原mscststs) // @match http*://space.bilibili.com/* // @require https://gf.qytechs.cn/scripts/38220-mscststs-tools/code/MSCSTSTS-TOOLS.js?version=713767 // @require https://cdn.bootcss.com/axios/0.17.1/axios.js // @grant none // ==/UserScript== // 参考: // https://www.bilibili.com/read/cv4787009/ // https://www.bilibili.com/read/cv5065448/ // https://gf.qytechs.cn/zh-CN/scripts/387046-%E6%8A%BD%E5%A5%96%E5%8A%A8%E6%80%81%E5%88%A0%E9%99%A4-%E5%8F%96%E5%85%B3 (function() { 'use strict'; let uid = window.location.pathname.split("/")[1]; function getUserCSRF(){ let cookies = document.cookie.split(" "); for(let ck of cookies){ let key = ck.split("=")[0]; let value = ck.split("=")[1].split(";")[0]; if(key=="bili_jct"){ return value; } } } let csrf_token = getUserCSRF(); class Api{ /* api部分 */ constructor(){ } async getFollowers(){ let data = await fetchJsonp("https://api.bilibili.com/x/relation/followers?jsonp=jsonp&vmid="+window.BilibiliLive.UID).then(res=>res.json()); return data; } async space_history(offset= 0){ let data = await this._api(`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?visitor_uid=${uid}&host_uid=${uid}&offset_dynamic_id=${offset}`,{},"get") return data; } async rm_dynamic(id){ let data = await this._api("https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic",{ dynamic_id: id, csrf_token: csrf_token, }) return data; } async uf_user(id){//取关 let data = await this._api("https://api.live.bilibili.com/relation/v1/Feed/SetUserFollow",{ uid: uid, type: 0, follow: id, re_src: 18, csrf_token: csrf_token, csrf: csrf_token, visit_id: "", }) return data; } async _api(url,data,method="post") { return axios({ url, method, data: data, transformRequest: [function (data) { // Do whatever you want to transform the data let ret = ''; for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'; } return ret; }], withCredentials: true, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (res) { return res.data; }); } } let api = new Api(); let buttons = [".deleteAll",".deleteRepost",".unfollowAll"]; //初始化 button 列表 let logNode={}; let whiteList = []; async function init(){ //初始化panel let shijiao = await mscststs.wait(".h-version-state",true,100); if(!shijiao || shijiao.innerText != "我自己"){ console.log(`当前不是自己的个人动态`) return ; } //判断当前是否是自己的动态页面 await mscststs.wait("#page-dynamic");//等待进入该页面 await mscststs.wait("#page-dynamic .col-2"); let node = document.createElement("div"); node.className="msc_panel"; node.innerHTML = `<div class="inner"><button class="deleteAll">删除所有抽奖动态</button><br><button class="deleteRepost">删除所有转发动态</button><br><button class="unfollowAll">取关所有</button> <div class="log"></div></div>` document.querySelector("#page-dynamic .col-2").append(node); //插入节点 //实例化buttons buttons = buttons.map((b)=>{ return document.querySelector(b); }); logNode = document.querySelector(".msc_panel .log"); //绑定事件 document.querySelector(".deleteAll").addEventListener("click",async function(e){ disableAll(); //在这里删除所有抽奖动态并取关 let deleteCount = 0; let unfollowCount = 0; let has_more = 1; let offset = 0; let follow = {}; while(has_more){ let rq = await api.space_history(offset); let data = rq.data; has_more = data.has_more; for(let card of data.cards){ offset = card.desc.dynamic_id_str if(card.desc.orig_dy_id){ //该动态是转发动态 try{ let content = JSON.parse(card.card); if(content.origin_extension && content.origin_extension.lott &&content.origin_extension.lott.indexOf("lottery_id")>=0){ //是互动抽奖 //删除动态 let rm = await api.rm_dynamic(card.desc.dynamic_id_str); if(rm.code === 0){ //删除成功 deleteCount++; }else{ throw new Error("删除出错") } // //取消关注,这里需要使用直播间的取关接口 // if(follow[content.origin_user.info.uid]){ // //已经删除过 // }else{ // let uf = await api.uf_user(content.origin_user.info.uid); // if(uf.code===0){ // follow[content.origin_user.info.uid] = 1; // unfollowCount++; // //取关成功 // }else{ // throw new Error("取关出错") // } // } // await mscststs.sleep(50); //延时 // log(`已删除 ${deleteCount} 条 ,取关 ${unfollowCount} 个) await mscststs.sleep(50); //延时 log(`已删除 ${deleteCount} 条“互动抽奖”动态 ,用户转发动态未删除,取关功能已阉割`) } }catch(e){ console.log(e); break; } } } } enableAll(); }) document.querySelector(".deleteRepost").addEventListener("click",async function(e){ log(`该“删除所有转发动态”功能已阉割,如需使用请修改脚本`) // disableAll(); // 在这里删除所有转发动态并取关 // let deleteCount = 0; // let unfollowCount = 0; // let has_more = 1; // let offset = 0; // let follow = {}; // while(has_more){ // let rq = await api.space_history(offset); // if(rq.code==-22){ // alert("过于频繁,请稍等几分钟再次运行"); // break; // } // let data = rq.data; // has_more = data.has_more; // for(let card of data.cards){ // offset = card.desc.dynamic_id_str // if(card.desc.orig_dy_id){ // //该动态是转发动态 // try{ // let content = JSON.parse(card.card); // if(1){ // // // //删除动态 // let rm = await api.rm_dynamic(card.desc.dynamic_id_str); // if(rm.code === 0){ // //删除成功 // deleteCount++; // }else{ // throw new Error("删除出错") // } // // 取消关注,这里需要使用直播间的取关接口 // if(content.origin_user && !follow[content.origin_user.info.uid]){ // let uf = await api.uf_user(content.origin_user.info.uid); // if(uf.code===0){ // follow[content.origin_user.info.uid] = 1; // unfollowCount++; // //取关成功 // }else{ // throw new Error("取关出错") // } // } // await mscststs.sleep(50); //延时 // log(`已删除 ${deleteCount} 条 ,取关 ${unfollowCount} 个`) // } // }catch(e){ // console.log(e); // break; // } // } // } // } // enableAll(); }) document.querySelector(".unfollowAll").addEventListener("click",async function(e){ log(`该“取关所有”功能已阉割,如需使用请修改脚本`) // disableAll(); // //在这里取关所有 // let deleteCount = 0; // let unfollowCount = 0; // let has_more = 1; // let offset = 0; // let follow = {}; // let rq = await api.space_history(offset); // for(let attention of rq.data.attentions.uids){ // if(attention == uid){ // continue; // } // let uf = await api.uf_user(attention); // if(uf.code===0){ // unfollowCount++; // //取关成功 // }else{ // alert("取关出错,可能是过于频繁,请稍后再试") // break; // } // await mscststs.sleep(50); //延时 // log(`已取关 ${unfollowCount} 个`) // } // enableAll(); }) } function log(word){ logNode.innerText = word; } function disableAll(){ buttons.forEach(b=>{ b.disabled = true; }) } function enableAll(){ buttons.forEach(b=>{ b.disabled = false; }) } init(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址