- // ==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) ? "" : "<option value=\"dubs\">Dubs</option>";
- document.querySelector('#qr .move').insertAdjacentHTML("afterend", `
- <div class="getscript" 5px; padding-left: 5px;">Last Post #<span id="postnumber" hidden"></span>
- <div right; margin-right: 15px;">
- <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.)">
- <select data-name="digits" id="digits" title="Select the numbers you want">
- <option value="none">Select GET</option>` + dubs + `
- <option value="trips">Trips</option>
- <option value="quads">Quads</option>
- <option value="quints">Quints</option>
- <option value="sexts">Sexts</option>
- <option value="septs">Septs</option>
- <option value="octs">Octs</option>
- <option value="nons">Nons</option>
- <option value="decs">Decs</option>
- </select></div></div>`);
- 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();
- }
- });
- }