Hyorvenn / ValidationNouveauxBouton

// ==UserScript==
// @name         ValidationNouveauxBouton
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Permettre de valider des nouveaux avec un seul bouton sur Xooit (Premier script)
// @author       Alexray
// @match        https://www.creepypastafromthecrypt.com/*
// @grant        none
// @license      MIT
// @copyright    2019, Hyorvenn (https://openuserjs.org/users/Hyorvenn)
// @noframes
// ==/UserScript==

(function () {
    'use strict';
  
    /**
     * Indique si la page courante est une présentation
     */
    function est_page_de_presentation() {
      let regex = /<!-- google_ad_section_start -->Présentation/;
      return regex.test(document.documentElement.innerHTML);
    }
  
    /**
     * Ajoute le bouton sous le titre du topic.
     * @param {input} bouton le bouton à ajouter
     */
    function ajoute_bouton_a_la_page(bouton) {
      document.getElementsByClassName("maintitle")[0].parentNode.appendChild(bouton);
    }
  
    /**
     * Retourne le nom de l'auteur du topic courant.
     */
    function get_pseudo_OP() {
      return document.getElementsByClassName("name")[0].textContent;
    }
  
    /**
     * Change la localisation pour la page de gestion des groupes.
     */
    function ouvrir_page_de_groupe() {
      return window.open("https://www.creepypastafromthecrypt.com/groupcp.php?g=5");
    }
  
    /**
     * Crée un bouton de validation de membre.
     */
    function creer_bouton_de_validation() {
      var bouton = document.createElement("input");
      bouton.setAttribute("class", "valide_compte_button");
      bouton.setAttribute("type", "button");
      bouton.setAttribute("value", "Valider le compte");
      bouton.setAttribute("name", "bouton_validation_nouveau");
  
      // button CSS
      bouton.style = "color: white; background-color: #222222; padding: 1em; border-color: #333333; border-radius: 1em;";
  
      var css = '.valide_compte_button:hover{ cursor: pointer; }';
      var style = document.createElement('style');
  
      if (style.styleSheet) {
        style.styleSheet.cssText = css;
      }
      else {
        style.appendChild(document.createTextNode(css));
      }
  
      document.getElementsByTagName('head')[0].appendChild(style);
  
      bouton.addEventListener("click", function () {
        pseudo = get_pseudo_OP();
        popup = ouvrir_page_de_groupe();
      });
      return bouton;
    }
  
    function est_page_de_groupes() {
      return /https:\/\/www.creepypastafromthecrypt.com\/groupcp.php/.test(window.location);
    }
  
    /**
     * Ecrit le pseudo dans le formulaire d'ajout de membre à un groupe
     * @param {string} pseudo
     */
    function rentrer_pseudo_dans_formulaire(pseudo) {
      let input_pseudo = document.querySelector("input.post");
      input_pseudo.value = pseudo;
    }
  
    /**
     * Valide le formulaire d'ajout de membre à un groupe
     */
    function valider_formulaire_ajout_membre() {
      let ajouter_membre_input = document.querySelectorAll("input[value='Ajouter le Membre']")[0];
      ajouter_membre_input.click();
    }
  
    /**
     * Valide le membre dont le pseudo est passé en argument.
     * @param {string} pseudo_nouveau Le pseudo du membre à valider.
     */
    async function valider_nouveau(pseudo_nouveau) {
      rentrer_pseudo_dans_formulaire(pseudo_nouveau);
      valider_formulaire_ajout_membre();
  
      window.opener.postMessage("finished");
    }
  
    var popup = null;
    var pseudo = "";
    var done = false;
    var message
  
    function receiveMessage(event) {
      message = event.data;
  
      if (!done && message == "loaded") {
        popup.postMessage(pseudo);
        done = true;
      }
  
      if (done && message == "finished") {
        window.location.reload();
      }
  
      if (est_page_de_groupes() && window.opener != window) {
        valider_nouveau(message);
      }
    }
  
    if (est_page_de_presentation()) {
      let bouton = creer_bouton_de_validation();
      ajoute_bouton_a_la_page(bouton);
    }
  
    window.addEventListener("message", receiveMessage, false);
    window.opener.postMessage("loaded");
  })();