hwm_forum_ban

changing messages of your enemies to any text that you want

// ==UserScript==
// @name         hwm_forum_ban
// @namespace    http://tampermonkey.net/
// @version      1.01
// @author       Лосось
// @description  changing messages of your enemies to any text that you want
// @match        /^https{0,1}:\/\/((www|qrator|my)\.(heroeswm|lordswm)\.(ru|com)|178\.248\.235\.15)\/(forum_messages).php*/
// @include      /^https{0,1}:\/\/((www|qrator|my)\.(heroeswm|lordswm)\.(ru|com)|178\.248\.235\.15)\/(forum_messages).php*/
// @license MIT
// @grant        none
// ==/UserScript==

(function () {
  'use strict';
  //init UI elements
  let fragment = document.createElement('div');

  let showScriptBtn = document.createElement('button');
  showScriptBtn.innerText = 'Ban List';

  let addNewHeroBtn = document.createElement('button');
  addNewHeroBtn.innerText = 'Add new hero';

  let inputHero = document.createElement('input');
  inputHero.placeholder = 'enter hero nickname';

  let inputHeroText = document.createElement('input');
  inputHeroText.placeholder = 'enter hero text';

  let banList = document.createElement('ul');

  //init variables and constants
  let isShowScriptLS = JSON.parse(localStorage.getItem('hwmScriptToogle'));

  let nicks = JSON.parse(localStorage.getItem('nicks'));

  let isShowScript = isShowScriptLS;

  let messages = [...document.querySelectorAll('.message_footer')];

  // init saved data

  if (!isShowScriptLS) {
    localStorage.setItem('hwmScriptToogle', JSON.stringify(false));
  }

  if (!nicks) {
    localStorage.setItem('nicks', JSON.stringify([]));
    location.reload();
  }

  // add event listeners to ui

  showScriptBtn.addEventListener('click', () => {
    isShowScript = !isShowScript;
    localStorage.setItem('hwmScriptToogle', isShowScript);
    fragment.style.visibility = isShowScript ? 'visible' : 'hidden';
  })

  addNewHeroBtn.addEventListener('click', () => {
    if (!inputHero.value.length) {
        alert('enter a nickname!');
        return;
    };
    let newHero = {
      id: new Date().getTime(),
      text: inputHeroText.value,
      nick: inputHero.value,
    }
    nicks.push(newHero);
    localStorage.setItem('nicks', JSON.stringify(nicks));
    location.reload();
  })

  // add styles to ui

  showScriptBtn.style = 'position: absolute; right: 10px; top: 2px; z-index: 999998'
  fragment.style = 'background: DarkKhaki; position: absolute; right: 10px; top: 25px; min-height: 100px; min-width: 300px; display: flex; flex-direction: column; z-index: 999999'
  fragment.style.visibility = isShowScript ? 'visible' : 'hidden';

  // parsing posts and making changes

  for (let i = 0; i < messages.length; i++) {
    for (let j = 0; j < nicks.length; j++) {
      if (messages[i].getElementsByTagName('a')[0].innerText.toLowerCase() === nicks[j].nick.toLowerCase() || messages[i].getElementsByTagName('a')[1].innerText.toLowerCase() === nicks[j].nick.toLowerCase()) {
        messages[i].nextSibling.innerText = nicks[j].text;
        messages[i].nextSibling.style = 'color: #000000; padding: 5px;font-size: 0.8125em;';
      }
    }
  }

  for (let i = 0; i < nicks.length; i++) {
    let listElement = document.createElement('li');
    let bannedNick = document.createElement('span');
    let bannedNickText = document.createElement('span');

    bannedNick.innerText = nicks[i].nick;
    bannedNickText.innerText = nicks[i].text;

    bannedNick.style = 'padding: 5px; background: FloralWhite'
    bannedNickText.style = 'padding: 5px; background: Gainsboro'

    let deleteBtn = document.createElement('button');
    deleteBtn.style = 'width: 25px; height: 25px; border: none; cursor: pointer; margin-left: 5px; border-radius: 15px;';
    deleteBtn.innerText = 'X';

    listElement.appendChild(bannedNick)
    listElement.appendChild(bannedNickText)
    listElement.appendChild(deleteBtn)

    deleteBtn.addEventListener('click', () => {
      nicks = nicks.filter(nick => nick.id !== nicks[i].id);
      localStorage.setItem('nicks', JSON.stringify(nicks));
      location.reload();
    })
    banList.appendChild(listElement);
  }

  fragment.appendChild(inputHero);
  fragment.appendChild(inputHeroText);
  fragment.appendChild(addNewHeroBtn);
  fragment.appendChild(banList);

  document.body.appendChild(fragment);
  document.body.appendChild(showScriptBtn);
})();