Rue mod

An experimental mod for R74n's Rue

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Rue mod
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  An experimental mod for R74n's Rue
// @author       An Orbit
// @match        https://r74n.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=r74n.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    var swearRegex = RegExp('},1{)?)y|ecaf|daeh|gni|eloh|kcits|rekcus|rekcil|re|] -\\[|s?e|()|kcollob|erohw|ttuls|tuls|yssup|kcoc|tnuc|stit|ssa|hctib|kcid|ttihs|)|ym(muc|tihs|tihs|tawt|parc|kcuf|esra(()|)?]-\\ [)|ym]-\\ [())tae|kcus|kcil(|woc|tab|uoy|god|esroh|llub((('.split("").reverse().join(""));
    var blackpinkResponse = ["blackpink>>>In {{i|my}} area?", "blackpink>>>I love {{c:Whistle|Boombayah|Playing With Fire|Stay|As If It's Your Last|Ddu-du Ddu-du|Forever Young|Really|See U Later|Kiss And Make Up|Kill This Love|Don't Know What To Do|Kick It|Hope Not|Sour Candy|Lovesick Girls|Bet You Wanna|How You Like That|Ice Cream|Pretty Savage|Crazy Over You|Love To Hate Me|You Never Know|Pink Venom|Shut Down|Typa Girl|Yeah Yeah Yeah|Hard To Love|The Happiest Girl|Tally|Ready For Love|Solo|Flower|All Eyes On Me|Lalisa|Money|On The Ground|Gone}}", "blackpink>>>Stan Blackpink!", "blackpink>>>BLACKPINK is the revolution."];
    var lgbtRegex = /^i('| a|)m (a |)(gay|lesbian|sapphic|queer|gender(queer|fluid)|achillean|enby|nonbinary|ace|a(sexual|romantic|gender)|trans(gender|sexual|)|(bi|demi|pan)(gender)|(homo|bi|demi|pan|omni)(sexual|romantic|)|(lg|gl)btq?i?a?(2s?|)\+?|a (boy|girl)).*/; //Rue says LGBT rights.
    var tRegex2 = /^i was (born |)a (boy|girl),? but (now |)i('| a)m (actually |)a (boy|girl).*/;
    var bodilyFluidRegex = RegExp('))raewrednu|seitnap|stnap( ym)| ni(|flesym)| no(( )deelb|muc|eep|delb|demmuc|emac|deep|)|det(t]ai[hs|)|de|t(ssip()| tsuj( i'.split("").reverse().join(""));
    var poopSqueezeRegex = RegExp('*.meht ))|gni(nettalf|)|gni(hsurc|)e|gni(zeeuqs( dna ?s)secef|tacs|parc|)ei|y(kood|loots|pmud|?poop|tihs|drut(? *. ))|gni(dloh|)|gnit(teg|)|gnib(barg|)e|gni(kat()| )|ot (ekil( i'.split("").reverse().join(""));
    var eatingGrossRegex = RegExp('*.?s)diulf lanimes|mreps|zzij|tun|knups|nemes|muc|eniru|ssip|eep|pmud|secef|tacs|drut|parc|?poop|tihs(? *. )|no ()|gni()?etib|kcans|hcnum|kcil|kcus|pruls|knird|tae()| )|ot (ekil( i'.split("").reverse().join(""));

    Rue.disgusted = function(message) {
        Rue.say(message, {color:"#b7cf1f",bg:"#797d43"})
    }

    Rue.blackpink = function(message) {
        Rue.say(message, {color:"#ffc2e7",bg:"black"})
    };

    Rue.grossedOut = function() {
        Rue.disgusted("That's it. I'm leaving.");
        document.getElementById("rueInput").setAttribute("disabled","true");
        setTimeout(function() {
            Rue.sleep(20051106)
        }, 2000);
    }
//

    var rueMessageBoxSize = 308; //parseInt(document.getElementById("rueMessageBox").style.width.match(/\d+/)[0]) - 16
    var size = rueMessageBoxSize - 16;

    Rue.modAudioTag = document.createElement("audio");
    Rue.youtubeEmbedIframe = document.createElement("iframe");
    var attributes = {
        "width": (size).toString(),
        "height": Math.round(size * 318 / 560).toString(),
        "title": "YouTube video player",
        "frameborder": "0",
        "allow": "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share", //yikes
        "allowfullscreen": ""
        //"src": "https://www.youtube.com/embed/VideoID"
    };
    for(var key in attributes) {
        Rue.youtubeEmbedIframe.setAttribute(key,attributes[key])
    };

    function tryToFindYoutubeID(string) {
        var idFromLink = string.match(/v=([A-Za-z0-9_\-]+)/)?.[1];
        if(idFromLink) {
            return idFromLink
        };
        var idFromEnd = string.match(/[A-Za-z0-9_\-]+$/)?.[0];
        if(idFromEnd) { //Also matches lone ID
            return idFromEnd
        };
        var idFromRegex = string.match(/([A-Za-z0-9_\-]+)/g);
        if(idFromRegex) {
            var ids = idFromRegex.filter(function(str) { return str.length > 7 && str.length < 14});
            if(ids.length > 0) {
                return ids[0]
            }
        };
        return null
    };

    Rue.addRueData(
        {
            favorites: {
                "girl group": "EXID",
                "kep1er song": '<span style="color:#fc2dfc">We Fresh</span>' //cry about it
            },
            commands: {
                [poopSqueezeRegex]: Rue.grossedOut,
                [eatingGrossRegex]: Rue.grossedOut,
                "play audio": function(args) {
                    if(args[0] == "" || args.length < 1) {
                        Rue.error("Please provide a link to an audio file");
                        return
                    };
                    Rue.modAudioTag.setAttribute("src",args[0]);
                    Rue.modAudioTag.setAttribute("controls","true");
                    //Dummy Rue.say so that the rueMessageBox exists
                    Rue.say("Loading...");
                    //HTMLAudioElement.play() returns a Promise so I'm trying to use that to my advantage
                    Rue.modAudioTag.play().then(
                        //Success callback
                        function() {
                            Rue.success("Here you go!")
                            //Try to re-append so the tag appears after the text
                            document.getElementById("rueMessageBox").appendChild(Rue.modAudioTag);
                            Rue.sticky()
                        },
                        //Failure callback
                        function() {
                            //No need to show the audio controls if it didn't work?
                            Rue.error("Sorry, I couldn't play that file.");
                            Rue.unsticky()
                        }
                    );
                },
                "play youtube": function(args) {
                    if(args[0] == "" || args.length < 1) {
                        Rue.error("Please provide a link or ID");
                        return
                    };
                    var id = tryToFindYoutubeID(args[0]);
                    if(id) {
                        Rue.youtubeEmbedIframe.setAttribute("src","https://www.youtube.com/embed/" + id);
                        Rue.success("Here you go!");
                        document.getElementById("rueMessageBox").appendChild(Rue.youtubeEmbedIframe);
                        Rue.sticky()
                    } else {
                        Rue.error("Sorry, I couldn't find a video ID.");
                        Rue.unsticky()
                    }
                }
            },
            responses: {
                [/dirt ?[,+] ?water/]: "You made Mud!",
                loona: ["Loona is 12!","Stan Loona","{{link:https://drive.google.com/drive/folders/15nOtXlSIKYD_anDn7PtDimHiyByzrjFa?usp=share_link|Burn BBC}}"],
                "이달의 소녀": "=loona",
                "stan loona": "=loona",
                "今月の少女": "=loona",
                "looπδ": "=loona",
                [/(stick|s|y)+/]: "=[unsure]",
                [swearRegex]: ["angry>>>That's not nice!","angry>>>Do you kiss your mother with that mouth?","angry>>>Those are bad words!","angry>>>Stop swearing!","angry>>>You're being naughty.","angry>>>That's rude!"],
                [/(stick|s|y)+/]: "=[unsure]",
                "comeouttorue": "love>>>I'm so {{c:happy|proud of you}}!",
                "i'm coming out": "=comeouttorue",
                "i'm coming out to you": "=comeouttorue",
                [lgbtRegex]: "=comeouttorue",
                [tRegex2]: "=comeouttorue",
                "alga recipe": "molten gallium + aluminum",
                "blackpink": blackpinkResponse,
                [bodilyFluidRegex]: ["disgusted>>>Eww...", "disgusted>>>That's {{c:gross|nasty|disgusting}}!", "disgusted>>>I didn't need to know that.", "disgusted>>>TMI."]
            }
        }
    );

})();