98 lines
4.1 KiB
TypeScript
98 lines
4.1 KiB
TypeScript
import audioPlay from "./audioPlay";
|
|
import MathUtils from "../../../class/utils/MathUtils";
|
|
import Alert from "../../../class/utils/Alert";
|
|
import InfoUtils from "../../../class/utils/InfoUtils";
|
|
import WuhuConfig from "../../../class/WuhuConfig";
|
|
import Log from "../../../class/Log";
|
|
|
|
/**
|
|
* @deprecated
|
|
*/
|
|
export default function BuyBeer() {
|
|
// 正在通知
|
|
let is_notified = false;
|
|
let time: number = WuhuConfig.get('_15AlarmTime') || 30;
|
|
let loop: BeerMonitorLoop = {};
|
|
// 循环id
|
|
let started = null;
|
|
loop.start = () => {
|
|
if (started) {
|
|
Log.info('啤酒助手已在运行');
|
|
return;
|
|
}
|
|
started = setInterval(async () => {
|
|
// 海外取消提醒
|
|
let { isTravelling, isAbroad } = await InfoUtils.getInstance().getUserState();
|
|
if (isTravelling || isAbroad) {
|
|
loop.stop();
|
|
return;
|
|
}
|
|
let dt = new Date();
|
|
// 已选当天不提醒
|
|
const now = [dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate()];
|
|
const ignore_date = WuhuConfig.get('_15_alarm_ignore') || '{}';
|
|
if (JSON.stringify(now) === JSON.stringify(ignore_date)) return;
|
|
// 正常提醒
|
|
let m = 14 - (dt.getMinutes() % 15);
|
|
let s = 60 - dt.getSeconds();
|
|
if (m === 0 && s < time) {
|
|
// 如从通知点开,则本次通知跳过
|
|
if (location.href.includes('#clickfromnotify')) {
|
|
is_notified = true;
|
|
location.hash = '';
|
|
return;
|
|
}
|
|
// 本次已通知
|
|
if (is_notified) return;
|
|
is_notified = true;
|
|
// 发送通知
|
|
const notify = new Alert(notify_html, {
|
|
timeout: 30,
|
|
sysNotify: true,
|
|
});
|
|
notify.getElement().querySelector('.wh-notify-msg button').addEventListener('click', () => loop.skip_today);
|
|
notify.getElement().addEventListener('click', ev => {
|
|
if ((ev.target as HTMLElement).tagName.toLowerCase() === 'a') {
|
|
// notify.sys_notify.close();
|
|
notify.close();
|
|
}
|
|
});
|
|
window.setTimeout(audioPlay, 800);
|
|
window.setTimeout(audioPlay, 800 * 2);
|
|
window.setTimeout(audioPlay, 800 * 3);
|
|
} else {
|
|
is_notified = false;
|
|
}
|
|
}, 1000);
|
|
};
|
|
loop.stop = () => {
|
|
if (started) {
|
|
clearInterval(started);
|
|
started = null;
|
|
}
|
|
};
|
|
loop.set_time = (t) => time = t;
|
|
loop.status = () => started ? '已启动' : '未启动';
|
|
loop.is_running = () => !!started;
|
|
|
|
let mathUtils: MathUtils = MathUtils.getInstance();
|
|
let notify_html = `<span style="background-color:green;color:white;border-radius:3px;font-size:14px;line-height:21px;padding:2px 4px;">啤酒小助手</span><br/>提醒您:还有不到 50 秒 NPC 的商品就要刷新了,啤酒血包要抢的可以准备咯。<button id="wh-rd-btn-${ mathUtils.getRandomInt(0, 100) }">【今日不再提醒】</button><br/><a href="/shops.php?step=bitsnbobs#clickfromnotify" target="_blank">【啤酒店】</a> <a href="/shops.php?step=pharmacy#clickfromnotify" target="_blank">【血包店】</a>`
|
|
loop.skip_today = () => {
|
|
const date = new Date();
|
|
WuhuConfig.set('_15_alarm_ignore', [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()], false);
|
|
// 通知
|
|
const notify = new Alert(`明早8点前将不再提醒 <button id="wh-rd-btn-${ mathUtils.getRandomInt(0, 100) }">取消</button>`);
|
|
// 通知中的取消按钮
|
|
notify.getElement().querySelector('.wh-notify-msg button').addEventListener('click', () => WuhuConfig.set('_15_alarm_ignore', undefined));
|
|
};
|
|
return loop;
|
|
}
|
|
|
|
export interface BeerMonitorLoop {
|
|
start?: Function;
|
|
stop?: Function;
|
|
set_time?: Function;
|
|
status?: Function;
|
|
is_running?: Function;
|
|
skip_today?: Function;
|
|
} |