diff --git a/CMakeLists.txt b/CMakeLists.txt
index 951ee9708e257b47b35b33bcaaaaa2cc95f8366d..121d598a23b2c5932cf703bf4bc642f5bc0a4f4f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,6 +57,7 @@ option(
 	ON
 )
 option(SRB2_CONFIG_ENABLE_WEBM_MOVIES "Enable WebM recording support" ON)
+option(SRB2_CONFIG_ENABLE_DISCORDRPC "Enable Discord RPC features" ON)
 option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON)
 option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF)
 option(SRB2_CONFIG_ERRORMODE "Compile C code with warnings treated as errors." OFF)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 52d2285b3bf000879b909f16aa7481815010901a..ee1d7de6aaf2389dd716ba005ef075946f57b087 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -259,9 +259,13 @@ target_link_libraries(SRB2SDL2 PRIVATE CURL::libcurl)
 target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_ZLIB -DHAVE_PNG -DHAVE_CURL -D_LARGEFILE64_SOURCE)
 target_sources(SRB2SDL2 PRIVATE apng.c)
 
-target_link_libraries(SRB2SDL2 PRIVATE DiscordRPC::DiscordRPC)
-target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_DISCORDRPC -DUSE_STUN)
-target_sources(SRB2SDL2 PRIVATE discord.c stun.cpp)
+target_compile_definitions(SRB2SDL2 PRIVATE -DUSE_STUN)
+target_sources(SRB2SDL2 PRIVATE stun.cpp)
+if(SRB2_CONFIG_ENABLE_DISCORDRPC)
+	target_link_libraries(SRB2SDL2 PRIVATE DiscordRPC::DiscordRPC)
+	target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_DISCORDRPC)
+	target_sources(SRB2SDL2 PRIVATE discord.c)
+endif()
 
 target_link_libraries(SRB2SDL2 PRIVATE tcbrindle::span)
 target_link_libraries(SRB2SDL2 PRIVATE glm::glm)
@@ -289,29 +293,6 @@ target_link_libraries(SRB2SDL2 PRIVATE nlohmann_json::nlohmann_json)
 set(SRB2_HAVE_THREADS ON)
 target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_THREADS)
 
-if(${SRB2_CONFIG_HAVE_DISCORDRPC})
-	if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
-		set(DISCORDRPC_FOUND ON)
-		if(${SRB2_SYSTEM_BITS} EQUAL 64)
-			set(DISCORDRPC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/discord-rpc/win64-dynamic/include)
-			set(DISCORDRPC_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/discord-rpc/win64-dynamic/lib -ldiscord-rpc")
-		else() # 32-bit
-			set(DISCORDRPC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/discord-rpc/win32-dynamic/include)
-			set(DISCORDRPC_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/discord-rpc/win32-dynamic/lib -ldiscord-rpc")
-		endif()
-	else()
-		find_package(DiscordRPC)
-	endif()
-	if(${DISCORDRPC_FOUND})
-		set(SRB2_HAVE_DISCORDRPC ON)
-		target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_DISCORDRPC)
-		target_compile_definitions(SRB2SDL2 PRIVATE -DUSE_STUN)
-		target_sources(SRB2SDL2 PRIVATE discord.c stun.cpp)
-	else()
-		message(WARNING "You have specified that Discord Rich Presence is available but it was not found.")
-	endif()
-endif()
-
 if(${SRB2_CONFIG_HAVE_ZLIB})
 	if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
 		set(ZLIB_FOUND ON)
diff --git a/src/i_video_common.cpp b/src/i_video_common.cpp
index 92457f2622fbbc63df8f8cfe34b81d25697d740a..c574655df836c04d77195ccd8e16609245c66f45 100644
--- a/src/i_video_common.cpp
+++ b/src/i_video_common.cpp
@@ -29,7 +29,6 @@
 
 // KILL THIS WHEN WE KILL OLD OGL SUPPORT PLEASE
 #include "d_netcmd.h" // kill
-#include "discord.h"  // kill
 #include "doomstat.h" // kill
 #include "s_sound.h"  // kill
 #include "sdl/ogl_sdl.h"
@@ -121,7 +120,7 @@ static void temp_legacy_finishupdate_draws()
 
 		if (cv_ticrate.value)
 			SCR_DisplayTicRate();
-		
+
 		if (netgame && (consoleplayer != serverplayer || !server_lagless))
 		{
 			if (server_lagless)
diff --git a/src/k_bot.cpp b/src/k_bot.cpp
index cf44c85ae069367c4e602070b90d95a56bf1fcc9..106df85508fe75a6964c2ab2fe5a51929f13a123 100644
--- a/src/k_bot.cpp
+++ b/src/k_bot.cpp
@@ -41,7 +41,9 @@
 #include "g_party.h"
 #include "k_grandprix.h" // K_CanChangeRules
 #include "hu_stuff.h" // HU_AddChatText
+#ifdef HAVE_DISCORDRPC
 #include "discord.h" // DRPC_UpdatePresence
+#endif
 #include "i_net.h" // doomcom
 
 extern "C" consvar_t cv_forcebots;
@@ -559,7 +561,7 @@ fixed_t K_BotMapModifier(void)
 {
 	constexpr INT32 complexity_scale = 10000;
 	constexpr fixed_t modifier_max = FRACUNIT * 2;
-	
+
 	const fixed_t complexity_value = std::clamp<fixed_t>(
 		FixedDiv(K_GetTrackComplexity(), complexity_scale),
 		-FixedDiv(FRACUNIT, modifier_max),
@@ -1378,7 +1380,7 @@ static INT32 K_HandleBotTrack(const player_t *player, ticcmd_t *cmd, botpredicti
 	{
 		turnsign = 1;
 	}
-	else 
+	else
 	{
 		turnsign = -1;
 	}
@@ -1514,7 +1516,7 @@ static INT32 K_HandleBotReverse(const player_t *player, ticcmd_t *cmd, botpredic
 		turnsign = -1; // Turn right
 		anglediff = AngleFixed(angle)>>FRACBITS;
 	}
-	else 
+	else
 	{
 		turnsign = 1; // Turn left
 		anglediff = 360-(AngleFixed(angle)>>FRACBITS);
@@ -1535,7 +1537,7 @@ static INT32 K_HandleBotReverse(const player_t *player, ticcmd_t *cmd, botpredic
 		{
 			momdiff = AngleFixed(angle)>>FRACBITS;
 		}
-		else 
+		else
 		{
 			momdiff = 360-(AngleFixed(angle)>>FRACBITS);
 		}
diff --git a/src/menus/transient/CMakeLists.txt b/src/menus/transient/CMakeLists.txt
index 1b5bb7f24f3ca852b697da9cd40b37e7032f9038..ae91c307a06f3f8c86ba5cc8c636e5466794004e 100644
--- a/src/menus/transient/CMakeLists.txt
+++ b/src/menus/transient/CMakeLists.txt
@@ -5,7 +5,6 @@ target_sources(SRB2SDL2 PRIVATE
 	gametype.c
 	manual.c
 	sound-test.c
-	discord-requests.c
 	message-box.c
 	pause-game.c
 	pause-kick.c
@@ -14,3 +13,7 @@ target_sources(SRB2SDL2 PRIVATE
 	pause-cheats.cpp
 	pause-addonoptions.cpp
 )
+
+if(SRB2_CONFIG_ENABLE_DISCORDRPC)
+	target_sources(SRB2SDL2 PRIVATE discord-requests.c)
+endif()
diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt
index 987d20650a15c7523be2acd1ee1b854139966f54..45d8d59466382b403e0c4df1c801e59e5929c602 100644
--- a/thirdparty/CMakeLists.txt
+++ b/thirdparty/CMakeLists.txt
@@ -1,5 +1,7 @@
 add_subdirectory(glm)
-add_subdirectory(discord-rpc)
+if(SRB2_CONFIG_ENABLE_DISCORDRPC)
+	add_subdirectory(discord-rpc)
+endif()
 add_subdirectory(xmp-lite)
 add_subdirectory(imgui)