diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 8778a242011552c8a8d5187e89a832cd403eb461..fd856a86b3aba274241e1a05993bb156e6cff7e0 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -81,6 +81,7 @@ static void Got_RandomSeed(UINT8 **cp, INT32 playernum);
 static void Got_RunSOCcmd(UINT8 **cp, INT32 playernum);
 static void Got_Teamchange(UINT8 **cp, INT32 playernum);
 static void Got_Clearscores(UINT8 **cp, INT32 playernum);
+static void Got_DiscordInfo(UINT8 **cp, INT32 playernum);
 
 static void PointLimit_OnChange(void);
 static void TimeLimit_OnChange(void);
@@ -713,9 +714,7 @@ void D_RegisterServerCommands(void)
 
 	CV_RegisterVar(&cv_dummyconsvar);
 
-#ifdef HAVE_DISCORDRPC
-	RegisterNetXCmd(XD_DISCORD, DRPC_RecieveDiscordInfo);
-#endif
+	RegisterNetXCmd(XD_DISCORD, Got_DiscordInfo);
 }
 
 // =========================================================================
@@ -5696,3 +5695,30 @@ static void KartEliminateLast_OnChange(void)
 	if (G_RaceGametype() && cv_karteliminatelast.value)
 		P_CheckRacers();
 }
+
+void Got_DiscordInfo(UINT8 **p, INT32 playernum)
+{
+	if (playernum != serverplayer /*&& !IsPlayerAdmin(playernum)*/)
+	{
+		// protect against hacked/buggy client
+		CONS_Alert(CONS_WARNING, M_GetText("Illegal Discord info command received from %s\n"), player_names[playernum]);
+		if (server)
+		{
+			XBOXSTATIC UINT8 buf[2];
+
+			buf[0] = (UINT8)playernum;
+			buf[1] = KICK_MSG_CON_FAIL;
+			SendNetXCmd(XD_KICK, &buf, 2);
+		}
+		return;
+	}
+
+	// Don't do anything with the information if we don't have Discord RP support
+#ifdef HAVE_DISCORDRPC
+	discordInfo.maxPlayers = READUINT8(*p);
+	discordInfo.joinsAllowed = (boolean)READUINT8(*p);
+	discordInfo.everyoneCanInvite = (boolean)READUINT8(*p);
+
+	DRPC_UpdatePresence();
+#endif
+}
diff --git a/src/d_netcmd.h b/src/d_netcmd.h
index d6e7e08dbfd611605bee336cab5f0c78c9c6d34e..1e1588083aaf91b5fafc024a6f3d89ac8e46e547 100644
--- a/src/d_netcmd.h
+++ b/src/d_netcmd.h
@@ -178,12 +178,10 @@ typedef enum
 	XD_MODIFYVOTE,  // 23
 	XD_PICKVOTE,    // 24
 	XD_REMOVEPLAYER,// 25
+	XD_DISCORD,     // 26
 #ifdef HAVE_BLUA
-	XD_LUACMD,      // 26
-	XD_LUAVAR,      // 27
-#endif
-#ifdef HAVE_DISCORDRPC
-	XD_DISCORD,     // 28
+	XD_LUACMD,      // 27
+	XD_LUAVAR,      // 28
 #endif
 	MAXNETXCMD
 } netxcmd_t;
diff --git a/src/discord.c b/src/discord.c
index 31b1f9d944e1b4f6174e4ac1a80cdb3f5664b512..91c06ba14d0c565464fdebad3502b0509f1e3b65 100644
--- a/src/discord.c
+++ b/src/discord.c
@@ -351,35 +351,6 @@ void DRPC_SendDiscordInfo(void)
 	SendNetXCmd(XD_DISCORD, &buf, 3);
 }
 
-/*--------------------------------------------------
-	void DRPC_RecieveDiscordInfo(UINT8 **p, INT32 playernum)
-
-		See header file for description.
---------------------------------------------------*/
-void DRPC_RecieveDiscordInfo(UINT8 **p, INT32 playernum)
-{
-	if (playernum != serverplayer /*&& !IsPlayerAdmin(playernum)*/)
-	{
-		// protect against hacked/buggy client
-		CONS_Alert(CONS_WARNING, M_GetText("Illegal Discord info command received from %s\n"), player_names[playernum]);
-		if (server)
-		{
-			XBOXSTATIC UINT8 buf[2];
-
-			buf[0] = (UINT8)playernum;
-			buf[1] = KICK_MSG_CON_FAIL;
-			SendNetXCmd(XD_KICK, &buf, 2);
-		}
-		return;
-	}
-
-	discordInfo.maxPlayers = READUINT8(*p);
-	discordInfo.joinsAllowed = (boolean)READUINT8(*p);
-	discordInfo.everyoneCanInvite = (boolean)READUINT8(*p);
-
-	DRPC_UpdatePresence();
-}
-
 #ifdef HAVE_CURL
 /*--------------------------------------------------
 	static size_t DRPC_WriteServerIP(char *s, size_t size, size_t n, void *userdata)
@@ -547,7 +518,7 @@ void DRPC_UpdatePresence(void)
 
 		discordPresence.partyId = server_context; // Thanks, whoever gave us Mumble support, for implementing the EXACT thing Discord wanted for this field!
 		discordPresence.partySize = D_NumPlayers(); // Players in server
-		discordPresence.partyMax = cv_maxplayers.value; // Max players (TODO: another variable should hold this, so that maxplayers doesn't have to be a netvar)
+		discordPresence.partyMax = discordInfo.maxPlayers; // Max players
 
 		if (DRPC_InvitesAreAllowed() == true)
 		{
@@ -566,6 +537,11 @@ void DRPC_UpdatePresence(void)
 	}
 	else
 	{
+		// Reset discord info if you're not in a place that uses it!
+		// Important for if you join a server that compiled without HAVE_DISCORDRPC,
+		// so that you don't ever end up using bad information from another server.
+		memset(&discordInfo, 0, sizeof(discordInfo));
+
 		// Offline info
 		if (Playing())
 			discordPresence.state = "Offline";
diff --git a/src/discord.h b/src/discord.h
index 6bd081a981f473b0fd87fb7148ad537b1fb8c291..ec47ec91aff2d4cf5d267a16d725edf0c923cf75 100644
--- a/src/discord.h
+++ b/src/discord.h
@@ -76,16 +76,6 @@ void DRPC_Init(void);
 void DRPC_SendDiscordInfo(void);
 
 
-/*--------------------------------------------------
-	void DRPC_RecieveDiscordInfo(UINT8 **p, INT32 playernum);
-
-		Recieves the server's information needed for
-		the rich presence state.
---------------------------------------------------*/
-
-void DRPC_RecieveDiscordInfo(UINT8 **p, INT32 playernum);
-
-
 /*--------------------------------------------------
 	void DRPC_UpdatePresence(void);