Discord Status Animator (Manual edit/Non-UI)

Automatically changes your Discord status

Verze ze dne 14. 06. 2021. Zobrazit nejnovější verzi.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

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

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

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.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name         Discord Status Animator (Manual edit/Non-UI)
// @namespace    https://github.com/Hakorr/status-animator
// @run-at       document-start
// @version      1.0
// @description  Automatically changes your Discord status
// @author       HKR
// @match        https://discord.com/*
// @grant        none
// ==/UserScript==

(function() {
	//Welcome! Don't be scared by the code, I was too lazy to do an UI for this.
	//All you have to edit is the statusanimation function's code (Around the line 40)
	
	var name = "Status Animator";
	var version = "V1.0";
	var run = true;

	//A Cookie will be made with this name, feel free to edit it
	var cookie_name = "StatusToken";
	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 = "";
	
	//Animation blocks////////////////
	/*
		1. status(emoji,text);
		2. await delay(ms);
	*/async function statusanimation() {
	////////////////////////////////////
	   
		status("👐","This");
		await delay(500);
		
		status("👀","Is");
		await delay(500);
		
		status("😶","A");
		await delay(500);
		
		status("✨","Test");
		await delay(500);
		
		status("","");
		await delay(2000);
		
	/////////////////////////////
	if (run) statusanimation(); }
	
	//Do not edit after this line (If you don't know what you're doing)
	///////////////////////////////////////////////////////////////////
	
	//Function to read the saved cookie
	window.getCookie = function(name) {
		var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
		if (match) return match[2];
	}
	
	//Set the Discord Token as a Cookie for future use of the script
	if(document.cookie.indexOf(cookie_name + "=") == -1) {
		if(confirm("\"" + cookie_name + "\" cookie not found. Refreshing Discord to get it.\n\n- " + name + " " + version)) {
			location.reload();
			var i = document.createElement('iframe');
			document.body.appendChild(i);
			
			//Get Token from localStorage
			var token = i.contentWindow.localStorage.token
			token = token.slice(1, -1);
			
			if(delete_cookie_after_a_week) {
				//Save the encrypted Token to a Cookie - The cookie will be deleted after a week
				document.cookie = cookie_name + "=" + token + "; secure=true; max-age=604800; path=/";
			} else {
				document.cookie = cookie_name + "=" + token + "; secure=true; path=/";
			}
		} else { throw new Error("[Not an actually uncaught] User stopped the Status Animator. \n\nNo cookie was found and user decided not to continue."); }
	}
	
	var status_text = "";
        var status_emoji = "";
	//Function that changes the status variables (Saves up a bit space)
	function status(emoji,text) {
		if(run) {
			status_text = text;
			status_emoji = emoji;
			
			setstatus();
		}
	}
	
	//Get Discord Token from saved Cookie
	var token = getCookie(cookie_name);
	
	//HTTP Request's URL address
	var url = "https://discord.com/api/v9/users/@me/settings";
	
	//Function that handles the HTTP request for the status change
	function setstatus() {

		//Set up a HTTP request to change the status
		var request = new XMLHttpRequest(); 
		request.open("PATCH", url); 
		request.setRequestHeader("Accept", "*/*" ); 
		request.setRequestHeader("Content-Type", "application/json"); 
		request.setRequestHeader("Authorization", token);
		
		//Send the HTTP request to change the status
		request.send(JSON.stringify({"custom_status":{"text":status_text,"emoji_name":status_emoji}}));
		
		//If request failed
		request.onreadystatechange = () => {
			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.");
			}
		};
	}
	
	//Simple delay function for animation
	function delay(t) {
		return new Promise(function(resolve) {
		  setTimeout(resolve, t)
		});
	}
	
	//Start the animation for the first time
	if (run) statusanimation();
	
	//Edit (Clear by default) status before exiting
	window.onbeforeunload = function () {
		run = false;
		
		status_text = default_status_text;
		status_emoji = default_status_emoji;
		setstatus();
		
		return "";
	};
})();