idrlabs.com - Solver

Creates a button to solve the quiz with random answers.

As of 2024-04-24. See the latest version.

// ==UserScript==
// @name           idrlabs.com - Solver
// @namespace      idrlabs.com utils
// @match          https://www.idrlabs.com/*.php
// @icon           https://raw.githubusercontent.com/eye-wave/greasy-fork/main/packages/idrlabs-solver/assets/icon.svg
// @description    Creates a button to solve the quiz with random answers.
// @grant          none
// @version        1.0.1
// @author         eye-wave
// @license        GPL-3.0+
// ==/UserScript==
"use strict";
(() => {
  // ../../utils/src/index.ts
  function $(query) {
    return document.querySelectorAll(query);
  }
  function $s(query) {
    return document.querySelector(query);
  }

  // src/index.ts
  var randomInt = (max) => Math.floor(Math.random() * max);
  var getRandomElement = (array) => array[randomInt(array.length)];
  var container = $s(".process");
  if (container) {
    const button = document.createElement("span");
    button.textContent = "Solve";
    button.className = "qnav";
    button.addEventListener("click", handleButtonClick, { once: true });
    container.appendChild(button);
  }
  function handleButtonClick() {
    const agreeButton = $s(".agree");
    const disagreeButton = $s(".disagree");
    const ratingElements = Array.from({ length: 5 }).map((_, index) => $s(`.t${index + 1}`));
    const rangeInput = $s("input[type='range']");
    const finishButton = $s("[data-finish]");
    const minValue = +(rangeInput?.getAttribute("min") ?? 0);
    const maxValue = +(rangeInput?.getAttribute("max") ?? 5) + 1;
    const clickRandomRating = () => {
      if (ratingElements.every((element) => element)) {
        getRandomElement(ratingElements)?.click();
        return;
      }
      if (rangeInput) {
        rangeInput.value = `${randomInt(maxValue - minValue) + minValue}`;
        return;
      }
      if (agreeButton ?? disagreeButton) {
        Math.random() > 0.5 ? agreeButton?.click() : disagreeButton?.click();
        return;
      }
      getRandomElement($(".answer"))?.click();
    };
    clickRandomRating();
    setTimeout(handleButtonClick, 0);
    finishButton?.click();
  }
})();