Rue mod

An experimental mod for R74n's Rue

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==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."]
            }
        }
    );

})();