帮助大家更好地使用twitter。 黄推数量过多,并且使用机器人到处引流发表与主题无关的回复,难以手工屏蔽。黄推杀手帮你一键屏蔽黄推,清洁推特环境。截止2023年12月6日,系统已收录超3500账户,90%以上为推友人工投票表决产生。
// ==UserScript== // @name 黄推杀手 // @namespace npm/vite-plugin-monkey/pornkiller // @version 1.7 // @author TechLeadMall // @description 帮助大家更好地使用twitter。 黄推数量过多,并且使用机器人到处引流发表与主题无关的回复,难以手工屏蔽。黄推杀手帮你一键屏蔽黄推,清洁推特环境。截止2023年12月6日,系统已收录超3500账户,90%以上为推友人工投票表决产生。 // @license AGPL // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAC4jAAAuIwF4pT92AAAHamlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgNzkuYThkNDc1MywgMjAyMy8wMy8yMy0wODo1NjozNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjAgKDIwMjMwNzI1Lm0uMjI1NCA5ZDJlZTk4KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0wOS0wOFQyMTo1NzoxMiswODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDktMDhUMjI6MjU6MTMrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMDktMDhUMjI6MjU6MTMrMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmFhOWIwODY0LTU5YmMtZjY0My04ZjYwLTk5ZjEwNDI0NjZjNyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjRmODM2NWU3LTcyMGUtY2I0ZS05MWI1LTgzZjk4YmY2M2FhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjFlYmZlY2JjLWM3NjItOTA0NC04NGRiLTFjYjUyYWQwY2FjYiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MWViZmVjYmMtYzc2Mi05MDQ0LTg0ZGItMWNiNTJhZDBjYWNiIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTA4VDIxOjU3OjEyKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMCAoMjAyMzA3MjUubS4yMjU0IDlkMmVlOTgpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTAzMDE0OGEtYTgxYS00ZTRlLWI1ZWItOWQyZDk1ZjAxMTAxIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTA4VDIyOjIyOjIyKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMCAoMjAyMzA3MjUubS4yMjU0IDlkMmVlOTgpICAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmFhOWIwODY0LTU5YmMtZjY0My04ZjYwLTk5ZjEwNDI0NjZjNyIgc3RFdnQ6d2hlbj0iMjAyMy0wOS0wOFQyMjoyNToxMyswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhv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 // @match https://twitter.com/* // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js // @require data:application/javascript,window.Vue%3DVue%3B // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/index.full.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/js.cookie.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/bin/jsencrypt.min.js // @resource element-plus/dist/index.css https://cdn.jsdelivr.net/npm/[email protected]/dist/index.css // @connect cyberworld.win // @grant GM.xmlHttpRequest // @grant GM_addStyle // @grant GM_getResourceText // @grant GM_registerMenuCommand // ==/UserScript== (e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const i=document.createElement("style");i.textContent=e,document.head.append(i)})(" .read-the-docs[data-v-8765c6f2]{color:#888}.smallnotice{font-size:10px}.login{height:400px;width:360px;text-align:center}.title{margin:20px auto 30px;text-align:center;color:#707070}.login-form .el-input{height:38px}.login-form .input-icon{height:39px;width:14px;margin-left:2px}.login-form{border-radius:6px;background:#ffffff;width:300px;padding:0}.login-tip{font-size:13px;text-align:center;color:#bfbfbf}.login-code{width:50%;height:38px;float:right}.login-code img{cursor:pointer;vertical-align:middle}.login-code-img{height:38px}.el-input__wrapper{height:25px;line-height:25px}.el-input-number.is-without-controls .el-input__inner{width:100px;line-height:20px;height:16px}.h5bbx7_1 /deep/ .el-input-number--mini{width:80px;line-height:26px}.h5bbx7_1 /deep/ .el-input-number .el-input__inner{width:80px;height:24px;padding:0 28px}.h5bbx7_1 /deep/ .el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.h5bbx7_1 /deep/ .el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#eee}.h5bbx7_1 /deep/ .el-input-number__increase{height:24px;width:24px}.h5bbx7_1 /deep/ .el-input-number__decrease{width:24px;height:24px} "); (function (vue, ElementPlus, Cookies, JSEncrypt, $, axios) { 'use strict'; const TokenKey = "Admin-Token"; function getToken() { return localStorage.getItem(TokenKey); } function setToken(token) { return localStorage.setItem(TokenKey, token); } const errorCode = { "401": "认证失败,无法访问系统资源", "403": "当前操作没有权限", "404": "访问资源不存在", "default": "系统未知错误,请反馈给管理员" }; var _GM = /* @__PURE__ */ (() => typeof GM != "undefined" ? GM : void 0)(); var _GM_registerMenuCommand = /* @__PURE__ */ (() => typeof GM_registerMenuCommand != "undefined" ? GM_registerMenuCommand : void 0)(); const baseURL = "https://twitter.cyberworld.win/server"; function request(params) { var json = JSON.stringify(params.data); return new Promise(function(resolve, reject) { _GM.xmlHttpRequest({ method: params.method, url: baseURL + params.url, data: json, headers: { "Content-type": "application/json", "Authorization": "Bearer " + getToken() }, onload: function(res) { try { var resJsonObject = JSON.parse(res.responseText); const code = resJsonObject.code || 200; const msg = errorCode[code] || resJsonObject.msg || errorCode["default"]; if (code === 401) { setToken(""); ElementPlus.ElMessage({ message: "需重新登录", duration: 3e3, type: "error" }); return reject("无效的会话,或者会话已过期,请重新登录。"); } else if (code === 403) { ElementPlus.ElMessageBox.confirm( "体验额度已用完,尚未开通会员功能,是否开通?若确认已开通,可点右下角退出再重新登录。", "提示", { confirmButtonText: "确认", cancelButtonText: "取消", type: "success" } ).then(() => { window.open("https://twitter.cyberworld.win/web/index?adminToken=" + getToken()); }).catch(() => { }); return Promise.reject("error"); } else if (code === 500) { ElementPlus.ElMessage({ message: msg, duration: 5 * 1e3, type: "error" }); return reject(new Error(msg)); } else if (code === 601) { ElementPlus.ElMessage({ message: msg, duration: 5 * 1e3, type: "warning" }); return reject("error"); } else if (code !== 200) { ElementPlus.ElMessage({ message: msg, duration: 5 * 1e3, type: "error" }); return reject("error"); } else { resolve(resJsonObject); return res.data; } } catch (err) { reject(err); } }, onerror: function(err) { reject(err); } }); }); } function login(username, password, code, uuid) { const data = { username, password, code, uuid }; return request({ url: "/login", headers: { isToken: false }, method: "post", data }); } function getCount() { return request({ url: "/twitter/porn/getCount", method: "get" }); } function register(data) { return request({ url: "/register", headers: { isToken: false }, method: "post", data }); } function getInfo() { return request({ url: "/getInfo", method: "get" }); } function getCodeImg() { return request({ url: "/captchaImage", headers: { isToken: false }, method: "get", timeout: 2e4 }); } const publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\nnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=="; function encrypt(txt) { const encryptor = new JSEncrypt(); encryptor.setPublicKey(publicKey); return encryptor.encrypt(txt); } function getPornList(kind) { return request({ url: "/twitter/porn/getPornList/" + kind, method: "get" }); } function updateUserBlock(data) { return request({ url: "/twitter/porn/updateUserBlockList", method: "post", data }); } function updateUserResume(data) { return request({ url: "/twitter/porn/updateUserResumeList", method: "post", data }); } const cssLoader = (e) => { const t = GM_getResourceText(e); return GM_addStyle(t), t; }; cssLoader("element-plus/dist/index.css"); JSON.parse(Cookies.get("num") ?? "{}"); async function delay(time) { return new Promise((resolve) => { setTimeout(() => { resolve(); }, time); }); } async function requestList(kind) { return new Promise((resolve, reject) => { getPornList(kind).then((res) => { if (res.data != null) { if (kind == "resume") { localStorage.setItem("resumeList", JSON.stringify(res.data)); } else { localStorage.setItem("list", JSON.stringify(res.data)); } } resolve(res); }).catch((err) => { reject(err); }); }); } async function updateUserBlockSync(data) { return new Promise((resolve, reject) => { updateUserBlock(data).then((res) => { resolve(res); }).catch((err) => { reject(err); }); }); } async function updateUserResumeSync(data) { return new Promise((resolve, reject) => { updateUserResume(data).then((res) => { resolve(res); }).catch((err) => { reject(err); }); }); } async function simulateHumanDelay() { var requestCount = localStorage.getItem("requestCount"); requestCount++; localStorage.setItem("requestCount", requestCount); await delay(100 + Math.ceil(Math.floor(Math.random() * 100))); } function get_cookie(cname) { const name = cname + "="; const ca = document.cookie.split(";"); for (let i = 0; i < ca.length; ++i) { const c = ca[i].trim(); if (c.indexOf(name) === 0) { return c.substring(name.length, c.length); } } return ""; } const ajax = axios.create({ baseURL: "https://api.twitter.com", withCredentials: true, headers: { Authorization: "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA", "X-Twitter-Auth-Type": "OAuth2Session", "X-Twitter-Active-User": "yes", "X-Csrf-Token": get_cookie("ct0") } }); async function block_user(id) { try { var data = { user_id: id }; var result = await ajax.post("/1.1/blocks/create.json", { user_id: id }, { headers: { "Content-Type": "application/x-www-form-urlencoded" } }); } catch (err) { throw err; } } async function resume_user(id) { try { var data = { user_id: id }; var result = await ajax.post("https://twitter.com/i/api/1.1/blocks/destroy.json", { user_id: id }, { headers: { "Content-Type": "application/x-www-form-urlencoded" } }); } catch (err) { throw err; } } async function fireEvent(config) { if (config.run) { var requestCount = 0; var alreadyBlockNum = 0; var exceptionNum = 0; var isOver = false; if (config.blockRobotTweeter == true || config.blockScamTweeter == true || config.blockPornTweeter == true) { while (!isOver) { await simulateHumanDelay(); for (let j = 0; j < 1; j++) { await delay(800); const authenticateHtml = $('iframe[id="arkose_iframe"]'); if (authenticateHtml != null && authenticateHtml.length > 0) { ElementPlus.ElNotification({ title: "提示", message: "需先进行机器人校验", duration: 0, type: "warning" }); return; } } var blockListJson = localStorage.getItem("list"); var isValidBlockList = false; try { if (blockListJson != void 0) { var blockListValid = JSON.parse(blockListJson); if (blockListValid.length > 0 && blockListValid[0].userId != void 0) { isValidBlockList = true; } } } catch (e) { } var ret = { msg: "no more data" }; if (!isValidBlockList) { if (ret != void 0 && ret.msg == "no more data" && config.blockRobotTweeter == true) ret = await requestList("robot"); if (ret != void 0 && ret.msg == "no more data" && config.blockScamTweeter == true) ret = await requestList("scam"); if (ret != void 0 && ret.msg == "no more data" && config.blockPornTweeter == true) ret = await requestList("common"); if (ret != void 0 && ret.msg == "no more data") { if (config.backgroundRun) { await delay(6e3); } else { if (config.resumeTweeter != true) config.run = false; ElementPlus.ElNotification({ title: "提示", message: "完成任务,已禁" + alreadyBlockNum + "个黄推。", duration: 0, type: "success" }); } break; } } blockListJson = localStorage.getItem("list"); var blockList = JSON.parse(blockListJson); var newBlockList = JSON.parse(blockListJson); var blockOperData = []; if (blockList != void 0) { for (let i = 0; i < blockList.length; i++) { if (requestCount >= config.limitNum) { config.run = false; ElementPlus.ElNotification({ title: "提示", message: "完成任务,已完成处理" + requestCount + "次。请稍后再启动程序。", duration: 0, type: "success" }); await updateUserBlockSync(blockOperData); blockOperData = []; return; } let porn = blockList[i]; var userId = porn.userId; if (userId == void 0) { continue; } var userName = porn.userName; if (userName == void 0) { continue; } try { if (!config.run) { await updateUserBlockSync(blockOperData); blockOperData = []; isOver = true; return; } requestCount++; await block_user(userId); blockOperData.push({ pornUserId: porn.userId, result: "1" }); alreadyBlockNum++; if (config.backgroundRun) { } else { if (!config.quietMode) { ElementPlus.ElNotification({ title: "提示", message: '已禁黄推"' + porn.displayName + '"。', duration: 2e3, type: "success" }); } } } catch (e) { if (exceptionNum > 30) { ElementPlus.ElNotification({ title: "提示", message: "异常过多,请检查网络或是否有其他异常。重新启动。", duration: 0, type: "success" }); config.run = false; exceptionNum = 0; isOver = true; } if (e.response != void 0 && e.response.data != void 0 && e.response.data.errors != void 0 && e.response.data.errors[0] != void 0) { if (e.response.data.errors[0].message == "User not found.") { blockOperData.push({ pornUserId: porn.userId, result: "6" }); } else { exceptionNum++; if (e.response.data.errors[0].message == "Could not authenticate you.") { ElementPlus.ElNotification({ title: "提示", message: "请求次数过多,建议等待一会再运行系统,刷新页面。重新启动", duration: 0, type: "success" }); config.run = false; isOver = true; blockOperData.push({ pornUserId: porn.userId, result: "8" }); } else { blockOperData.push({ pornUserId: porn.userId, result: "9" }); } } } else { exceptionNum++; blockOperData.push({ pornUserId: porn.userId, result: "7" }); } } newBlockList.shift(); localStorage.setItem("list", JSON.stringify(newBlockList)); await delay(200); } await updateUserBlockSync(blockOperData); blockOperData = []; } } } } var alreadyBlockNum = 0; isOver = false; blockOperData = []; if (config.resumeTweeter == true) { while (!isOver) { await simulateHumanDelay(); for (let j = 0; j < 1; j++) { await delay(800); const authenticateHtml = $('iframe[id="arkose_iframe"]'); if (authenticateHtml != null && authenticateHtml.length > 0) { ElementPlus.ElNotification({ title: "提示", message: "需先进行机器人校验", duration: 0, type: "warning" }); return; } } var blockListJson = localStorage.getItem("resumeList"); var isValidBlockList = false; try { if (blockListJson != void 0) { var blockListValid = JSON.parse(blockListJson); if (blockListValid.length > 0 && blockListValid[0].userId != void 0) { isValidBlockList = true; } } } catch (e) { } var ret = { msg: "no more data" }; if (!isValidBlockList) { if (ret != void 0 && ret.msg == "no more data" && config.resumeTweeter == true) ret = await requestList("resume"); if (ret != void 0 && ret.msg == "no more data") { if (config.backgroundRun) { await delay(6e3); } else { config.run = false; ElementPlus.ElNotification({ title: "提示", message: "完成任务,已禁" + alreadyBlockNum + "个黄推。", duration: 0, type: "success" }); } return; } } blockListJson = localStorage.getItem("resumeList"); var blockList = JSON.parse(blockListJson); var newBlockList = JSON.parse(blockListJson); if (blockList != void 0) { for (let i = 0; i < blockList.length; i++) { if (requestCount >= config.limitNum) { config.run = false; ElementPlus.ElNotification({ title: "提示", message: "完成任务,已完成处理" + requestCount + "次。请稍后再启动程序。", duration: 0, type: "success" }); await updateUserResumeSync(blockOperData); blockOperData = []; return; } let porn = blockList[i]; var userId = porn.userId; if (userId == void 0) { continue; } var userName = porn.userName; if (userName == void 0) { continue; } try { if (!config.run) { isOver = true; await updateUserResumeSync(blockOperData); blockOperData = []; return; } requestCount++; await resume_user(userId); blockOperData.push({ pornUserId: porn.userId, result: "1" }); alreadyBlockNum++; if (config.backgroundRun) { } else { if (!config.quietMode) { ElementPlus.ElNotification({ title: "提示", message: '已恢复误删名单"' + porn.displayName + '"。', duration: 2e3, type: "success" }); } } } catch (e) { if (exceptionNum > 50) { ElementPlus.ElNotification({ title: "提示", message: "异常过多,请检查网络或是否有其他异常。重新启动。", duration: 0, type: "success" }); config.run = false; exceptionNum = 0; isOver = true; } exceptionNum++; if (e.response != void 0 && e.response.data != void 0 && e.response.data.errors != void 0 && e.response.data.errors[0] != void 0) { if (e.response.data.errors[0].message == "User not found.") { blockOperData.push({ pornUserId: porn.userId, result: "6" }); } else { if (e.response.data.errors[0].message == "Could not authenticate you.") { ElementPlus.ElNotification({ title: "提示", message: "请求次数过多,建议等待一会再运行系统,刷新页面。重新启动", duration: 0, type: "success" }); config.run = false; isOver = true; blockOperData.push({ pornUserId: porn.userId, result: "8" }); } else { blockOperData.push({ pornUserId: porn.userId, result: "9" }); } } } else { blockOperData.push({ pornUserId: porn.userId, result: "7" }); } } newBlockList.shift(); localStorage.setItem("resumeList", JSON.stringify(newBlockList)); await delay(200); } await updateUserResumeSync(blockOperData); blockOperData = []; } } } } const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const cookie = JSON.parse(localStorage.getItem("num") ?? "{}"); const cookieConfig = JSON.parse(localStorage.getItem("config") ?? "{}"); function generateUUID() { var timestamp = Date.now(); var uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { var r = (timestamp + Math.random() * 16) % 16 | 0; timestamp = Math.floor(timestamp / 16); var v = c == "x" ? r : r & 3 | 8; return v.toString(16); }); return uuid; } const _sfc_main$1 = vue.defineComponent({ name: "PopupView", data() { return { activeTabName: localStorage.getItem("activeTabName") ?? "common", robotNum: cookie.robotNum ?? 0, scamNum: cookie.scamNum ?? 0, commonNum: cookie.commonNum ?? 0, resumeNum: cookie.resumeNum ?? 0, config: JSON.stringify(cookieConfig) != "{}" ? cookieConfig : { dialogVisible: true, backgroundRun: false, token: "", blockRobotTweeter: true, blockScamTweeter: false, blockPornTweeter: false, run: false, overTime: "", running: false, limitNum: 300, quietMode: false, resumeTweeter: false, tweetNum: 10, loopMinute: 10, onlyGetTweet: false, runHideFunc: false }, codeUrl: "", loginForm: { username: "", password: "", rememberMe: true, code: "", uuid: "", isAgreedPrivacy: true }, loginRules: { username: [ { required: true, trigger: "blur", message: "请输入您的邮箱账号" } ], password: [ { required: true, trigger: "blur", message: "请输入您的密码" } ], code: [{ required: true, trigger: "change", message: "请输入验证码" }] }, loading: false, // 验证码开关 captchaEnabled: false, // 注册开关 register: false, redirect: void 0, loadingRegister: false }; }, watch: { config: { handler: function(val, oldVal) { localStorage.setItem("config", JSON.stringify(val)); }, deep: true }, activeTabName: { handler: function(val, oldVal) { localStorage.setItem("activeTabName", val); } }, "config.run": function(newQuestion, oldQuestion) { getCount().then((res) => { this.robotNum = res.data.robotNum; this.scamNum = res.data.scamNum; this.commonNum = res.data.commonNum; this.resumeNum = res.data.resumeNum; localStorage.setItem("num", JSON.stringify({ robotNum: res.data.robotNum, scamNum: res.data.scamNum, commonNum: res.data.commonNum, resumeNum: res.data.resumeNum })); }).catch((error) => { console.log(error); }); } }, async created() { _GM_registerMenuCommand("打开黄推杀手", this.showDialog, "o"); var token = getToken(); if (token == void 0 || token == "") ; else { getCount().then((res) => { this.robotNum = res.data.robotNum; this.scamNum = res.data.scamNum; this.commonNum = res.data.commonNum; this.resumeNum = res.data.resumeNum; localStorage.setItem("num", JSON.stringify({ robotNum: res.data.robotNum, scamNum: res.data.scamNum, commonNum: res.data.commonNum, resumeNum: res.data.resumeNum })); }).catch((error) => { console.log(error); }); } this.getCookie(); }, methods: { showDialog() { this.config.dialogVisible = true; }, anonymousLogin() { var that = this; ElementPlus.ElMessageBox.confirm( "匿名登录账户无法进行多设备状态同步,且若登录状态失效(一般情况下不会失效),需重头开始屏蔽。", "提示", { confirmButtonText: "确认", cancelButtonText: "取消", type: "success" } ).then(() => { that.registerForm = {}; that.registerForm.username = generateUUID() + "@random.com"; that.registerForm.password = generateUUID().substring(0, 20); register(that.registerForm).then((res) => { login(that.registerForm.username, that.registerForm.password, "", "").then((res2) => { setToken(res2.token); that.config.token = getToken(); console.log(that.config.token); that.loading = false; getCount().then((res3) => { that.robotNum = res3.data.robotNum; that.scamNum = res3.data.scamNum; that.commonNum = res3.data.commonNum; that.resumeNum = res3.data.resumeNum; localStorage.setItem("num", JSON.stringify({ robotNum: res3.data.robotNum, scamNum: res3.data.scamNum, commonNum: res3.data.commonNum, resumeNum: res3.data.resumeNum })); }).catch((error) => { console.log(error); }); }).catch((error) => { this.loading = false; if (this.captchaEnabled) { this.getCode(); } }); }).catch(() => { this.loading = false; }); }).catch(() => { }); }, handleRegister() { window.open("https://twitter.cyberworld.win/web/register"); }, getCode() { getCodeImg().then((res) => { this.captchaEnabled = res.captchaEnabled === void 0 ? true : res.captchaEnabled; if (this.captchaEnabled) { this.codeUrl = "data:image/gif;base64," + res.img; this.loginForm.uuid = res.uuid; } }); }, getCookie() { }, handleLogin() { var that = this; if (this.loginForm.isAgreedPrivacy) { this.$refs.loginForm.validate((valid) => { if (valid) { this.loading = true; if (this.loginForm.rememberMe) { localStorage.setItem("username", this.loginForm.username); localStorage.setItem("password", encrypt(this.loginForm.password)); localStorage.setItem("rememberMe", this.loginForm.rememberMe); } else { localStorage.removeItem("username"); localStorage.removeItem("password"); localStorage.removeItem("rememberMe"); } var userInfo = this.loginForm; const username = userInfo.username.trim(); const password = userInfo.password; const code = userInfo.code; const uuid = userInfo.uuid; login(username, password, code, uuid).then((res) => { setToken(res.token); that.config.token = getToken(); console.log(that.config.token); that.loading = false; getCount().then((res2) => { that.robotNum = res2.data.robotNum; that.scamNum = res2.data.scamNum; that.commonNum = res2.data.commonNum; that.resumeNum = res2.data.resumeNum; localStorage.setItem("num", JSON.stringify({ robotNum: res2.data.robotNum, scamNum: res2.data.scamNum, commonNum: res2.data.commonNum, resumeNum: res2.data.resumeNum })); }).catch((error) => { console.log(error); }); }).catch((error) => { this.loading = false; if (this.captchaEnabled) { this.getCode(); } }); } }); } }, runKiller(run) { this.config.run = !run; if (this.config.run) { fireEvent(this.config); } }, runHideFuncMonitor(runHideFunc) { var that = this; getInfo().then((res) => { let isFound = res.roles.indexOf("advance"); if (isFound > 0) { that.config.runHideFunc = !runHideFunc; if (that.config.runHideFunc) { var query = { active: true, currentWindow: true }; chrome.tabs.query(query, function callback(tabs) { var currentTab = tabs[0]; if (currentTab.url.indexOf("twitter.com") < 0) { window.open("https://twitter.cyberworld.win/web/index"); chrome.tabs.create({ url: "https://twitter.com/home" }); } }); } } else { ElementPlus.ElMessageBox.confirm( "体验额度已用完,尚未开通会员功能,是否开通?若确认已开通,可点右下角退出再重新登录。", "提示", { confirmButtonText: "确认", cancelButtonText: "取消", type: "success" } ).then(() => { window.open("https://twitter.cyberworld.win/web/index"); }).catch(() => { }); } }).catch((error) => { }); }, openPrivacyUrl() { window.open("https://twitter.cyberworld.win/web/privacy"); }, openTelegramUrl() { window.open("https://t.me/PornTwitterKiller"); }, openTwitterUrl() { window.open("https://twitter.com/PornKiller2023"); }, openTwitterPoster() { }, openTweetPoster() { window.open("https://twitter.com/PornKiller2023/status/1717184498373370239"); }, openGithubPage() { window.open("https://github.com/TechLeadMall/PornKiller"); }, openWaitPage(kind) { window.open("https://twitter.cyberworld.win/web/twitter/pornWait?kind=" + kind + "&adminToken=" + this.config.token); }, openHiddenPage() { window.open("https://twitter.cyberworld.win/web/twitter/hiddenReply"); }, logoutSystem() { setToken(""); this.config.token = ""; this.config.run = false; } } }); const _withScopeId = (n) => (vue.pushScopeId("data-v-8765c6f2"), n = n(), vue.popScopeId(), n); const _hoisted_1 = { key: 0, class: "login" }; const _hoisted_2 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("h3", { class: "title" }, "黄推杀手工具", -1)); const _hoisted_3 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("svg", { xmlns: "http://www.w3.org/2000/svg", height: "1em", viewBox: "0 0 448 512" }, [ /* @__PURE__ */ vue.createElementVNode("path", { d: "M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z" }) ], -1)); const _hoisted_4 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("svg", { xmlns: "http://www.w3.org/2000/svg", height: "1em", viewBox: "0 0 448 512" }, [ /* @__PURE__ */ vue.createElementVNode("path", { d: "M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z" }) ], -1)); const _hoisted_5 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("svg", { xmlns: "http://www.w3.org/2000/svg", height: "1em", viewBox: "0 0 512 512" }, [ /* @__PURE__ */ vue.createElementVNode("path", { d: "M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM144 221.3c0-33.8 27.4-61.3 61.3-61.3c16.2 0 31.8 6.5 43.3 17.9l7.4 7.4 7.4-7.4c11.5-11.5 27.1-17.9 43.3-17.9c33.8 0 61.3 27.4 61.3 61.3c0 16.2-6.5 31.8-17.9 43.3l-82.7 82.7c-6.2 6.2-16.4 6.2-22.6 0l-82.7-82.7c-11.5-11.5-17.9-27.1-17.9-43.3z" }) ], -1)); const _hoisted_6 = { class: "login-code" }; const _hoisted_7 = ["src"]; const _hoisted_8 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("a", { style: { "text-decoration": "underline" } }, "使用政策", -1)); const _hoisted_9 = { key: 0 }; const _hoisted_10 = { key: 1 }; const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("span", null, "立即注册", -1)); const _hoisted_12 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("span", null, "匿名登录", -1)); const _hoisted_13 = { style: { "background-color": "#f0f0f0", "width": "100%" } }; const _hoisted_14 = { key: 1 }; const _hoisted_15 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("div", { style: { "width": "40px" } }, null, -1)); const _hoisted_16 = { key: 0 }; const _hoisted_17 = { key: 1 }; const _hoisted_18 = { style: { "margin-bottom": "10px", "text-align": "center" } }; const _hoisted_19 = { style: { "margin-bottom": "20px", "text-align": "center", "margin-left": "-10px" } }; const _hoisted_20 = { key: 0 }; const _hoisted_21 = { key: 1 }; const _hoisted_22 = { style: { "background-color": "#f0f0f0", "margin-top": "-30px" } }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_el_input = vue.resolveComponent("el-input"); const _component_el_form_item = vue.resolveComponent("el-form-item"); const _component_el_checkbox = vue.resolveComponent("el-checkbox"); const _component_el_button = vue.resolveComponent("el-button"); const _component_el_form = vue.resolveComponent("el-form"); const _component_el_link = vue.resolveComponent("el-link"); const _component_el_tooltip = vue.resolveComponent("el-tooltip"); const _component_el_col = vue.resolveComponent("el-col"); const _component_el_row = vue.resolveComponent("el-row"); const _component_el_input_number = vue.resolveComponent("el-input-number"); const _component_el_switch = vue.resolveComponent("el-switch"); const _component_el_text = vue.resolveComponent("el-text"); const _component_el_tab_pane = vue.resolveComponent("el-tab-pane"); const _component_el_tabs = vue.resolveComponent("el-tabs"); const _component_el_dialog = vue.resolveComponent("el-dialog"); return vue.openBlock(), vue.createElementBlock("div", null, [ vue.createVNode(_component_el_dialog, { modelValue: _ctx.config.dialogVisible, "onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => _ctx.config.dialogVisible = $event), title: "操作面板(关闭后可从插件菜单再次打开)", width: "380", draggable: "" }, { default: vue.withCtx(() => [ _ctx.config.token == null || _ctx.config.token == "" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [ vue.createVNode(_component_el_form, { ref: "loginForm", model: _ctx.loginForm, rules: _ctx.loginRules, class: "login-form", style: { "width": "90%", "text-align": "center", "margin-left": "10px" } }, { default: vue.withCtx(() => [ _hoisted_2, vue.createVNode(_component_el_form_item, { prop: "username" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: _ctx.loginForm.username, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.loginForm.username = $event), type: "text", "auto-complete": "off", placeholder: "账号" }, { prefix: vue.withCtx(() => [ _hoisted_3 ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { prop: "password" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: _ctx.loginForm.password, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => _ctx.loginForm.password = $event), type: "password", "auto-complete": "off", placeholder: "密码", onKeyup: vue.withKeys(_ctx.handleLogin, ["enter", "native"]) }, { prefix: vue.withCtx(() => [ _hoisted_4 ]), _: 1 }, 8, ["modelValue", "onKeyup"]) ]), _: 1 }), _ctx.captchaEnabled ? (vue.openBlock(), vue.createBlock(_component_el_form_item, { key: 0, prop: "code" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: _ctx.loginForm.code, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => _ctx.loginForm.code = $event), "auto-complete": "off", placeholder: "验证码", style: { "width": "50%" }, onKeyup: vue.withKeys(_ctx.handleLogin, ["enter", "native"]) }, { prefix: vue.withCtx(() => [ _hoisted_5 ]), _: 1 }, 8, ["modelValue", "onKeyup"]), vue.createElementVNode("div", _hoisted_6, [ vue.createElementVNode("img", { src: _ctx.codeUrl, onClick: _cache[3] || (_cache[3] = (...args) => _ctx.getCode && _ctx.getCode(...args)), class: "login-code-img" }, null, 8, _hoisted_7) ]) ]), _: 1 })) : vue.createCommentVNode("", true), vue.createVNode(_component_el_form_item, { style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_checkbox, { modelValue: _ctx.loginForm.isAgreedPrivacy, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => _ctx.loginForm.isAgreedPrivacy = $event), style: { "margin": "0px 0px 0px 0px", "color": "black" }, onClick: _ctx.openPrivacyUrl }, { default: vue.withCtx(() => [ vue.createTextVNode("请先同意"), _hoisted_8 ]), _: 1 }, 8, ["modelValue", "onClick"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { loading: _ctx.loading, size: "medium", type: "primary", style: { "width": "100%" }, onClick: vue.withModifiers(_ctx.handleLogin, ["prevent"]) }, { default: vue.withCtx(() => [ !_ctx.loading ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_9, "登 录")) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_10, "登 录 中...")) ]), _: 1 }, 8, ["loading", "onClick"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { size: "medium", type: "success", style: { "width": "100%" }, onClick: _ctx.handleRegister }, { default: vue.withCtx(() => [ _hoisted_11 ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { size: "medium", type: "info", style: { "width": "100%" }, onClick: _ctx.anonymousLogin }, { default: vue.withCtx(() => [ _hoisted_12 ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }, 8, ["model", "rules"]), vue.createElementVNode("div", _hoisted_13, [ vue.createVNode(_component_el_row, { style: { "padding-top": "10px", "padding-bottom": "10px" }, justify: "center" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "发现新黄推进入电报群发起投票,登记进系统名单。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.openTelegramUrl }, { default: vue.withCtx(() => [ vue.createTextVNode("电报") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "开发不易,点个关注吧。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.openTwitterUrl }, { default: vue.withCtx(() => [ vue.createTextVNode("推特") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "越多人转发推文,系统名单越齐全。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.openTweetPoster }, { default: vue.withCtx(() => [ vue.createTextVNode("转推") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "项目的贡献者以及源代码。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.openGithubPage }, { default: vue.withCtx(() => [ vue.createTextVNode("Github") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }) ]) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_14, [ vue.createVNode(_component_el_tabs, { modelValue: _ctx.activeTabName, "onUpdate:modelValue": _cache[20] || (_cache[20] = ($event) => _ctx.activeTabName = $event), class: "demo-tabs", onTabClick: _ctx.handleClick, type: "border-card" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tab_pane, { label: "常用功能", name: "common" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form, { ref: "loginForm", model: _ctx.loginForm, rules: _ctx.loginRules, class: "login-form", style: { "margin-top": "0px" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form, { model: _ctx.loginForm, "label-width": "150px" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "建议设置数量为300个,运行结束后可再次点击启动。", placement: "bottom-end" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form_item, { label: "屏蔽数量限制" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input_number, { modelValue: _ctx.config.limitNum, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => _ctx.config.limitNum = $event), min: 1, max: 500, step: 50, size: "small", style: { "height": "27px", "max-height": "27px", "line-height": "27px" } }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "开启后,仅完成任务后提示被禁黄推数量。", placement: "bottom-end" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form_item, { label: "是否静默运行" }, { default: vue.withCtx(() => [ _hoisted_15, vue.createVNode(_component_el_switch, { modelValue: _ctx.config.quietMode, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => _ctx.config.quietMode = $event) }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "禁垃圾引流账户" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "warning", style: { "font-size": "14px", "font-weight": "normal", "margin-left": "-20px", "width": "60px" }, onClick: _cache[7] || (_cache[7] = ($event) => _ctx.openWaitPage("robot")), underline: false }, { default: vue.withCtx(() => [ vue.createTextVNode("(" + vue.toDisplayString(_ctx.robotNum) + ")", 1) ]), _: 1 }), vue.createVNode(_component_el_switch, { modelValue: _ctx.config.blockRobotTweeter, "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => _ctx.config.blockRobotTweeter = $event) }, null, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "禁疑似诈骗黄推" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "warning", style: { "font-size": "14px", "font-weight": "normal", "margin-left": "-20px", "width": "60px" }, onClick: _cache[9] || (_cache[9] = ($event) => _ctx.openWaitPage("scam")), underline: false }, { default: vue.withCtx(() => [ vue.createTextVNode("(" + vue.toDisplayString(_ctx.scamNum) + ")", 1) ]), _: 1 }), vue.createVNode(_component_el_switch, { modelValue: _ctx.config.blockScamTweeter, "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => _ctx.config.blockScamTweeter = $event) }, null, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "禁普通黄推" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "success", style: { "font-size": "14px", "font-weight": "normal", "margin-left": "-20px", "width": "60px" }, onClick: _cache[11] || (_cache[11] = ($event) => _ctx.openWaitPage("common")), underline: false }, { default: vue.withCtx(() => [ vue.createTextVNode("(" + vue.toDisplayString(_ctx.commonNum) + ")", 1) ]), _: 1 }), vue.createVNode(_component_el_switch, { modelValue: _ctx.config.blockPornTweeter, "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => _ctx.config.blockPornTweeter = $event) }, null, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "恢复误删人员" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "success", style: { "font-size": "14px", "font-weight": "normal", "margin-left": "-20px", "width": "60px" }, onClick: _cache[13] || (_cache[13] = ($event) => _ctx.openWaitPage("resume")), underline: false }, { default: vue.withCtx(() => [ vue.createTextVNode("(" + vue.toDisplayString(_ctx.resumeNum) + ")", 1) ]), _: 1 }), vue.createVNode(_component_el_switch, { modelValue: _ctx.config.resumeTweeter, "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => _ctx.config.resumeTweeter = $event) }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]), _: 1 }, 8, ["model", "rules"]), vue.createVNode(_component_el_form_item, { style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { size: "medium", type: "primary", style: { "width": "100%", "margin-left": "20px", "margin-right": "20px", "text-align": "center" }, onClick: _cache[15] || (_cache[15] = ($event) => _ctx.runKiller(_ctx.config.run)) }, { default: vue.withCtx(() => [ _ctx.config.run != true ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_16, "启动")) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_17, "暂停")) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_form_item, { style: { "margin-top": "-20px" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_text, { type: "info", size: "small" }, { default: vue.withCtx(() => [ vue.createTextVNode("tips:发现新黄推可在下方电报群内发起投票。") ]), _: 1 }) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "高级功能", name: "advance" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_18, [ vue.createVNode(_component_el_text, { class: "mx-1", size: "large" }, { default: vue.withCtx(() => [ vue.createTextVNode("自动隐藏评论区机器人") ]), _: 1 }) ]), vue.createVNode(_component_el_form, { class: "login-form", style: { "margin-top": "0px" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form, { model: _ctx.loginForm, "label-width": "150px" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "建议设置时间为10分钟,间隔过短可能导致异常。", placement: "top", style: {} }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form_item, { label: "循环时间间隔(分钟)" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input_number, { modelValue: _ctx.config.loopMinute, "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => _ctx.config.loopMinute = $event), min: 1, max: 180, step: 5, size: "small", style: { "height": "27px", "max-height": "27px", "line-height": "27px" } }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "当前最大推文数量10个。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form_item, { label: "监控推文数量" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input_number, { modelValue: _ctx.config.tweetNum, "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => _ctx.config.tweetNum = $event), min: 1, max: 10, step: 1, size: "small", style: { "height": "27px", "max-height": "27px", "line-height": "27px" } }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]), _: 1 }), vue.createElementVNode("div", _hoisted_19, [ vue.createVNode(_component_el_link, { type: "primary", style: {}, underline: true, onClick: _cache[18] || (_cache[18] = ($event) => _ctx.openHiddenPage()) }, { default: vue.withCtx(() => [ vue.createTextVNode("查看已隐藏推文") ]), _: 1 }) ]), vue.createVNode(_component_el_form_item, { style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { size: "medium", type: "primary", style: { "width": "100%", "margin-left": "20px", "margin-right": "20px", "text-align": "center" }, onClick: _cache[19] || (_cache[19] = ($event) => _ctx.runHideFuncMonitor(_ctx.config.runHideFunc)) }, { default: vue.withCtx(() => [ _ctx.config.runHideFunc != true ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_20, "启动监控")) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_21, "暂停监控")) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }, 8, ["modelValue", "onTabClick"]), vue.createElementVNode("div", _hoisted_22, [ vue.createVNode(_component_el_row, { style: { "padding-top": "10px", "padding-bottom": "10px" }, justify: "center" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "发现新黄推进入电报群发起投票,登记进系统名单。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.openTelegramUrl }, { default: vue.withCtx(() => [ vue.createTextVNode("电报") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "开发不易,点个关注吧。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.openTwitterUrl }, { default: vue.withCtx(() => [ vue.createTextVNode("推特") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "light", content: "越多人转发推文,系统名单越齐全。", placement: "top" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.openTweetPoster }, { default: vue.withCtx(() => [ vue.createTextVNode("转推") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 6, style: { "text-align": "center" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_link, { type: "primary", style: { "font-size": "12px" }, onClick: _ctx.logoutSystem }, { default: vue.withCtx(() => [ vue.createTextVNode("退出") ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]), _: 1 }) ]) ])) ]), _: 1 }, 8, ["modelValue"]) ]); } const popup = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-8765c6f2"]]); const _sfc_main = { __name: "App", setup(__props) { return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(popup); }; } }; const app2 = vue.createApp(_sfc_main); app2.use(ElementPlus); app2.mount( (() => { const app = document.createElement("div"); document.body.append(app); return app; })() ); })(Vue, ElementPlus, Cookies, JSEncrypt, jQuery, axios);