Greasy Fork is available in English.

report button

666

// ==UserScript==
// @name         report button
// @namespace    https://lolz.guru/
// @version      0.1
// @description  666
// @author       You
// @include      /^https:\/\/(lolz\.guru|zelenka\.guru)/*/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=lolz.guru
// @grant        none
// ==/UserScript==
 
(function() {
    const buttons = {
        "Флуд / Оффтоп / Спам / Бесполезная тема": {
            name: 'Оффтоп',
        },
        "Создание темы не в соответствующем разделе": {
            name: 'раздел',
        },
    }
    const _xfToken = document.querySelector('input[name="_xfToken"]').value;
 
    async function postData(url = '', formData) {
        return await fetch(url, { method: 'POST', body: formData });
    }
 
 
    const blocks = document.querySelectorAll('#messageList > li');
    for(let block of blocks) {
        for(let key in buttons) {
            let name = buttons[key].name;
            let message = buttons[key].message;
            let span = document.createElement('span');
            span.innerText = name;
            span.setAttribute('style', 'font-weight: bold; padding: 3px 10px; background: #218e5d; border-radius: 50px; margin-right: 5px; cursor: pointer;')
            span.onclick = function() {
                let formData = new FormData();
                formData.append("message", key)
                formData.append("is_common_reason", 1)
                formData.append("_xfToken", _xfToken);
                formData.append("_xfNoRedirect", 1)
                formData.append("_xfToken", _xfToken);
                formData.append("redirect", window.location.href);
                postData('posts/' + block.id.split('-')[1] +'/report', formData)
                XenForo.alert('Жалоба отправлена', '', 5000);
            }
            if(block.querySelector('.publicControls')) block.querySelector('.publicControls').prepend(span)
 
        }
    }
})();
 
(function() {
    var regex = /&user_id=(\d+)&username/g;
 
    const threadList = document.querySelector(".userContentLinks");
    if(!threadList) {
        console.log('its not a member');
        return;
    }
    const currentUserId = regex.exec(threadList.firstElementChild.href)[1];
    console.log(currentUserId);
 
    function createButton(parent, callback) {
        let btnname = document.createElement("a");
        btnname.className = "OverlayTrigger button smallButton";
        btnname.style.margin = "10px 0 5px";
        btnname.style.backgroundColor = "rgb(136,68,68)";
        btnname.innerHTML = "Report";
        btnname.onclick = callback;
        parent.appendChild(btnname);
    }
 
 
    const _xfToken = document.querySelector('input[name="_xfToken"]').value;
    const title = document.querySelector('.userContentLinks a:first-child').getAttribute('href').split('=')[3];
    async function postData(url = '', formData) {
        return await fetch(url, { method: 'POST', body: formData })
            .then(function(response) {
            // Стоит проверить код ответа.
            if (!response.ok) {
                // Сервер вернул код ответа за границами диапазона [200, 299]
                return Promise.reject(new Error(
                    'Response failed: ' + response.status + ' (' + response.statusText + ')'
                ));
            }
 
            // Далее будем использовать только JSON из тела ответа.
            return response.json();
        }).then(function(data) {
            console.log(data['_redirectTarget'])
            var threadlink = data['_redirectTarget']
            if (threadlink) {
                window.location.replace(threadlink)
            }
        });
    };
    function waitForElm(selector) {
        return new Promise(resolve => {
            if (document.querySelector(selector)) {
                return resolve(document.querySelector(selector));
            }
 
            const observer = new MutationObserver(mutations => {
                if (document.querySelector(selector)) {
                    resolve(document.querySelector(selector));
                    observer.disconnect();
                }
            });
 
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        });
    }
 
    waitForElm('.ipMatches').then((elm) => {
        console.log('IP Opened');
 
        let elements = document.getElementsByClassName('userInfo');
        for(let el of elements) {
            if(el.getElementsByClassName("banReason").length > 0) {
                createButton(el, function() {
                    let formData = new FormData();
                    formData.append("prefix_id[]", 92);
                    formData.append("title", 'Жалоба на ' + decodeURIComponent(title));
                    formData.append("message_html", '<p>1. Никнейм нарушителя и ссылка на профиль: https://lolz.guru/members/'+ currentUserId +'/ @'+ decodeURIComponent(title) + '</p><p>2. Краткое описание жалобы: Был ранее заблокирован</p> <p>3. Доказательства: https://lolz.guru/members/'+ currentUserId +'/shared-ips</p>')
                    formData.append("_xfRelativeResolver:", "https://lolz.guru/forums/test-forum/create-thread")
                    formData.append("tags", "кидок,мульт,мошенник")
                    formData.append("watch_thread", 1)
                    formData.append("watch_thread_state", 1)
                    formData.append("_xfToken", _xfToken);
                    formData.append("_xfRequestUri", "/forums/801/create-thread");
                    formData.append("_xfNoRedirect", 0)
                    formData.append("_xfToken", _xfToken);
                    formData.append("_xfResponseType", "json");
                    postData(`https://lolz.guru/forums/801/add-thread`, formData)
                    XenForo.alert('Жалоба размещена', '', 5000);
 
                });
            }
        }
    });
})();