Rue mod

An experimental mod for R74n's Rue

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

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

})();