// ==UserScript==
// @name 4chan GETter
// @description Script to help you get repeating digits. Loosely based on mGET. Requires 4chan X.
// @author Xyl
// @match *://*.4chan.org/*
// @match *://*.4channel.org/*
// @grant GM_xmlhttpRequest
// @connect sys.4chan.org
// @version 1.2.1
// @namespace https://xyllon.com
// ==/UserScript==
let latestPostNumber = -1;
const board = location.pathname.match(/\/[^\/]+\//)[0];
let games = (board == "/v/" || board == "/vg/" || board == "/vr/");
if (document.getElementById("qr")) inject();
document.addEventListener('QRDialogCreation', (e) => inject());
function inject() {
let dubs = (games) ? "" : "";
document.querySelector('#qr .move').insertAdjacentHTML("afterend", `
Last Post #
<input type="number" name="offset" value="1" -3px; width: 5ch; height: 16px; padding: 0px !important; -moz-appearance:textfield;" id="offset" title="When to post (a value of 1 with a target post of 99 will post at 98, a value of 2 will post at 97, etc.)">
`);
approxLatestPostNumber();
}
function checkForGET () {
window.target = latestPostNumber + parseInt(document.getElementById('offset').value);
switch(document.getElementById("digits").value) {
case "":
break;
case "dubs":
return /(\d)\1{1,}$/.test(target);
break;
case "trips":
return /(\d)\1{2,}$/.test(target);
break;
case "quads":
return /(\d)\1{3,}$/.test(target);
break;
case "quints":
return /(\d)\1{4,}$/.test(target);
break;
case "sexts":
return /(\d)\1{5,}$/.test(target);
break;
case "septs":
return /(\d)\1{6,}$/.test(target);
break;
case "octs":
return /(\d)\1{7,}$/.test(target);
break;
case "nons":
return /(\d)\1{8,}$/.test(target);
break;
case "decs":
return /(\d)\1{9,}$/.test(target);
break;
}
}
function approxLatestPostNumber() {
fetch("https://a.4cdn.org" + board + "1.json").then(response => response.json()).then(json => {
let threadFound = false;
let thread = 0;
while (!threadFound) {
if (json.threads[thread].posts[0].closed == 1 || json.threads[thread].posts[0].sticky == 1) thread++;
else threadFound = true;
}
latestPostNumber = json.threads[thread].posts.slice(-1)[0].no;
document.getElementById("postnumber").textContent = latestPostNumber;
updatePostNumber();
});
}
function updatePostNumber() {
GM_xmlhttpRequest({
url: ("https://sys.4chan.org" + board + "imgboard.php?res=" + (latestPostNumber + 1)),
method: "HEAD",
onload: response => {
if (response.status == 200) {
latestPostNumber++;
} else if (games && /(([1-9])\2|[^0]0{2,2})$/.test(latestPostNumber + 1)) {
if (/[^9]99$/.test(latestPostNumber + 1)) latestPostNumber += 2;
else latestPostNumber++;
}
if (checkForGET()) {
document.querySelector("#file-n-submit input:last-child").click();
document.getElementById("digits").value = "none";
}
document.getElementById("postnumber").style.visibility = "visible";
document.getElementById("postnumber").textContent = latestPostNumber;
updatePostNumber();
}
});
}