一个用于Password Game的脚本
// ==UserScript==
// @name Password Game Assistant
// @license MIT
// @namespace https://blog.fyz666.xyz/blog/9097/
// @version 0.0.1
// @description 一个用于Password Game的脚本
// @author Eric Fan
// @match https://neal.fun/password-game/
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
(function() {
'use strict';
function Rule11() {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let param = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
let url = 'https://neal.fun/api/password-game/wordle?date=' + param;
fetch(url)
.then(r => r.json())
.then(data => {
let ans = data['answer'];
let input = document.querySelector(".ProseMirror");
const p = document.createElement('p');
const span = document.createElement('span');
span.innerText = ans;
p.appendChild(span);
input.appendChild(p);
});
}
function Rule13() {
let phase = "🌑🌒🌓🌔🌕🌖🌗🌘";
let input = document.querySelector(".ProseMirror");
const p = document.createElement('p');
const span = document.createElement('span');
span.innerText = phase;
p.appendChild(span);
input.appendChild(p);
}
function Rule14() {
let iframe = document.querySelector('.geo-wrapper iframe');
if (iframe === null) return;
iframe.style.marginTop = 0;
}
function Rule19() {
function processNodeRule19(textNode) {
const text = textNode.nodeValue;
const parent = textNode.parentNode;
const fragments = text.split(/([aeiouyAEIOUY])/);
fragments.forEach(fragment => {
if (/[aeiouyAEIOUY]/.test(fragment)) {
const strong = document.createElement('strong');
strong.textContent = fragment;
parent.insertBefore(strong, textNode);
} else {
parent.insertBefore(document.createTextNode(fragment), textNode);
}
});
parent.removeChild(textNode);
}
function processRule19(node) {
if (node.nodeType === Node.TEXT_NODE) {
processNodeRule19(node);
} else if (node.nodeType === Node.ELEMENT_NODE) {
Array.from(node.childNodes).forEach(processRule19);
}
}
let paragraphs = document.querySelectorAll('.ProseMirror p');
paragraphs.forEach(processRule19);
}
function Rule20() {
let input = document.querySelector('.ProseMirror');
input.innerHTML = input.innerHTML.replace(/🔥/g, "");
}
function Rule23() {
let input = document.querySelector(".ProseMirror");
const p = document.createElement('p');
const span = document.createElement('span');
span.innerText = "🐛";
p.appendChild(span);
input.appendChild(p);
setTimeout(() => {
let end = setInterval(() => {}, 10000);
for (let i = 1; i <= end; i++) {
clearInterval(i);
}
input.removeChild(input.lastChild);
}, 1000);
}
function Rule28() {
let btn = document.querySelector('.refresh');
if (btn == null) return;
btn.click();
setTimeout(() => {
let color = document.querySelectorAll(".rand-color")[0];
color = color.style.background.match(/\d+/g);
let s = "#";
color.forEach(item => {
s += parseInt(item).toString(16).padStart(2, '0');
});
let input = document.querySelector(".ProseMirror");
const p = document.createElement('p');
const span = document.createElement('span');
span.innerText = s;
p.appendChild(span);
input.appendChild(p);
}, 100);
}
function Rule30() {
function processNodeRule30(textNode) {
const text = textNode.nodeValue;
const parent = textNode.parentNode;
const parentFontFamily = getComputedStyle(parent).fontFamily;
const fragments = text.split(/(\d)/);
fragments.forEach(fragment => {
if (/\d/.test(fragment)) {
const span = document.createElement('span');
const fontSize = Math.pow(parseInt(fragment), 2);
span.style.fontSize = `${fontSize}px`;
span.style.fontFamily = parentFontFamily;
span.textContent = fragment;
parent.insertBefore(span, textNode);
} else {
parent.insertBefore(document.createTextNode(fragment), textNode);
}
});
parent.removeChild(textNode);
}
function processRule30(node) {
if (node.nodeType === Node.TEXT_NODE) {
processNodeRule30(node);
} else if (node.nodeType === Node.ELEMENT_NODE) {
Array.from(node.childNodes).forEach(processRule30);
}
}
let items = document.querySelectorAll(".ProseMirror p");
items.forEach(processRule30);
}
function Rule31() {
let counter = {};
function processNodeRule31(textNode) {
const text = textNode.nodeValue;
const parent = textNode.parentNode;
const parentFontFamily = getComputedStyle(parent).fontFamily;
const fragments = text.split(/([a-zA-Z])/);
fragments.forEach(fragment => {
if (/[a-zA-Z]/.test(fragment)) {
let letter = fragment.toLowerCase();
counter[letter] = (counter[letter] || 0) + 1;
const span = document.createElement('span');
const fontSize = Math.pow(counter[letter] - 1, 2);
span.style.fontSize = `${fontSize}px`;
span.style.fontFamily = parentFontFamily;
span.textContent = fragment;
parent.insertBefore(span, textNode);
} else {
parent.insertBefore(document.createTextNode(fragment), textNode);
}
});
parent.removeChild(textNode);
}
function processRule31(node) {
if (node.nodeType === Node.TEXT_NODE) {
processNodeRule31(node);
} else if (node.nodeType === Node.ELEMENT_NODE) {
Array.from(node.childNodes).forEach(processRule31);
}
}
let items = document.querySelectorAll(".ProseMirror p");
items.forEach(processRule31);
}
function final() {
let p1 = document.querySelector('.password-final');
let p2 = document.querySelector('.complete .ProseMirror');
if (p1 === null || p2 === null) return;
p2.innerHTML = p1.innerHTML;
}
const functions = [Rule11, Rule13, Rule14, Rule19, Rule20, Rule23, Rule28, Rule30, Rule31, final];
const functionNames = ['Rule 11', 'Rule 13', 'Rule 14', 'Rule 19', 'Rule 20', 'Rule 23', 'Rule 28', 'Rule 30', 'Rule 31', 'Final'];
var container = document.createElement('div');
container.style.position = 'fixed';
container.style.left = '0';
container.style.top = '50%';
container.style.transform = 'translateY(-50%)';
container.style.zIndex = '1000';
functions.forEach((func, index) => {
var button = document.createElement('button');
button.textContent = functionNames[index];
button.style.display = 'block';
button.style.margin = '5px';
button.style.width = '70px';
button.style.padding = '5px';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.backgroundColor = '#4CAF50';
button.style.color = 'white';
button.style.textAlign = 'center';
button.style.textDecoration = 'none';
button.style.fontSize = '14px';
button.style.cursor = 'pointer';
button.style.transition = 'background-color 0.3s, transform 0.2s';
button.onmouseover = function() {
button.style.backgroundColor = '#45a049';
};
button.onmouseout = function() {
button.style.backgroundColor = '#4CAF50';
};
button.onmousedown = function() {
button.style.transform = 'scale(0.95)';
};
button.onmouseup = function() {
button.style.transform = 'scale(1)';
};
button.addEventListener('click', func);
container.appendChild(button);
});
document.body.appendChild(container);
})();