StopMultipleMessageForumOnly

Block spam on over-clicking

// ==UserScript==
// @name        StopMultipleMessageForumOnly
// @namespace   Forum
// @match       https://www.dreadcast.net/Forum*
// @match       https://www.dreadcast.net/FAQ*
// @version     1.3.4
// @author      Kmaschta, MockingJay, Pelagia
// @description Block spam on over-clicking
// @license     https://github.com/Isilin/dreadcast-scripts?tab=GPL-3.0-1-ov-file
// @require     https://update.greasyfork.org/scripts/507382/Dreadcast%20Development%20Kit.user.js
// @grant       none
// ==/UserScript==

(() => {
  DC.Style.apply(`#zone_reponse .bouton.poster.locked {
    background: #444;
    color: #e9e9e9; 
  }`);

  const unlock = (elem, onclick, content) => {
    elem.attr('onclick', onclick);
    elem.click(() => lock(elem));
    elem.removeAttr('style');
    elem.html(content);
    elem.removeClass('locked');
  };

  const lock = (elem) => {
    // Save event action
    var onclick = elem.attr('onclick');
    var content = elem.html();

    // Lock button
    elem.removeAttr('onclick');
    elem.unbind('click');
    elem.html('Verrouillé');
    elem.addClass('locked');

    // Still unlock after 5s
    var tid = setTimeout(() => {
      if (elem.hasClass('locked')) {
        unlock(elem, onclick, content);
        elem.unbind('dblclick');
      }
    }, 5000);

    // Unlock button on dbl click
    elem.dblclick(() => {
      clearTimeout(tid);
      unlock(elem, onclick, content);
    });
  };

  $(document).ready(() => {
    // Forum "Poster" button
    const button = $('#zone_reponse .bouton.poster').not('.locked');
    button.click(() => lock(button));
  });
})();