// ==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);