264 lines
11 KiB
TypeScript
264 lines
11 KiB
TypeScript
import cityFinder from "../func/module/cityFinder";
|
|
import { missionDict } from "../dictionary/translation";
|
|
import getTaskHint from "../func/translate/getTaskHint";
|
|
import WuhuBase from "./WuhuBase";
|
|
import CommonUtils from "./utils/CommonUtils";
|
|
import Log from "./Log";
|
|
import WuhuConfig from "./WuhuConfig";
|
|
import Alert from "./utils/Alert";
|
|
import SHOP_BEER_STATIC_ITEM_HTML from "../static/html/buyBeer/shop_beer_static_item.html";
|
|
import ADD_BEER_HEAD_HTML from "../static/html/buyBeer/add_beer_head.html";
|
|
import QUICK_CRIMES_HTML from "../static/html/quick_crimes.html";
|
|
import RW_RIDER_HTML from "../static/html/rw_rider.html";
|
|
import christmasTownHelper from "../func/module/christmasTownHelper";
|
|
import LotteryHelper from "./action/LotteryHelper";
|
|
import TornStyleBlock from "./utils/TornStyleBlock";
|
|
import PTHelper from "./action/PTHelper";
|
|
import StackHelper from "./action/StackHelper";
|
|
import BuyBeerHelper from "./action/BuyBeerHelper";
|
|
import XZMZ from "./action/XZMZ";
|
|
import ProfileHelper from "./action/ProfileHelper";
|
|
import SearchHelper from "./action/SearchHelper";
|
|
import TornStyleSwitch from "./utils/TornStyleSwitch";
|
|
|
|
/**
|
|
* TODO 去除jq
|
|
*/
|
|
export default class UrlPattern extends WuhuBase {
|
|
className = 'UrlPattern';
|
|
|
|
public resolve(): void {
|
|
let href = window.location.href;
|
|
// 捡垃圾助手
|
|
if (href.includes('city.php') && WuhuConfig.get('cityFinder')) {
|
|
cityFinder();
|
|
let reloadSwitch = new TornStyleSwitch('解决一直转圈(加载中)的问题');
|
|
reloadSwitch.getInput().checked = WuhuConfig.get('SolveGoogleScriptPendingIssue');
|
|
new TornStyleBlock('芜湖助手').append(reloadSwitch.getBase()).insert2Dom();
|
|
reloadSwitch.getInput().addEventListener('change', () => {
|
|
if (reloadSwitch.getInput().checked) window.location.replace(window.location.href);
|
|
WuhuConfig.set('SolveGoogleScriptPendingIssue', reloadSwitch.getInput().checked, true);
|
|
})
|
|
}
|
|
|
|
// pt一键购买
|
|
if (href.includes('pmarket.php')) PTHelper.getInstance();
|
|
|
|
// 叠e助手
|
|
if (href.includes('gym.php')) StackHelper.getInstance();
|
|
|
|
// 寻找木桩
|
|
if (href.includes('item.php?temp=4')) {
|
|
let hasInit: boolean = false;
|
|
let handle = () => {
|
|
if (!hasInit && window.location.hash === '#xunzhaomuzhuang') {
|
|
XZMZ.getInstance().init();
|
|
hasInit = true;
|
|
}
|
|
}
|
|
window.addEventListener('hashchange', handle);
|
|
handle();
|
|
}
|
|
|
|
// 啤酒店
|
|
if (href.includes('shops.php?step=bitsnbobs')) {
|
|
let block = new TornStyleBlock('啤酒助手').insert2Dom();
|
|
block.setContent(ADD_BEER_HEAD_HTML);
|
|
const msg_node = block.querySelector('#wh-msg');
|
|
// 加入啤酒
|
|
block.querySelector('button').addEventListener('click', e => {
|
|
let node = document.querySelector('ul.items-list');
|
|
if (!node) {
|
|
msg_node.innerHTML = '❌ 商品未加载完';
|
|
Log.error('商品未加载完');
|
|
return;
|
|
}
|
|
if (node.querySelector('span[id="180-name"]')) {
|
|
msg_node.innerHTML = '❌ 页面已经有啤酒了';
|
|
Log.warn('商店页面已有啤酒');
|
|
return;
|
|
}
|
|
const clear_node = node.querySelector('li.clear');
|
|
const beer = document.createElement('li');
|
|
beer.classList.add('torn-divider', 'divider-vertical');
|
|
beer.style.backgroundColor = '#c8c8c8';
|
|
beer.innerHTML = SHOP_BEER_STATIC_ITEM_HTML;
|
|
if (clear_node) clear_node.before(beer);
|
|
else node.append(beer);
|
|
(<HTMLInputElement>e.target).disabled = true;
|
|
msg_node.innerHTML = '添加成功';
|
|
});
|
|
|
|
// 监听啤酒购买
|
|
$(document).ajaxComplete((_, xhr, settings) => {
|
|
Log.info({ xhr, settings });
|
|
let { data } = settings, { responseText } = xhr;
|
|
let response = JSON.parse(responseText);
|
|
if (data.includes('step=buyShopItem') && data.includes('ID=180') && response['success']) {
|
|
new Alert('已检测成功购买啤酒');
|
|
BuyBeerHelper.getInstance().skip_today();
|
|
}
|
|
});
|
|
}
|
|
|
|
// 快速crime TODO 重构、与翻译解藕
|
|
if (href.contains(/crimes\.php/) && WuhuConfig.get('quickCrime')) {
|
|
// iframe
|
|
if (self !== top) {
|
|
const isValidate = document.querySelector('h4#skip-to-content').innerText.toLowerCase().includes('validate');
|
|
CommonUtils.elementReady('#header-root').then(e => e.style.display = 'none');
|
|
CommonUtils.elementReady('#sidebarroot').then(e => e.style.display = 'none');
|
|
CommonUtils.elementReady('#chatRoot').then(e => e.style.display = 'none');
|
|
if (!isValidate) document.body.style.overflow = 'hidden';
|
|
CommonUtils.elementReady('.content-wrapper').then(e => {
|
|
e.style.margin = '0px';
|
|
e.style.position = 'absolute';
|
|
e.style.top = '-35px';
|
|
});
|
|
CommonUtils.elementReady('#go-to-top-btn button').then(e => e.style.display = 'none');
|
|
}
|
|
const element = document.querySelector('.content-wrapper');
|
|
const OB = new MutationObserver(() => {
|
|
OB.disconnect();
|
|
// titleTrans();
|
|
// contentTitleLinksTrans();
|
|
trans();
|
|
OB.observe(element, {
|
|
characterData: true,
|
|
attributes: true,
|
|
subtree: true,
|
|
childList: true
|
|
});
|
|
});
|
|
const trans = () => {
|
|
const dom = QUICK_CRIMES_HTML;
|
|
const hasInserted = element.querySelector('.wh-translate') !== null;
|
|
// const is_captcha = element.querySelector('div#tab-menu.captcha') !== null;
|
|
const $title = document.querySelector('div.content-title');
|
|
const $info = document.querySelector('.info-msg-cont');
|
|
// if (!hasInserted && !is_captcha) {
|
|
if (!hasInserted) {
|
|
if ($title) $title.insertAdjacentHTML('beforebegin', dom);
|
|
else if ($info) $info.insertAdjacentHTML('beforebegin', dom);
|
|
}
|
|
};
|
|
trans();
|
|
OB.observe(element, {
|
|
characterData: true,
|
|
attributes: true,
|
|
subtree: true,
|
|
childList: true
|
|
});
|
|
}
|
|
|
|
// 任务助手 TODO 重构、与翻译解藕
|
|
if (href.contains(/loader\.php\?sid=missions/) && WuhuConfig.get('missionHint')) {
|
|
const anchor = document.querySelector('.content-wrapper');
|
|
const OB = new MutationObserver(() => {
|
|
OB.disconnect();
|
|
// titleTrans();
|
|
// contentTitleLinksTrans();
|
|
trans();
|
|
OB.observe(anchor, {
|
|
characterData: true,
|
|
attributes: true,
|
|
subtree: true,
|
|
childList: true
|
|
});
|
|
});
|
|
const taskList = {};
|
|
const trans = () => {
|
|
$('ul#giver-tabs a.ui-tabs-anchor').each((i, e) => {
|
|
let $e = $(e);
|
|
if ($e.children().hasClass('mission-complete-icon')) {
|
|
taskList[i] = e.innerText.trim();
|
|
} else {
|
|
taskList[i] = $e.clone().children().remove().end().text().trim();
|
|
}
|
|
});
|
|
// 助手注入
|
|
$('div.max-height-fix.info').each((i, e) => {
|
|
let $e = $(e);
|
|
if ($e.find('.wh-translated').length !== 0) return;
|
|
$e.append(`<div class="wh-translated"><h6 style="color:green"><b>任务助手</b></h6><p>${ getTaskHint(taskList[i]) }</p></div>`);
|
|
});
|
|
// 任务目标
|
|
$('ul.tasks-list span.title-wrap').contents().each((i, e) => {
|
|
if (e.nodeType === 3) {
|
|
if (missionDict[e.nodeValue.trim()]) {
|
|
e.nodeValue = missionDict[e.nodeValue.trim()];
|
|
}
|
|
}
|
|
});
|
|
};
|
|
trans();
|
|
OB.observe(anchor, {
|
|
characterData: true,
|
|
attributes: true,
|
|
subtree: true,
|
|
childList: true
|
|
});
|
|
}
|
|
|
|
// 个人资料
|
|
if (href.includes('profiles.php?XID=')) ProfileHelper.getInstance();
|
|
|
|
// 圣诞小镇
|
|
if (href.contains(/christmas_town\.php/) && new Date().getMonth() > 9) christmasTownHelper();
|
|
|
|
// rw雷达
|
|
if (href.includes('profiles.php?XID=0')) {
|
|
const utl = {
|
|
set: function (k, v) {
|
|
const obj = JSON.parse(localStorage['wh_rw_raider']) || {};
|
|
obj[k] = v;
|
|
localStorage['wh_rw_raider'] = JSON.stringify(obj);
|
|
},
|
|
get: function (k) {
|
|
const obj = JSON.parse(localStorage['wh_rw_raider']) || {};
|
|
return obj[k];
|
|
},
|
|
setFactionID: function (id) {
|
|
this.set('faction', id);
|
|
},
|
|
setRWFactionID: function (id) {
|
|
this.set('rw_faction', id);
|
|
},
|
|
getFactionID: async function (apikey) {
|
|
const response = await window.fetch('https://api.torn.com/faction/?selections=basic&key=' + apikey);
|
|
const res_obj = await response.json();
|
|
const faction_id = res_obj['ID'];
|
|
if (faction_id) {
|
|
this.setFactionID(faction_id);
|
|
return faction_id;
|
|
} else return -1;
|
|
},
|
|
getRWFactionID: function (apikey) {
|
|
},
|
|
};
|
|
const rw_raider = async function () {
|
|
if (href.includes('#rader')) {
|
|
CommonUtils.addStyle('div.content-title,div.info-msg-cont{display:none;}');
|
|
const wh_node = document.createElement('div');
|
|
wh_node.id = 'wh-rd-cont';
|
|
wh_node.innerHTML = RW_RIDER_HTML;
|
|
// 原页面完全加载
|
|
await CommonUtils.elementReady('div.msg[role="alert"]');
|
|
const t_cont = document.querySelector('div.content-wrapper');
|
|
// t
|
|
t_cont.append(wh_node);
|
|
}
|
|
};
|
|
addEventListener('hashchange', rw_raider);
|
|
|
|
rw_raider().then();
|
|
}
|
|
|
|
// 彩票助手
|
|
if (href.includes('loader.php?sid=lottery')) LotteryHelper.getInstance().init();
|
|
|
|
// 搜索助手
|
|
if (href.includes('page.php?sid=UserList')) SearchHelper.getInstance().init();
|
|
}
|
|
}
|