LOLZ_Fast_Delete_el9in

LOLZ Fast Delete

// ==UserScript==
// @name         LOLZ_Fast_Delete_el9in
// @namespace    LOLZ_Fast_Delete_el9in
// @version      0.4
// @description  LOLZ Fast Delete
// @author       el9in
// @match        https://zelenka.guru/?tab=mythreads*
// @match        https://lolz.guru/?tab=mythreads*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=zelenka.guru
// @license      el9in
// @grant        GM.setValue
// @grant        GM.getValue
// ==/UserScript==

(async function() {
    'use strict';
    const ignoreThreads = [6118447, 1];

    const inputElement = document.querySelector('input[type="hidden"][name="_xfToken"]');
    const xfTokenValue = inputElement.value;

    const checker = {};
    const times = 2;

    function check(threadId) {
      if(!checker[threadId]) {
        checker[threadId] = 1;
        return false;
      }

      checker[threadId] ++;

      if(checker[threadId] >= times) return true;
    }
    async function init() {
        if(xfTokenValue) {
            const elements_threads = document.querySelectorAll('[id*="thread-"]');
            elements_threads.forEach(function(element) {
                const idValue = element.getAttribute('id');

                const parts = idValue.split('thread-');
                if (parts.length > 1) {
                    const thread_id = parts[1];
                    if(ignoreThreads.indexOf(parseInt(thread_id)) === -1) {
                        const Tooltip = element.querySelector('.controls');
                        if(Tooltip) {
                            const copyElement = document.createElement("a");
                            copyElement.setAttribute("class", "StarContent threadControl far fa-trash Tooltip");
                            copyElement.setAttribute("title", "Удалить тему");
                            Tooltip.appendChild(copyElement);
                            copyElement.addEventListener('click', function(event) {
                                event.preventDefault();

                                if(!check(thread_id)) {
                                    XenForo.alert('Нажмите ещё раз для удаления темы.', "Предупреждение", 2000);
                                    return;
                                }

                                var formData = new FormData();
                                formData.append('reason', '');
                                formData.append('hard_delete', '0');
                                formData.append('_xfConfirm', '1');
                                formData.append('_xfToken', xfTokenValue);
                                formData.append('_xfRequestUri', `/threads/${thread_id}/`);
                                formData.append('_xfNoRedirect', '1');
                                formData.append('_xfToken', xfTokenValue);
                                formData.append('_xfResponseType', 'json');

                                fetch(`https://zelenka.guru/threads/${thread_id}/delete`, {
                                    "body": formData,
                                    "method": "POST",
                                    "mode": "cors",
                                    "credentials": "include"
                                });

                                element.remove();
                            });
                        }
                    }
                }
            });
        }
    }

    async function ones(element) {
      if(xfTokenValue) {
        try {
          const idValue = element.getAttribute('id');
          if(idValue) {
            const parts = idValue.split('thread-');
            if (parts.length > 1) {
              const thread_id = parts[1];
                if(ignoreThreads.indexOf(parseInt(thread_id)) === -1) {
                    const Tooltip = element.querySelector('.controls');
                    if(Tooltip) {
                        const copyElement = document.createElement("a");
                        copyElement.setAttribute("class", "StarContent threadControl far fa-trash Tooltip");
                        copyElement.setAttribute("title", "Удалить тему");
                        Tooltip.appendChild(copyElement);
                        copyElement.addEventListener('click', function(event) {
                            if(!check(thread_id)) {
                                XenForo.alert('Нажмите ещё раз для удаления темы.', "Предупреждение", 2000);
                                return;
                            }

                            event.preventDefault();

                            var formData = new FormData();
                            formData.append('reason', '');
                            formData.append('hard_delete', '0');
                            formData.append('_xfConfirm', '1');
                            formData.append('_xfToken', xfTokenValue);
                            formData.append('_xfRequestUri', `/threads/${thread_id}/`);
                            formData.append('_xfNoRedirect', '1');
                            formData.append('_xfToken', xfTokenValue);
                            formData.append('_xfResponseType', 'json');

                            fetch(`https://zelenka.guru/threads/${thread_id}/delete`, {
                                "body": formData,
                                "method": "POST",
                                "mode": "cors",
                                "credentials": "include"
                            });

                            element.remove();
                        });
                    }
                }
            }
          }
        } catch(error) {};
      }
    }

    const observer = new MutationObserver((mutationsList, observer) => {
      for (const mutation of mutationsList) {
        if (mutation.type === 'childList') {
          mutation.addedNodes.forEach(addedNode => {
            if (addedNode.nodeType === Node.ELEMENT_NODE) {
              ones(addedNode);
            }
          });
        }
      }
    });

    const config = { childList: true, subtree: true };
    observer.observe(document.body, config);

    init();
})();