您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Store and auto-populate answer info for Brain Tree daily quest.
- // ==UserScript==
- // @name Grundo's Cafe Brain Tree
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @description Store and auto-populate answer info for Brain Tree daily quest.
- // @author baileyb (GC user bailey)
- // @match http*://grundos.cafe/halloween/braintree*
- // @match http*://grundos.cafe/halloween/esophagor*
- // @match http*://www.grundos.cafe/halloween/braintree*
- // @match http*://www.grundos.cafe/halloween/esophagor*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=grundos.cafe
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_deleteValue
- // ==/UserScript==
- const selectors = {
- answer: "#page_content strong u",
- submitButton: "#page_content input[type='submit']",
- placeInput: "input[name='place']",
- yearInput: "input[name='year']"
- };
- const elements = {
- answer: document.querySelector(selectors.answer),
- submitButton: document.querySelector(selectors.submitButton),
- placeInput: document.querySelector(selectors.placeInput),
- yearInput: document.querySelector(selectors.yearInput)
- };
- const currentDate = new Date();
- /**
- * Compute if Daylight Savings Time is active.
- * @param {Object} date
- * @returns {Boolean}
- */
- function isDaylightSavings(date) {
- let jan = new Date(date.getFullYear(), 0, 1).getTimezoneOffset()
- let jul = new Date(date.getFullYear(), 6, 1).getTimezoneOffset()
- return Math.max(jan, jul) !== date.getTimezoneOffset()
- }
- /**
- * Compute Date for midnight when dailies reset.
- * @param {Object} date
- * @returns {Object} date at midnight
- */
- function getMidnight(date) {
- let midnightNumber = 0;
- if (isDaylightSavings(date)) {
- midnightNumber = date.setUTCHours(31,0,0,0);
- } else {
- midnightNumber = date.setUTCHours(32,0,0,0);
- }
- return new Date(midnightNumber);
- }
- /**
- * Handle locally stored answer value by clearing if expired, or populating input.
- * @param {String} answerType - 'year' or 'place'
- * @param {Object} date - current date
- */
- function handleStoredAnswer(answerType, date) {
- const answer = GM_getValue(answerType);
- const answerExpires = new Date(GM_getValue(`${answerType}Expires`));
- if (!answer) {
- return;
- } else {
- if (answerExpires && date > answerExpires) {
- GM_deleteValue(answerType);
- GM_deleteValue(`${answerType}Expires`);
- } else {
- elements[`${answerType}Input`].value = answer;
- }
- }
- }
- /**
- * Store answer.
- * @param {String} answer
- */
- function storeAnswer(answer) {
- const midnight = Date.parse(getMidnight(currentDate));
- if (answer.match(/[\d]+[\w]*/)) {
- GM_setValue('year', answer);
- GM_setValue('yearExpires', midnight);
- } else {
- GM_setValue('place', answer);
- GM_setValue('placeExpires', midnight);
- }
- }
- (function() {
- 'use strict';
- if (window.location.href.includes('braintree')) {
- if (!elements.submitButton) {
- return;
- } else {
- handleStoredAnswer('year', currentDate);
- handleStoredAnswer('place', currentDate);
- }
- }
- if (window.location.href.includes('esophagor')) {
- if (!elements.answer) {
- return;
- } else {
- const answer = elements.answer.innerHTML;
- storeAnswer(answer);
- }
- }
- })();