Ghost Game Fix

Disables the "play again" button after you press it on duels for 30 seconds

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Ghost Game Fix
// @version      1.0.0
// @description  Disables the "play again" button after you press it on duels for 30 seconds
// @match        https://www.geoguessr.com/*
// @author       Tyow#3742
// @grant        none
// @license      MIT
// @namespace    https://greasyfork.org/en/users/1011193-tyow
// ==/UserScript==

const disableButton = b => {
    b.disabled = true;
    // This only comes into play for a couple of the buttons
    b.style.color = "black";
    // Countdown div
    let d = document.createElement("div");
    d.style.fontSize = "22px";
    d.style.color = "white";
    b.appendChild(d);
    // Wait 30 seconds, then reenable
    // https://stackoverflow.com/questions/18785217/countdown-timer-in-javascript-using-settimeout
    const countDown = (endTime) => {
        if (endTime > 0) {
            d.innerText = endTime;
            setTimeout(() => countDown(endTime -1), 1000);
        } else {
            b.disabled = false;
            b.style.color = "white";
            b.removeChild(d);
        }
    }
    countDown(30);
}

// Wait for window to load, so that the button will be there
window.onload = (event) => {
    // Play Again button
    let button = document.getElementsByClassName("button_button__CnARx button_variantPrimary__xc8Hp")[0];
    if (location.pathname.startsWith("/duels") && location.pathname.endsWith("/summary")) {
        while (button == undefined) {
            button = document.getElementsByClassName("button_button__CnARx button_variantPrimary__xc8Hp")[0];
        }
        // If here, the buttons have loaded into the dom
        button.addEventListener("click", () => disableButton(button));
        console.log("disable button attached for: ");
        console.log(button);
        return;
    }
    // Buttons for game mode at /competitive page
    let compButtons = document.getElementsByClassName("play_card__svL35");
    if (location.pathname.startsWith("/competitive")) {
        while (compButtons.length == 0) {
            console.log(compButtons);
            compButtons = document.getElementsByClassName("play_card__svL35");
        }
        // If here, the buttons have loaded into the dom
        for (let i = 0; i < compButtons.length; i++) {
            compButtons[i].addEventListener("click", () => disableButton(compButtons[i]));
            console.log("disable button attached for: ");
            console.log(compButtons[i]);
        }
        return;
    }
    // Buttons at multiplayer page
    let multButtons = document.getElementsByClassName("game-menu-button_button__WPwVi game-menu-button_fillParent__2Dqat");
    if (location.pathname.startsWith("/multiplayer")) {
        while (multButtons.length == 0) {

            console.log(multButtons);
            multButtons = document.getElementsByClassName("game-menu-button_button__WPwVi game-menu-button_fillParent__2Dqat");
        }
        // If here, the buttons have loaded into the dom
        for (let i = 0; i < multButtons.length; i++) {
            multButtons[i].addEventListener("click", () => disableButton(multButtons[i]));
            console.log("disable button attached for: ");
            console.log(multButtons[i]);
        }
        return;
    }
};