// ==UserScript== // @name Discord Status Animator (Manual edit/Non-UI) // @namespace https://github.com/Hakorr/discord-status-animator // @run-at document-start // @version 1.7 // @description Automatically changes your Discord status // @author HKR // @match https://discord.com/discovery // @match https://discord.com/discovery/* // @match https://discord.com/store // @match https://discord.com/store/* // @match https://discord.com/channels // @match https://discord.com/channels/* // @match https://discord.com/app // @grant none // @downloadURL none // ==/UserScript== //Welcome! Don't be scared by the code, I was too lazy to do an UI for this. //Visit the Github for more more instructions! github.com/Hakorr/discord-status-animator var name = "Status Animator"; var version = "V1.7"; var run = true; //A Cookie will be made with this name, feel free to edit it //DO NOT SHARE THIS COOKIE WITH ANYONE AS IT'S YOUR DISCORD TOKEN var cookie_name = "DoNotShareThisToken"; var delete_cookie_after_a_week = true; //Your status will be changed to these after you close the Discord tab var default_status_text = ""; var default_status_emoji = ""; var default_status_state = "online"; async function statusanimation() { //////////////////////////////////// //This is your animation code/////// await blink("๐Ÿฅณ","I'm using Discord Status Animator!",2000,1); if(await skip(10,"unique")) return; await settext("Get it here! Github.com/Hakorr/discord-status-animator"); await wait(5000); //Your animation code ends here///// //////////////////////////////////// } ///////////////////////////////////// /* ANIMATION BLOCKS ///////////////// Timeouts are in milliseconds! You can type "random" on the emoji section to randomize it! - await wait(ms); - await blank(); - await setstate("state"); -> states = invisible, dnd, idle, online - await setemoji("emoji"); - await settext("text"); - await status(emoji,text,state); -> states = invisible, dnd, idle, online - await typewriter("emoji","text",timeout,reversed); - await glitch("emoji","text",times,timeout); - await glitchtype("emoji","text",timeout,glitch_rate,reversed); - await sentence("emoji","text",timeout); - await blink("emoji","text",timeout,times); - await count("emoji","prefix",count_to,"suffix",timeout,reversed); - if(await skip(1,"unique")) return; -> The unique string can be anything. If you use two skips, remember to make each one different. //Do not edit after this line (If you don't know what you're doing) /*///////////////////////////////////////////////////////////////*/ /////////////////////////////////////////////////////////////////// //Return a random emoji function random_emoji() { var emojis = [ '๐Ÿ˜„','๐Ÿ˜ƒ','๐Ÿ˜€','๐Ÿ˜Š','๐Ÿ˜‰','๐Ÿ˜','๐Ÿ˜˜','๐Ÿ˜š','๐Ÿ˜—','๐Ÿ˜™','๐Ÿ˜œ','๐Ÿ˜','๐Ÿ˜›','๐Ÿ˜ณ','๐Ÿ˜','๐Ÿ˜”','๐Ÿ˜Œ','๐Ÿ˜’','๐Ÿ˜ž','๐Ÿ˜ฃ','๐Ÿ˜ข','๐Ÿ˜‚','๐Ÿ˜ญ','๐Ÿ˜ช','๐Ÿ˜ฅ','๐Ÿ˜ฐ','๐Ÿ˜…','๐Ÿ˜“','๐Ÿ˜ฉ','๐Ÿ˜ซ','๐Ÿ˜จ','๐Ÿ˜ฑ','๐Ÿ˜ ','๐Ÿ˜ก','๐Ÿ˜ค','๐Ÿ˜–','๐Ÿ˜†','๐Ÿ˜‹','๐Ÿ˜ท','๐Ÿ˜Ž','๐Ÿ˜ด','๐Ÿ˜ต','๐Ÿ˜ฒ','๐Ÿ˜Ÿ','๐Ÿ˜ฆ','๐Ÿ˜ง','๐Ÿ˜ˆ','๐Ÿ‘ฟ','๐Ÿ˜ฎ','๐Ÿ˜ฌ','๐Ÿ˜','๐Ÿ˜•','๐Ÿ˜ฏ','๐Ÿ˜ถ','๐Ÿ˜‡','๐Ÿ˜','๐Ÿ˜‘','๐Ÿ‘ฒ','๐Ÿ‘ณ','๐Ÿ‘ฎ','๐Ÿ‘ท','๐Ÿ’‚','๐Ÿ‘ถ','๐Ÿ‘ฆ','๐Ÿ‘ง','๐Ÿ‘จ','๐Ÿ‘ฉ','๐Ÿ‘ด','๐Ÿ‘ต','๐Ÿ‘ฑ','๐Ÿ‘ผ','๐Ÿ‘ธ','๐Ÿ˜บ','๐Ÿ˜ธ','๐Ÿ˜ป','๐Ÿ˜ฝ','๐Ÿ˜ผ','๐Ÿ™€','๐Ÿ˜ฟ','๐Ÿ˜น','๐Ÿ˜พ','๐Ÿ‘น','๐Ÿ‘บ','๐Ÿ™ˆ','๐Ÿ™‰','๐Ÿ™Š','๐Ÿ’€','๐Ÿ‘ฝ','๐Ÿ’ฉ','๐Ÿ”ฅ','โœจ','๐ŸŒŸ','๐Ÿ’ซ','๐Ÿ’ฅ','๐Ÿ’ข','๐Ÿ’ฆ','๐Ÿ’ง','๐Ÿ’ค','๐Ÿ’จ','๐Ÿ‘‚','๐Ÿ‘€','๐Ÿ‘ƒ','๐Ÿ‘…','๐Ÿ‘„','๐Ÿ‘','๐Ÿ‘Ž','๐Ÿ‘Œ','๐Ÿ‘Š','โœŠ','โœŒ','๐Ÿ‘‹','โœ‹','๐Ÿ‘','๐Ÿ‘†','๐Ÿ‘‡','๐Ÿ‘‰','๐Ÿ‘ˆ','๐Ÿ™Œ','๐Ÿ™','โ˜','๐Ÿ‘','๐Ÿ’ช','๐Ÿšถ','๐Ÿƒ','๐Ÿ’ƒ','๐Ÿ‘ซ','๐Ÿ‘ช','๐Ÿ‘ฌ','๐Ÿ‘ญ','๐Ÿ’','๐Ÿ’‘','๐Ÿ‘ฏ','๐Ÿ™†','๐Ÿ™…','๐Ÿ’','๐Ÿ™‹','๐Ÿ’†','๐Ÿ’‡','๐Ÿ’…','๐Ÿ‘ฐ','๐Ÿ™Ž','๐Ÿ™','๐Ÿ™‡','๐ŸŽฉ','๐Ÿ‘‘','๐Ÿ‘’','๐Ÿ‘Ÿ','๐Ÿ‘ž','๐Ÿ‘ก','๐Ÿ‘ ','๐Ÿ‘ข','๐Ÿ‘•','๐Ÿ‘”','๐Ÿ‘š','๐Ÿ‘—','๐ŸŽฝ','๐Ÿ‘–','๐Ÿ‘˜','๐Ÿ‘™','๐Ÿ’ผ','๐Ÿ‘œ','๐Ÿ‘','๐Ÿ‘›','๐Ÿ‘“','๐ŸŽ€','๐ŸŒ‚','๐Ÿ’„','๐Ÿ’›','๐Ÿ’™','๐Ÿ’œ','๐Ÿ’š','โค','๐Ÿ’”','๐Ÿ’—','๐Ÿ’“','๐Ÿ’•','๐Ÿ’–','๐Ÿ’ž','๐Ÿ’˜','๐Ÿ’Œ','๐Ÿ’‹','๐Ÿ’','๐Ÿ’Ž','๐Ÿ‘ค','๐Ÿ‘ฅ','๐Ÿ’ฌ','๐Ÿ‘ฃ','๐Ÿ’ญ','๐Ÿถ','๐Ÿบ','๐Ÿฑ','๐Ÿญ','๐Ÿน','๐Ÿฐ','๐Ÿธ','๐Ÿฏ','๐Ÿจ','๐Ÿป','๐Ÿท','๐Ÿฝ','๐Ÿฎ','๐Ÿ—','๐Ÿต','๐Ÿ’','๐Ÿด','๐Ÿ‘','๐Ÿ˜','๐Ÿผ','๐Ÿง','๐Ÿฆ','๐Ÿค','๐Ÿฅ','๐Ÿฃ','๐Ÿ”','๐Ÿ','๐Ÿข','๐Ÿ›','๐Ÿ','๐Ÿœ','๐Ÿž','๐ŸŒ','๐Ÿ™','๐Ÿš','๐Ÿ ','๐ŸŸ','๐Ÿฌ','๐Ÿณ','๐Ÿ‹','๐Ÿ„','๐Ÿ','๐Ÿ€','๐Ÿƒ','๐Ÿ…','๐Ÿ‡','๐Ÿ‰','๐ŸŽ','๐Ÿ','๐Ÿ“','๐Ÿ•','๐Ÿ–','๐Ÿ','๐Ÿ‚','๐Ÿฒ','๐Ÿก','๐ŸŠ','๐Ÿซ','๐Ÿช','๐Ÿ†','๐Ÿˆ','๐Ÿฉ','๐Ÿพ','๐Ÿ’','๐ŸŒธ','๐ŸŒท','๐Ÿ€','๐ŸŒน','๐ŸŒป','๐ŸŒบ','๐Ÿ','๐Ÿƒ','๐Ÿ‚','๐ŸŒฟ','๐ŸŒพ','๐Ÿ„','๐ŸŒต','๐ŸŒด','๐ŸŒฒ','๐ŸŒณ','๐ŸŒฐ','๐ŸŒฑ','๐ŸŒผ','๐ŸŒ','๐ŸŒž','๐ŸŒ','๐ŸŒš','๐ŸŒ‘','๐ŸŒ’','๐ŸŒ“','๐ŸŒ”','๐ŸŒ•','๐ŸŒ–','๐ŸŒ—','๐ŸŒ˜','๐ŸŒœ','๐ŸŒ›','๐ŸŒ™','๐ŸŒ','๐ŸŒŽ','๐ŸŒ','๐ŸŒ‹','๐ŸŒŒ','๐ŸŒ ','โญ','โ˜€','โ›…','โ˜','โšก','โ˜”','โ„','โ›„','๐ŸŒ€','๐ŸŒ','๐ŸŒˆ','๐ŸŒŠ','๐ŸŽ','๐Ÿ’','๐ŸŽŽ','๐ŸŽ’','๐ŸŽ“','๐ŸŽ','๐ŸŽ†','๐ŸŽ‡','๐ŸŽ','๐ŸŽ‘','๐ŸŽƒ','๐Ÿ‘ป','๐ŸŽ…','๐ŸŽ„','๐ŸŽ','๐ŸŽ‹','๐ŸŽ‰','๐ŸŽŠ','๐ŸŽˆ','๐ŸŽŒ','๐Ÿ”ฎ','๐ŸŽฅ','๐Ÿ“ท','๐Ÿ“น','๐Ÿ“ผ','๐Ÿ’ฟ','๐Ÿ“€','๐Ÿ’ฝ','๐Ÿ’พ','๐Ÿ’ป','๐Ÿ“ฑ','โ˜Ž','๐Ÿ“ž','๐Ÿ“Ÿ','๐Ÿ“ ','๐Ÿ“ก','๐Ÿ“บ','๐Ÿ“ป','๐Ÿ”Š','๐Ÿ”‰','๐Ÿ”ˆ','๐Ÿ”‡','๐Ÿ””','๐Ÿ”•','๐Ÿ“ข','๐Ÿ“ฃ','โณ','โŒ›','โฐ','โŒš','๐Ÿ”“','๐Ÿ”’','๐Ÿ”','๐Ÿ”','๐Ÿ”‘','๐Ÿ”Ž','๐Ÿ’ก','๐Ÿ”ฆ','๐Ÿ”†','๐Ÿ”…','๐Ÿ”Œ','๐Ÿ”‹','๐Ÿ”','๐Ÿ›','๐Ÿ›€','๐Ÿšฟ','๐Ÿšฝ','๐Ÿ”ง','๐Ÿ”ฉ','๐Ÿ”จ','๐Ÿšช','๐Ÿšฌ','๐Ÿ’ฃ','๐Ÿ”ซ','๐Ÿ”ช','๐Ÿ’Š','๐Ÿ’‰','๐Ÿ’ฐ','๐Ÿ’ด','๐Ÿ’ต','๐Ÿ’ท','๐Ÿ’ถ','๐Ÿ’ณ','๐Ÿ’ธ','๐Ÿ“ฒ','๐Ÿ“ง','๐Ÿ“ฅ','๐Ÿ“ค','โœ‰','๐Ÿ“ฉ','๐Ÿ“จ','๐Ÿ“ฏ','๐Ÿ“ซ','๐Ÿ“ช','๐Ÿ“ฌ','๐Ÿ“ญ','๐Ÿ“ฎ','๐Ÿ“ฆ','๐Ÿ“','๐Ÿ“„','๐Ÿ“ƒ','๐Ÿ“‘','๐Ÿ“Š','๐Ÿ“ˆ','๐Ÿ“‰','๐Ÿ“œ','๐Ÿ“‹','๐Ÿ“…','๐Ÿ“†','๐Ÿ“‡','๐Ÿ“','๐Ÿ“‚','โœ‚','๐Ÿ“Œ','๐Ÿ“Ž','โœ’','โœ','๐Ÿ“','๐Ÿ“','๐Ÿ“•','๐Ÿ“—','๐Ÿ“˜','๐Ÿ“™','๐Ÿ““','๐Ÿ“”','๐Ÿ“’','๐Ÿ“š','๐Ÿ“–','๐Ÿ”–','๐Ÿ“›','๐Ÿ”ฌ','๐Ÿ”ญ','๐Ÿ“ฐ','๐ŸŽจ','๐ŸŽฌ','๐ŸŽค','๐ŸŽง','๐ŸŽผ','๐ŸŽต','๐ŸŽถ','๐ŸŽน','๐ŸŽป','๐ŸŽบ','๐ŸŽท','๐ŸŽธ','๐Ÿ‘พ','๐ŸŽฎ','๐Ÿƒ','๐ŸŽด','๐Ÿ€„','๐ŸŽฒ','๐ŸŽฏ','๐Ÿˆ','๐Ÿ€','โšฝ','โšพ','๐ŸŽพ','๐ŸŽฑ','๐Ÿ‰','๐ŸŽณ','โ›ณ','๐Ÿšต','๐Ÿšด','๐Ÿ','๐Ÿ‡','๐Ÿ†','๐ŸŽฟ','๐Ÿ‚','๐ŸŠ','๐Ÿ„','๐ŸŽฃ','โ˜•','๐Ÿต','๐Ÿถ','๐Ÿผ','๐Ÿบ','๐Ÿป','๐Ÿธ','๐Ÿน','๐Ÿท','๐Ÿด','๐Ÿ•','๐Ÿ”','๐ŸŸ','๐Ÿ—','๐Ÿ–','๐Ÿ','๐Ÿ›','๐Ÿค','๐Ÿฑ','๐Ÿฃ','๐Ÿฅ','๐Ÿ™','๐Ÿ˜','๐Ÿš','๐Ÿœ','๐Ÿฒ','๐Ÿข','๐Ÿก','๐Ÿณ','๐Ÿž','๐Ÿฉ','๐Ÿฎ','๐Ÿฆ','๐Ÿจ','๐Ÿง','๐ŸŽ‚','๐Ÿฐ','๐Ÿช','๐Ÿซ','๐Ÿฌ','๐Ÿญ','๐Ÿฏ','๐ŸŽ','๐Ÿ','๐ŸŠ','๐Ÿ‹','๐Ÿ’','๐Ÿ‡','๐Ÿ‰','๐Ÿ“','๐Ÿ‘','๐Ÿˆ','๐ŸŒ','๐Ÿ','๐Ÿ','๐Ÿ ','๐Ÿ†','๐Ÿ…','๐ŸŒฝ','๐Ÿ ','๐Ÿก','๐Ÿซ','๐Ÿข','๐Ÿฃ','๐Ÿฅ','๐Ÿฆ','๐Ÿช','๐Ÿฉ','๐Ÿจ','๐Ÿ’’','โ›ช','๐Ÿฌ','๐Ÿค','๐ŸŒ‡','๐ŸŒ†','๐Ÿฏ','๐Ÿฐ','โ›บ','๐Ÿญ','๐Ÿ—ผ','๐Ÿ—พ','๐Ÿ—ป','๐ŸŒ„','๐ŸŒ…','๐ŸŒƒ','๐Ÿ—ฝ','๐ŸŒ‰','๐ŸŽ ','๐ŸŽก','โ›ฒ','๐ŸŽข','๐Ÿšข','โ›ต','๐Ÿšค','๐Ÿšฃ','โš“','๐Ÿš€','โœˆ','๐Ÿ’บ','๐Ÿš','๐Ÿš‚','๐ŸšŠ','๐Ÿš‰','๐Ÿšž','๐Ÿš†','๐Ÿš„','๐Ÿš…','๐Ÿšˆ','๐Ÿš‡','๐Ÿš','๐Ÿš‹','๐Ÿšƒ','๐ŸšŽ','๐ŸšŒ','๐Ÿš','๐Ÿš™','๐Ÿš˜','๐Ÿš—','๐Ÿš•','๐Ÿš–','๐Ÿš›','๐Ÿšš','๐Ÿšจ','๐Ÿš“','๐Ÿš”','๐Ÿš’','๐Ÿš‘','๐Ÿš','๐Ÿšฒ','๐Ÿšก','๐ŸšŸ','๐Ÿš ','๐Ÿšœ','๐Ÿ’ˆ','๐Ÿš','๐ŸŽซ','๐Ÿšฆ','๐Ÿšฅ','โš ','๐Ÿšง','๐Ÿ”ฐ','โ›ฝ','๐Ÿฎ','๐ŸŽฐ','โ™จ','๐Ÿ—ฟ','๐ŸŽช','๐ŸŽญ','๐Ÿ“','๐Ÿšฉ','โฌ†','โฌ‡','โฌ…','โžก','๐Ÿ” ','๐Ÿ”ก','๐Ÿ”ค','โ†—','โ†–','โ†˜','โ†™','โ†”','โ†•','๐Ÿ”„','โ—€','โ–ถ','๐Ÿ”ผ','๐Ÿ”ฝ','โ†ฉ','โ†ช','โ„น','โช','โฉ','โซ','โฌ','โคต','โคด','๐Ÿ†—','๐Ÿ”€','๐Ÿ”','๐Ÿ”‚','๐Ÿ†•','๐Ÿ†™','๐Ÿ†’','๐Ÿ†“','๐Ÿ†–','๐Ÿ“ถ','๐ŸŽฆ','๐Ÿˆ','๐Ÿˆฏ','๐Ÿˆณ','๐Ÿˆต','๐Ÿˆด','๐Ÿˆฒ','๐Ÿ‰','๐Ÿˆน','๐Ÿˆบ','๐Ÿˆถ','๐Ÿˆš','๐Ÿšป','๐Ÿšน','๐Ÿšบ','๐Ÿšผ','๐Ÿšพ','๐Ÿšฐ','๐Ÿšฎ','๐Ÿ…ฟ','โ™ฟ','๐Ÿšญ','๐Ÿˆท','๐Ÿˆธ','๐Ÿˆ‚','โ“‚','๐Ÿ›‚','๐Ÿ›„','๐Ÿ›…','๐Ÿ›ƒ','๐Ÿ‰‘','ใŠ™','ใŠ—','๐Ÿ†‘','๐Ÿ†˜','๐Ÿ†”','๐Ÿšซ','๐Ÿ”ž','๐Ÿ“ต','๐Ÿšฏ','๐Ÿšฑ','๐Ÿšณ','๐Ÿšท','๐Ÿšธ','โ›”','โœณ','โ‡','โŽ','โœ…','โœด','๐Ÿ’Ÿ','๐Ÿ†š','๐Ÿ“ณ','๐Ÿ“ด','๐Ÿ…ฐ','๐Ÿ…ฑ','๐Ÿ†Ž','๐Ÿ…พ','๐Ÿ’ ','โžฟ','โ™ป','โ™ˆ','โ™‰','โ™Š','โ™‹','โ™Œ','โ™','โ™Ž','โ™','โ™','โ™‘','โ™’','โ™“','โ›Ž','๐Ÿ”ฏ','๐Ÿง','๐Ÿ’น','๐Ÿ’ฒ','๐Ÿ’ฑ','ยฉ','ยฎ','โ„ข','ใ€ฝ','ใ€ฐ','๐Ÿ”','๐Ÿ”š','๐Ÿ”™','๐Ÿ”›','๐Ÿ”œ','โŒ','โญ•','โ—','โ“','โ•','โ”','๐Ÿ”ƒ','๐Ÿ•›','๐Ÿ•ง','๐Ÿ•','๐Ÿ•œ','๐Ÿ•‘','๐Ÿ•','๐Ÿ•’','๐Ÿ•ž','๐Ÿ•“','๐Ÿ•Ÿ','๐Ÿ•”','๐Ÿ• ','๐Ÿ••','๐Ÿ•–','๐Ÿ•—','๐Ÿ•˜','๐Ÿ•™','๐Ÿ•š','๐Ÿ•ก','๐Ÿ•ข','๐Ÿ•ฃ','๐Ÿ•ค','๐Ÿ•ฅ','๐Ÿ•ฆ','โœ–','โž•','โž–','โž—','โ™ ','โ™ฅ','โ™ฃ','โ™ฆ','๐Ÿ’ฎ','๐Ÿ’ฏ','โœ”','โ˜‘','๐Ÿ”˜','๐Ÿ”—','โžฐ','๐Ÿ”ฑ','๐Ÿ”ฒ','๐Ÿ”ณ','โ—ผ','โ—ป','โ—พ','โ—ฝ','โ–ช','โ–ซ','๐Ÿ”บ','โฌœ','โฌ›','โšซ','โšช','๐Ÿ”ด','๐Ÿ”ต','๐Ÿ”ป','๐Ÿ”ถ','๐Ÿ”ท','๐Ÿ”ธ','๐Ÿ”น' ]; return emojis[Math.floor(Math.random() * emojis.length)]; } //Part of user activity function var is_active = false; window.onfocus = function() { is_active = true; }; window.onblur = function() { is_active = false; } //Is user on the Discord tab - Return true or false function activity(positive,negative) { var return_value = ""; if(is_active) return_value = positive; else return_value = negative; return return_value; } //Output XX/XX/XX @ XX:XX:XX function getDateTime() { var currentdate = new Date(); if(currentdate.getMinutes() > 9) var fixed_minutes = currentdate.getMinutes(); else var fixed_minutes = "0" + currentdate.getMinutes(); if(currentdate.getSeconds() > 9) var fixed_seconds = currentdate.getSeconds(); else var fixed_seconds = "0" + currentdate.getSeconds(); var datetime = currentdate.getDate() + "/" + (currentdate.getMonth()+1) + "/" + currentdate.getFullYear() + " @ " + currentdate.getHours() + ":" + fixed_minutes + ":" + fixed_seconds; return datetime; } //Output: XX:XX:XX function getExactTime() { var currentdate = new Date(); if(currentdate.getMinutes() > 9) var fixed_minutes = currentdate.getMinutes(); else var fixed_minutes = "0" + currentdate.getMinutes(); if(currentdate.getSeconds() > 9) var fixed_seconds = currentdate.getSeconds(); else var fixed_seconds = "0" + currentdate.getSeconds(); var datetime = currentdate.getHours() + ":" + fixed_minutes + ":" + fixed_seconds; return datetime; } //Output: XX:XX function getTime() { var currentdate = new Date(); if(currentdate.getMinutes() > 9) var fixed_minutes = currentdate.getMinutes(); else var fixed_minutes = "0" + currentdate.getMinutes(); var datetime = currentdate.getHours() + ":" + fixed_minutes; return datetime; } //Simple wait function for animation function wait(t) { return new Promise(function(resolve) { setTimeout(resolve, t) }); } //Typewriter effect async function typewriter(emoji,text,timeout,reversed) { //Repeat for each letter for(var i = 1; i <= text.length; i++) { //Cut the text if(!reversed) var substring_text = text.substring(0,i); else var substring_text = text.substring(0,text.length - i); //Set the status to the cutted text if(emoji != "random") await status(emoji,substring_text); else await status(random_emoji(),substring_text); //Wait a selected amount of time until writing the next letter await wait(timeout); } return; } //Glitch effect async function glitch(emoji,text,times,timeout) { //Repeat for each letter for(var i = 1; i < times; i++) { //Shuffle the text var glitch_text = shuffle(text) //Set the status to the cutted text if(emoji != "random") await status(emoji,glitch_text); else await status(random_emoji(),glitch_text); //Wait a selected amount of time until writing the next letter await wait(timeout); } return; } //Glitchtype effect async function glitchtype(emoji,text,timeout,glitch_rate,reversed) { //Repeat for each letter for(var i = 1; i <= text.length; i++) { //Cut the text if(!reversed) var substring_text = text.substring(0,i); else var substring_text = text.substring(0,text.length - i); //Glitch rest of the text if(!reversed) var glitch_text = shuffle(text.substring(i)); else var glitch_text = shuffle(text.substring(text.length - i)); //Set the status to the cutted text + glitched text if(emoji != "random") await status(emoji,substring_text + glitch_text); else await status(random_emoji(),substring_text + glitch_text); //Wait a selected amount of time until writing the next letter await wait(timeout); for(var a = 0; a < glitch_rate; a++) { //Glitch rest of the text if(!reversed) var glitch_text = shuffle(text.substring(i)); else var glitch_text = shuffle(text.substring(text.length - i)); //Set the status to the cutted text + glitched text await status(emoji,substring_text + glitch_text); //Wait a selected amount of time until writing the next glitched characterset at the end of the string await wait(timeout/2); } } return; } //Sentence effect async function sentence(emoji,text,timeout) { //Split sentence into words var words = text.split(" "); //Repeat for each word for(var i = 0; i < words.length; i++) { //Set status to array's word if(emoji != "random") await status(emoji,words[i]); else await status(random_emoji(),words[i]); //Wait a selected amount of time until writing the next letter await wait(timeout); } return; } //Blink effect async function blink(emoji,text,timeout,times) { for(var i = 0; i < times; i++) { if(emoji != "random") await status(emoji,text); else await status(random_emoji(),text); await wait(timeout); await blank(); await wait(timeout); } return; } //Clear the status async function blank() { //Could just send blank status as {"custom_status":null}, but that behaves weirdly. await status("",""); return; } //Part of the skip function - stackoverflow.com/a/8630472 var store = (function() { var map = {}; return { set: function ( name, value ) { map[ name ] = value; }, get: function ( name ) { return map[ name ]; } }; })(); //Skip the end of the animation async function skip(amount,uniquetext) { var uniqueID = amount + "_" + uniquetext; var set = store.set; var get = store.get; var currentamount = get(uniqueID); //Check if there's a variable already if(currentamount >= 0) { //If to continue if(currentamount == amount) { //Reset the variable set(uniqueID,0); //Update the currentamount variable currentamount = get(uniqueID); //console.log("id: " + uniqueID + "\n\n value: " + get(uniqueID) + " | result: false\n\n"); return false; } //Skip else { //Add one to the variable set(uniqueID,get(uniqueID) + 1); //Update the currentamount variable currentamount = get(uniqueID); //console.log("id: " + uniqueID + "\n\n value: " + get(uniqueID) + " | result: true\n\n"); return true; } //If there was no variable made already } else { //Make the variable set(uniqueID,0); //Add one to it set(uniqueID,get(uniqueID) + 1); //Update the currentamount variable currentamount = get(uniqueID); //console.log("(FIRST TIME) " + "id: " + uniqueID + "\n\n value: " + get(uniqueID) + " | result: true\n\n"); return true; } } //Count effect async function count(emoji,prefix,count_to,suffix,timeout,reversed) { for(var i = 0; i < count_to; i++) { if(!reversed) { var recalculated_count = i + 1; var final_string = prefix + recalculated_count + suffix; } else { var recalculated_count = count_to - i; var final_string = prefix + recalculated_count + suffix; } if(emoji != "random") await status(emoji,final_string); else await status(random_emoji(),final_string); await wait(timeout); } return; } //Generate random number between min and max function random_number(min,max) { return Math.floor(Math.random() * (max - min + 1)) + min; } //codespeedy.com/shuffle-characters-of-a-string-in-javascript/ function getRandomInt(n) { return Math.floor(Math.random() * n); } //codespeedy.com/shuffle-characters-of-a-string-in-javascript/ function shuffle(s) { var arr = s.split(''); // Convert String to array var n = arr.length; // Length of the array for(var i=0 ; i { if (request.status != 200) { run = false; throw new Error("[Not an actually uncaught] Failed to update status. \n\nThe HTTP request failed. Most likely because the authorization token is incorrect."); } }; if(status_state == "invisible" || status_state == "dnd" || status_state == "idle" || status_state == "online") { var request2 = new XMLHttpRequest(); request2.open("PATCH", url); request2.setRequestHeader("Accept", "*/*" ); request2.setRequestHeader("Content-Type", "application/json"); request2.setRequestHeader("Authorization", token); request2.send(JSON.stringify({"status":status_state})); //If the request failed request2.onreadystatechange = () => { if (request2.status != 200) { run = false; throw new Error("[Not an actually uncaught] Failed to update status. \n\nThe HTTP request failed. Most likely because the authorization token is incorrect."); } }; } return; } async function setstate(text) { if(run) { status_state = text; if(status_state == "invisible" || status_state == "dnd" || status_state == "idle" || status_state == "online") { var request = new XMLHttpRequest(); request.open("PATCH", url); request.setRequestHeader("Accept", "*/*" ); request.setRequestHeader("Content-Type", "application/json"); request.setRequestHeader("Authorization", token); request.send(JSON.stringify({"status":status_state})); //If the request failed request.onreadystatechange = () => { if (request.status != 200) { run = false; throw new Error("[Not an actually uncaught] Failed to update state. \n\nThe HTTP request failed. Most likely because the authorization token is incorrect."); } }; } return; } } async function setemoji(emoji) { if(run) { status_emoji = emoji; var request = new XMLHttpRequest(); request.open("PATCH", url); request.setRequestHeader("Accept", "*/*" ); request.setRequestHeader("Content-Type", "application/json"); request.setRequestHeader("Authorization", token); request.send(JSON.stringify({"custom_status":{"emoji_name":status_emoji}})); //If the request failed request.onreadystatechange = () => { if (request.status != 200) { run = false; throw new Error("[Not an actually uncaught] Failed to update emoji. \n\nThe HTTP request failed. Most likely because the authorization token is incorrect."); } }; return; } } async function settext(text) { if(run) { status_text = text; var request = new XMLHttpRequest(); request.open("PATCH", url); request.setRequestHeader("Accept", "*/*" ); request.setRequestHeader("Content-Type", "application/json"); request.setRequestHeader("Authorization", token); request.send(JSON.stringify({"custom_status":{"text":status_text}})); //If the request failed request.onreadystatechange = () => { if (request.status != 200) { run = false; throw new Error("[Not an actually uncaught] Failed to update text. \n\nThe HTTP request failed. Most likely because the authorization token is incorrect."); } }; return; } } //Loops the animation async function animation_loop() { while(run) { await statusanimation(); } } //Start the animation loop animation_loop(); //Edit/Clear status before exiting window.onbeforeunload = function () { run = false; status_text = default_status_text; status_emoji = default_status_emoji; if(status_state == "invisible" || status_state == "dnd" || status_state == "idle" || status_state == "online") status_state = default_status_state; setstatus(); return ""; };