21
21
#include " steam/isteamfriends.h"
22
22
#include " steam/steam_api.h"
23
23
#include " tier0/icommandline.h"
24
- #include " discord_rpc.h"
25
- #include " discord_register.h"
24
+ #include " discord.h"
26
25
#include < time.h>
27
26
#include < functional>
28
27
@@ -575,11 +574,10 @@ void CTFPresence::UploadStats()
575
574
#endif
576
575
}
577
576
578
- #define DECL_DISCORD_HANDLER (obj, name, handler ) obj.##name = &rpc->##handler
579
577
580
- DiscordRichPresence CTFDiscordPresence::m_sPresence ;
581
- RealTimeCountdownTimer CTFDiscordPresence::m_updateThrottle ;
582
- int64 CTFDiscordPresence::m_iCreationTimestamp ;
578
+ discord::Core * CTFDiscordPresence::m_pCore{} ;
579
+ discord::Activity CTFDiscordPresence::m_Activity{} ;
580
+ discord::User CTFDiscordPresence::m_CurrentUser{} ;
583
581
584
582
CTFDiscordPresence::CTFDiscordPresence ()
585
583
: BaseClass( " TFDiscordPresence" )
@@ -614,8 +612,8 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
614
612
if ( C_BasePlayer::GetLocalPlayer ()->GetSteamID ( &steamID ) )
615
613
Q_snprintf ( m_szSteamID, 65 , " %d" , steamID.ConvertToUint64 () );
616
614
617
- m_sPresence. joinSecret = m_szServerInfo;
618
- m_sPresence. partyId = m_szSteamID;
615
+ m_Activity. GetSecrets (). SetJoin ( m_szServerInfo ) ;
616
+ m_Activity. GetSecrets (). SetMatch ( m_szSteamID ) ;
619
617
}
620
618
621
619
if ( !engine->IsConnected () )
@@ -626,7 +624,7 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
626
624
if ( !TFPlayerResource () )
627
625
return ;
628
626
629
- int maxPlayers = gpGlobals->maxClients ;
627
+ const int maxPlayers = gpGlobals->maxClients ;
630
628
int curPlayers = 0 ;
631
629
632
630
for ( int i = 0 ; i < maxPlayers; ++i )
@@ -635,8 +633,8 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
635
633
curPlayers++;
636
634
}
637
635
638
- m_sPresence. partySize = curPlayers;
639
- m_sPresence. partyMax = maxPlayers;
636
+ m_Activity. GetParty (). GetSize (). SetCurrentSize ( curPlayers ) ;
637
+ m_Activity. GetParty (). GetSize (). SetMaxSize ( maxPlayers ) ;
640
638
}
641
639
else if ( name == " player_death" )
642
640
{
@@ -667,20 +665,18 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
667
665
// -----------------------------------------------------------------------------
668
666
bool CTFDiscordPresence::Init ( void )
669
667
{
670
- Q_memset ( &m_sPresence, 0 , sizeof ( m_sPresence ) );
671
-
672
- DiscordEventHandlers handlers{};
673
- DECL_DISCORD_HANDLER ( handlers, ready, OnReady );
674
- DECL_DISCORD_HANDLER ( handlers, disconnected, OnDisconnected );
675
- DECL_DISCORD_HANDLER ( handlers, errored, OnError );
676
- DECL_DISCORD_HANDLER ( handlers, joinGame, OnJoinedGame );
677
- DECL_DISCORD_HANDLER ( handlers, spectateGame, OnSpectateGame );
678
- DECL_DISCORD_HANDLER ( handlers, joinRequest, OnJoinRequested );
668
+ Q_memset ( &m_Activity, 0 , sizeof ( discord::Activity ) );
669
+ auto result = discord::Core::Create ( V_atoi64 ( cl_discord_appid.GetString () ), DiscordCreateFlags_NoRequireDiscord, &m_pCore );
670
+ if ( result != discord::Result::Ok )
671
+ return false ;
679
672
680
673
char command[512 ];
681
- V_snprintf ( command, sizeof ( command ), " %s -game \" %s\" -novid -steam\n " , CommandLine ()->GetParm ( 0 ), CommandLine ()->ParmValue ( " -game" ) );
682
- Discord_Register ( cl_discord_appid.GetString (), command );
683
- Discord_Initialize ( cl_discord_appid.GetString (), &handlers, false , CFmtStr ( " %d" , engine->GetAppID () ) );
674
+ V_snprintf ( command, sizeof ( command ), " %s -game \" %s\" -novid -steam" , CommandLine ()->GetParm ( 0 ), CommandLine ()->ParmValue ( " -game" ) );
675
+ m_pCore->ActivityManager ().RegisterCommand ( command );
676
+ m_pCore->ActivityManager ().RegisterSteam ( engine->GetAppID () );
677
+
678
+ Q_memset ( &m_CurrentUser, 0 , sizeof ( discord::User ) );
679
+ m_pCore->UserManager ().GetCurrentUser ( &m_CurrentUser );
684
680
685
681
ListenForGameEvent ( " localplayer_changeteam" );
686
682
ListenForGameEvent ( " localplayer_changeclass" );
@@ -704,7 +700,9 @@ void CTFDiscordPresence::Shutdown( void )
704
700
Assert ( rpc == this );
705
701
rpc = NULL ;
706
702
707
- Discord_Shutdown ();
703
+ Q_memset ( &m_Activity, 0 , sizeof ( discord::Activity ) );
704
+ Q_memset ( &m_CurrentUser, 0 , sizeof ( discord::User ) );
705
+ if ( m_pCore ) delete m_pCore;
708
706
709
707
if ( steamapicontext->SteamFriends () )
710
708
steamapicontext->SteamFriends ()->ClearRichPresence ();
@@ -721,9 +719,9 @@ void CTFDiscordPresence::Update( float frametime )
721
719
UpdatePresence ();
722
720
723
721
if ( gpGlobals->tickcount % 2 )
724
- Discord_RunCallbacks ();
722
+ m_pCore-> RunCallbacks ();
725
723
}
726
-
724
+ /*
727
725
//-----------------------------------------------------------------------------
728
726
// Purpose:
729
727
//-----------------------------------------------------------------------------
@@ -790,13 +788,13 @@ void CTFDiscordPresence::OnJoinRequested( const DiscordUser *joinRequest )
790
788
ConColorMsg( Color( 114, 137, 218, 255 ), "[Rich Presence] Join Request Accepted\n" );
791
789
Discord_Respond( joinRequest->userId, DISCORD_REPLY_YES );
792
790
}
793
-
791
+ */
794
792
// -----------------------------------------------------------------------------
795
793
// Purpose: Map initialization
796
794
// -----------------------------------------------------------------------------
797
795
void CTFDiscordPresence::LevelInitPostEntity ( void )
798
796
{
799
- Q_memset ( &m_sPresence , 0 , sizeof ( m_sPresence ) );
797
+ Q_memset ( &m_Activity , 0 , sizeof ( discord::Activity ) );
800
798
801
799
char buffer[64 ];
802
800
Q_snprintf ( buffer, sizeof ( buffer ), " #TF_Map_%s" , m_szMapName );
@@ -805,12 +803,12 @@ void CTFDiscordPresence::LevelInitPostEntity( void )
805
803
{
806
804
g_pVGuiLocalize->ConvertUnicodeToANSI ( mapName, buffer, sizeof ( buffer ) );
807
805
Q_snprintf ( m_szGameState, sizeof ( m_szGameState ), " Map: %s" , buffer );
808
- m_sPresence. largeImageKey = m_szMapName;
806
+ m_Activity. GetAssets (). SetLargeImage ( m_szMapName ) ;
809
807
}
810
808
else
811
809
{
812
810
Q_snprintf ( m_szGameState, sizeof ( m_szGameState ), " Map: %s" , m_szMapName );
813
- m_sPresence. largeImageKey = " default" ;
811
+ m_Activity. GetAssets (). SetLargeImage ( " default" ) ;
814
812
}
815
813
816
814
@@ -820,14 +818,14 @@ void CTFDiscordPresence::LevelInitPostEntity( void )
820
818
if ( gameType )
821
819
{
822
820
g_pVGuiLocalize->ConvertUnicodeToANSI ( gameType, m_szGameType, DISCORD_FIELD_MAXLEN );
823
- m_sPresence. largeImageText = m_szGameType;
821
+ m_Activity. GetAssets (). SetLargeText ( m_szGameType ) ;
824
822
}
825
823
}
826
824
827
- m_sPresence. details = m_szHostName;
828
- m_sPresence. state = m_szGameState;
829
- m_sPresence. smallImageKey = " tf2v_drp_logo" ;
830
- m_sPresence. startTimestamp = m_iCreationTimestamp;
825
+ m_Activity. SetDetails ( m_szHostName ) ;
826
+ m_Activity. SetState ( m_szGameState ) ;
827
+ m_Activity. GetAssets (). SetSmallImage ( " tf2v_drp_logo" ) ;
828
+ m_Activity. GetTimestamps (). SetStart ( m_iCreationTimestamp ) ;
831
829
832
830
if ( steamapicontext->SteamFriends () )
833
831
{
@@ -838,7 +836,9 @@ void CTFDiscordPresence::LevelInitPostEntity( void )
838
836
steamapicontext->SteamFriends ()->SetRichPresence ( " steam_display" , m_szMapName );
839
837
}
840
838
841
- Discord_UpdatePresence ( &m_sPresence );
839
+ m_pCore->ActivityManager ().UpdateActivity ( m_Activity, [ ] ( discord::Result result ) {
840
+ ConColorMsg ( Color ( 114 , 137 , 218 , 255 ), " [DRP] Activity update: %s\n " , ( (result == discord::Result::Ok) ? " Ok" : " Failed" ) );
841
+ } );
842
842
}
843
843
844
844
// -----------------------------------------------------------------------------
@@ -854,7 +854,7 @@ void CTFDiscordPresence::LevelShutdownPreEntity( void )
854
854
// -----------------------------------------------------------------------------
855
855
void CTFDiscordPresence::Reset ( void )
856
856
{
857
- Q_memset ( &m_sPresence , 0 , sizeof ( m_sPresence ) );
857
+ Q_memset ( &m_Activity , 0 , sizeof ( discord::Activity ) );
858
858
859
859
if ( steamapicontext->SteamFriends () )
860
860
{
@@ -865,10 +865,12 @@ void CTFDiscordPresence::Reset( void )
865
865
steamapicontext->SteamFriends ()->SetRichPresence ( " steam_player_group_size" , NULL );
866
866
}
867
867
868
- m_sPresence.details = " Main Menu" ;
869
- m_sPresence.largeImageKey = " tf2v_drp_logo" ;
870
- m_sPresence.startTimestamp = m_iCreationTimestamp;
871
- Discord_UpdatePresence ( &m_sPresence );
868
+ m_Activity.SetDetails ( " Main Menu" );
869
+ m_Activity.GetAssets ().SetLargeImage ( " tf2v_drp_logo" );
870
+ m_Activity.GetTimestamps ().SetStart ( m_iCreationTimestamp );
871
+ m_pCore->ActivityManager ().UpdateActivity ( m_Activity, [ ] ( discord::Result result ) {
872
+ ConColorMsg ( Color ( 114 , 137 , 218 , 255 ), " [DRP] Activity update: %s\n " , ( (result == discord::Result::Ok) ? " Ok" : " Failed" ) );
873
+ } );
872
874
}
873
875
874
876
// -----------------------------------------------------------------------------
@@ -893,19 +895,21 @@ void CTFDiscordPresence::UpdatePresence( bool bForce, bool bIsDead )
893
895
{
894
896
case TF_TEAM_RED:
895
897
{
896
- m_sPresence. smallImageKey = s_pClassImages[iClassNum].redTeamImage ;
897
- m_sPresence. smallImageText = m_szClassName;
898
+ m_Activity. GetAssets (). SetSmallImage ( s_pClassImages[iClassNum].redTeamImage ) ;
899
+ m_Activity. GetAssets (). SetSmallText ( m_szClassName ) ;
898
900
break ;
899
901
}
900
902
case TF_TEAM_BLUE:
901
903
{
902
- m_sPresence. smallImageKey = s_pClassImages[iClassNum].bluTeamImage ;
903
- m_sPresence. smallImageText = m_szClassName;
904
+ m_Activity. GetAssets (). SetSmallImage ( s_pClassImages[iClassNum].bluTeamImage ) ;
905
+ m_Activity. GetAssets (). SetSmallText ( m_szClassName ) ;
904
906
break ;
905
907
}
906
908
default :
907
909
break ;
908
910
}
909
911
910
- Discord_UpdatePresence ( &m_sPresence );
912
+ m_pCore->ActivityManager ().UpdateActivity ( m_Activity, [ ] ( discord::Result result ) {
913
+ ConColorMsg ( Color ( 114 , 137 , 218 , 255 ), " [DRP] Activity update: %s\n " , ( (result == discord::Result::Ok) ? " Ok" : " Failed" ) );
914
+ } );
911
915
}
0 commit comments