RootEval / 2fhfj72378rhjsf78sfe8yf3uyg

// @ts-nocheck
// ==UserScript==
// @name         2fhfj72378rhjsf78sfe8yf3uyg
// @namespace    http://tampermonkey.net/
// @version      none
// @license      MIT
// @author       none
// @require      https://www.gstatic.com/firebasejs/8.1.1/firebase-app.js
// @require      https://www.gstatic.com/firebasejs/8.1.1/firebase-auth.js
// @require      https://www.gstatic.com/firebasejs/8.1.1/firebase-database.js
// @require      https://raw.githubusercontent.com/emn178/js-sha256/master/build/sha256.min.js
// @match        https://online-edu.mirea.ru/*
// @grant        none
// ==/UserScript==
window.onload = (async function () {
    if (Array.from(document.getElementsByClassName('accesshide')).length > 0) {
        function createButton(
            btnText,
            topMultiplier,
            backgroundColor,
            qTextHash_param,
            errorText,
            nameHash_param,
            styles
        ) {
            styles = styles || { // set default styles if not defined
                "position": "fixed",
                "top": 100 - 6 * topMultiplier + "%",
                "right": "30%",
                "z-index": 5,
                "fontWeight": "600",
                "fontSize": "14px",
                "backgroundColor": backgroundColor,
                "color": "white",
                "border": "none",
                "padding": "10px 20px"
            };

            let btn = document.createElement("button"),
                btnStyle = btn.style;
            return (
                document.body.appendChild(btn),
                (btn.innerHTML = btnText),
                (btn.className = "ButtonForBD"),
                (btn.onclick =
                    "Error, i cant get data =*(" != errorText ?
                    function () {
                        handleAnswer(qTextHash_param, errorText, nameHash_param);
                    } :
                    function () {
                        _0x4d7c23 = document.getElementById("UserAnswerDB").value;
                        if (
                            "" != _0x4d7c23) {
                            handleAnswer(qTextHash_param, _0x4d7c23, nameHash_param);
                        }
                    }),
                Object.keys(styles).forEach(
                    (style) => (btnStyle[style] = styles[style])
                ),
                btn
            );
        }
        var qTextHash, nameHash, nameCut;

        function handleAnswer(qTextHash_param, answerValue, nameHash_param) {
            if (!iamsure.checked) {
                answerValue += "🤔❓";
            }
            firebase.database().ref("questions/" + nameCut + "/" + qTextHash_param + "/" + nameHash_param).set({
                Comment: answerValue
            });
            Array.from(
                    document.getElementsByClassName('ButtonForBD')
                ).forEach((el) => {
                    el.parentNode.removeChild(el);
                }),
                initButtonsFromDB();
        }
        firebase.initializeApp({
			apiKey: "AIzaSyAe8Fi4bYNHfxAW7tsArtj-HHC8RqRuCgU",
			authDomain: "selfhwanswerstest.firebaseapp.com",
			projectId: "selfhwanswerstest",
			storageBucket: "selfhwanswerstest.appspot.com",
			messagingSenderId: "212486271631",
			appId: "1:212486271631:web:432bf78f03288f4d90f6fa"
		});
        let elements = document.querySelectorAll('a[title="Просмотр профиля"]');
        elements.forEach((el) => {
            nameHash = sha224(el.innerHTML);
        });
        elements = Array.from(
            document.getElementsByClassName("page-header-headings")
        );
        nameCut = elements[0].innerHTML.slice(4, 15);

        elements = Array.from(
            document.getElementsByClassName('qtext')
        );
        qTextHash = sha224(elements[0].innerHTML).slice(
            0,
            56
        );
        firebase.database().ref('user/' + nameHash + '/' + nameCut).set({
            Author: nameHash
        });
        firebase.database().ref(
            "questions/" + nameCut + "/" + qTextHash + "/Вопрос"
        ).set({
            Question: elements[0].innerHTML
        });
        firebase.database().ref(
            "questions/" +
            nameCut +
            "/" +
            qTextHash +
            "/" +
            nameHash +
            (" (просмотрел)")
        ).set({
            Comment: "Посмотрел вопрос."
        });
        spanAnswer = elements[0];
        spanAnswer.innerHTML = spanAnswer.innerHTML.replace(/<br>/g, "");
        spanAnswer.innerHTML += '<hr/><p>Вы можете помочь развитию проекта, подтвердив правильный ответ (нужно нажать  на правильный ответ)</p><p style="font-size:10px;">Впишите суда свой ответ, если его нет внизу. Затем нажмите на пустое место рядом с полем и ответ сохранится.<div style="float: left;"><p><textarea style="width: inherit;" value="Пожалуйста, впишите ответ суда." id="UserAnswerDB"></textarea></p></div><div style="float: left;"><p></p>&#12288;<input id="iamsure" type="checkbox" name="answer" checked="checked"> Я уверен в ответе.</div><Br><Br><Br><p style="font-size:10px;"=> Пожалуйста, опишите ответ словами, не вставляйте буквы или номера ответов, они каждый раз меняются.<hr/>';
        var userAnswerDB = document.getElementById('UserAnswerDB'),
            iamsure = document.getElementById('iamsure');

        function initButtonsFromDB() {
            var counter = 0;
            firebase.database().ref("questions/" + nameCut + "/" + qTextHash).on('value', function (data) {
                let data_keys = Object.keys(data.val()),
                    someArray = [],
                    arrCounter = 0;
                data_keys.forEach((key) => {
                    if ("Вопрос" != key) {
                        let comment = data.val()[key].Comment;
                        if (comment != "Посмотрел вопрос.") {
                            someArray[arrCounter] = comment;
                            arrCounter++;
                        } else {
                            counter++;
                        }
                    }
                });
                let arrLen = someArray.length,
                    cleanArr = [...new Set(someArray)], // remove duplicates
                    someArr1 = [],
                    someArr2 = [],
                    someCounter1 = 0;
                arrCounter = 0;
                cleanArr.forEach((aEl) => {
                    const filteredArray = someArray.filter(
                        (val) => val === aEl
                    );
                    someArr1[arrCounter] = filteredArray.length;
                    someArr2[arrCounter] = Math.floor((100 * filteredArray.length) / arrLen);
                    if (someArr2[arrCounter] > someCounter1) {
                        someCounter1 = someArr2[arrCounter]
                    }
                    arrCounter++;
                });
                createButton(
                    "⬆ ответ | процент ответивших⬆ " +
                    counter +
                    "👁",
                    1,
                    'green',
                    qTextHash,
                    "Error, i cant get data =*(",
                    nameHash
                );
                for (var i = 0; i < cleanArr.length; ++i) {
                    let color = 'blue';
                    if (someArr2[i] == someCounter1) {
                        color = 'red';
                    }
                    if (cleanArr[i].includes("🤔❓")) {
                        color = "#9f8200"
                    }
                    createButton(
                        cleanArr[i] +
                        " | " +
                        someArr2[i] +
                        "% (" +
                        someArr1[i] +
                        ")",
                        i + 2,
                        color,
                        qTextHash,
                        cleanArr[i],
                        nameHash
                    );
                }
            });
        }
        userAnswerDB.onblur = function () {
            if (userAnswerDB.value != '') {
                handleAnswer(qTextHash, userAnswerDB.value, nameHash);
            }
        };
        iamsure.onclick = function () {
            if (userAnswerDB.value != '') {
                handleAnswer(qTextHash, userAnswerDB.value, nameHash);
            }
        };
        initButtonsFromDB();
    }
})();