- // ==UserScript==
- // @name:zh-CN 蒸汽轮盘自动-3
- // @name Auto_Sub3
- // @namespace https://blog.chrxw.com
- // @supportURL https://blog.chrxw.com/scripts.html
- // @contributionURL https://afdian.net/@chr233
- // @version 2.18
- // @description 一键快乐-3
- // @description:zh-CN 一键快乐-3
- // @author Chr_
- // @include https://keylol.com/*
- // @license AGPL-3.0
- // @icon https://blog.chrxw.com/favicon.ico
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_info
- // ==/UserScript==
-
- // 版本号
- const Ver = '2.17'
- // 上次-3时间
- let VLast = 0;
- // 今天还能不能-3
- let VCan3 = true;
- // 自动展开
- let VShow = false;
- // 自动-3
- let VAuto = false;
- // 音效载入
- const Vsound = new Audio('https://blog.chrxw.com/usr/keylol/gas.mp3');
- // 轮盘链接
- const Vroll = 'https://keylol.com/plugin.php?id=steamcn_lottery:view&lottery_id=46';
- // 正则表达式
- const Vregex = /plugin\.php\?id=steamcn_lottery:view&lottery_id=46&hash=(.+)&roll/;
-
- (() => {
- 'use strict';
- loadCFG();
- addBtns();
- if (VShow) {
- switchPanel();
- }
- if (VCan3 && VAuto) {
- autoRoll();
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- })();
- // 添加GUI
- function addBtns() {
- function genButton(text, foo, id) {
- let b = document.createElement('button');
- b.textContent = text;
- b.style.cssText = 'margin: 8px 5px;'
- b.addEventListener('click', foo);
- if (id) { b.id = id; }
- return b;
- }
- function genDiv(cls) {
- let d = document.createElement('div');
- if (cls) { d.className = cls };
- return d;
- }
- function genPanel(name, visiable) {
- let p = genDiv(name);
- p.id = name;
- p.style.cssText = 'width: 100%;height: 100%;';
- if (!visiable) { p.style.display = 'none'; }
- return p;
- }
- let btnSwitch = document.querySelector('.index_left_title>div');
-
- if (btnSwitch == null) { return; }
-
- btnSwitch.id = 'btnSwitch1';
- btnSwitch.title = '点这里开启/隐藏控制面板';
- btnSwitch.textContent='关注重点 - Auto Sub 3';
- btnSwitch.style.cssText = 'width: auto;padding: 0 5px;cursor: pointer;z-index: 1';
- btnSwitch.addEventListener('click', switchPanel);
-
- let panelArea = document.querySelector('.index_navi_left');
- let panelOri = document.querySelector('.index_left_detail');
- panelOri.id = 'panelOri'
-
- let panel54 = genPanel('panel54');
-
- let aLP = document.createElement('a');
- aLP.href = Vroll;
- aLP.title = '前往轮盘页';
- let img54 = document.createElement('img');
- img54.src = 'https://gitee.com/chr_a1/gm_scripts/raw/master/Static/keylol.png';
- img54.alt = '总之这里是54的名言';
- img54.style.cssText = 'float: right;margin-top: -28px;height: 100%;'
- aLP.appendChild(img54);
-
- let btnArea = genDiv('btnArea');
- btnArea.style.cssText = 'width: 180px;text-align: center;margin-top: -10px;margin-left: -10px;position: absolute;';
-
- let btnS3 = genButton('【一键-3】', autoRoll, 'btnS3');
-
- if (!VCan3) {
- btnS3.style.textDecoration = 'line-through';
- btnS3.textContent = '今天已经不能-3了';
- }
-
- let btnAuto = genButton(bool2txt(VAuto) + '自动每日-3', fBtnAuto, 'btnAuto');
-
- btnArea.appendChild(btnS3);
- btnArea.appendChild(btnAuto);
-
- panel54.appendChild(aLP);
- panel54.appendChild(btnArea);
- panelArea.insertBefore(panel54, panelArea.children[1]);
- }
- // 自动-3
- function fBtnAuto() {
- VAuto = !VAuto;
- document.getElementById('btnAuto').textContent = bool2txt(VAuto) + '自动每日-3';
- saveCFG();
- }
- // 显示布尔
- function bool2txt(bool) {
- return bool ? '【√】' : '【×】';
- }
- // 隐藏面板
- function switchPanel() {
- let btnSwitch = document.getElementById( 'btnSwitch1');
- let panel1 = document.getElementById('panel54');
- let panel2 = document.getElementById('panelOri');
- if (panel1.style.display == 'none') {
- btnSwitch.textContent = 'Auto Sub 3 - By Chr_ - V ' + Ver;
- panel1.style.display = 'block';
- panel2.style.display = 'none';
- VShow=true;
- } else {
- btnSwitch.textContent = '关注重点 - Auto Sub 3';
- panel1.style.display = 'none';
- panel2.style.display = 'block';
- VShow=false;
- }
- saveCFG();
- }
- // 读取设置
- function loadCFG() {
- let t = null;
- t = GM_getValue('VLast');
- t = Number(t);
- if (t != t) { t = 0; }
- VLast = t;
- t = GM_getValue('VCan3');
- VCan3 = Boolean(t);
- t = GM_getValue('VShow');
- VShow = Boolean(t);
- t = GM_getValue('VAuto');
- VAuto = Boolean(t);
- // 日期变更,重置VCan3
- let d = new Date();
- let day = d.getDate();
- let hour = d.getHours();
- if (day != VLast && hour >= 8) {
- VCan3 = true;
- VLast = day;
- }
- saveCFG();
- }
- // 保存设置
- function saveCFG() {
- GM_setValue('VLast', VLast);
- GM_setValue('VCan3', VCan3);
- GM_setValue('VShow', VShow);
- GM_setValue('VAuto', VAuto);
- }
- // 检查能否-3
- function checkZP() {
- GM_xmlhttpRequest({
- method: "GET",
- url: Vroll,
- onload: (response) => {
- if (response.responseText != null) {
- let t = response.responseText;
- let can = t.search('<button id="roll">抽奖</button>') != -1;
- console.log(can);
- if (!can) {
- disableS3();
- }
- saveCFG();
- }
- },
- onerror: (response) => {
- showError('【出错了,淦】');
- }
- });
- }
- // 禁止-3
- function disableS3() {
- let b = document.getElementById('btnS3');
- b.style.textDecoration = 'line-through';
- b.textContent = '今天已经不能-3了';
- VCan3 = false;
- }
- // 自动-3
- function autoRoll() {
- try {
- Vsound.play();
- } catch (e) {
- console.error(e);
- }
- // if (!VCan3) {
- // return;
- // }
- let v = 0;
- gethash();
-
- function gethash() {
- GM_xmlhttpRequest({
- method: "GET",
- url: Vroll,
- onload: (response) => {
- if (response.status == 200) {
- let m = response.responseText.match(Vregex);
- let hash = m ? m[1] : null;
- console.log(hash);
- if (hash != null) {
- roll(hash);
- roll(hash);
- roll(hash);
- } else {
- disableS3();
- saveCFG();
- showError('【今天已经无法 -3 了哟】');
- }
- } else {
- showError('【出错了,淦】');
- }
- },
- onerror: (response) => {
- showError('【出错了,淦】');
- }
- });
- }
-
- function roll(hash) {
- GM_xmlhttpRequest({
- method: "GET",
- url: Vroll + '&hash=' + hash + '&roll',
- onload: (response) => {
- if (response.status == 200) {
- console.log(response.responseText);
- } else {
- showError('【出错了,淦】');
- console.error('出错')
- }
- if (++v == 3) {
- disableS3();
- saveCFG();
- showError('【自动 -3 完成,祝你好运】');
- setTimeout(() => { window.location.reload(); }, 600);
-
- }
- },
- onerror: (response) => {
- showError('【出错了,淦】');
- }
- });
- }
- }
-
-
- class Request {
- constructor(timeout = 3000) {
- this.timeout = timeout;
- }
- get(url, opt = {}) {
- return this.baseRequest(url, 'GET', opt, 'json');
- }
- getHtml(url, opt = {}) {
- return this.baseRequest(url, 'GET', opt, '');
- }
- getText(url, opt = {}) {
- return this.baseRequest(url, 'GET', opt, 'text');
- }
- post(url, data, opt = {}) {
- opt.data = JSON.stringify(data);
- return this.baseRequest(url, 'POST', opt, 'json');
- }
- baseRequest(url, method = 'GET', opt = {}, responseType = 'json') {
- Object.assign(opt, {
- url, method, responseType, timeout: this.timeout
- });
- return new Promise((resolve, reject) => {
- opt.ontimeout = opt.onerror = reject;
- opt.onload = ({ readyState, status, response, responseText }) => {
- if (readyState === 4 && status === 200) {
- if (responseType == 'json') {
- resolve(response);
- } else if (responseType == 'text') {
- resolve(responseText);
- }
- } else {
- console.error('网络错误');
- console.log(readyState);
- console.log(status);
- console.log(response);
- reject('解析出错');
- }
- }
- GM_xmlhttpRequest(opt);
- });
- }
- }
- const $http = new Request();