@@ -23,6 +23,7 @@ extern "C" {
2323#define DISCORD_STORAGE_MANAGER_VERSION 1
2424#define DISCORD_STORE_MANAGER_VERSION 1
2525#define DISCORD_VOICE_MANAGER_VERSION 1
26+ #define DISCORD_ACHIEVEMENT_MANAGER_VERSION 1
2627
2728enum EDiscordResult {
2829 DiscordResult_Ok ,
@@ -183,6 +184,7 @@ typedef char DiscordMetadataValue[4096];
183184typedef uint64_t DiscordNetworkPeerId ;
184185typedef uint8_t DiscordNetworkChannelId ;
185186typedef char DiscordPath [4096 ];
187+ typedef char DiscordDateTime [64 ];
186188
187189struct DiscordUser {
188190 DiscordUserId id ;
@@ -299,6 +301,13 @@ struct DiscordInputMode {
299301 char shortcut [256 ];
300302};
301303
304+ struct DiscordUserAchievement {
305+ DiscordSnowflake user_id ;
306+ DiscordSnowflake achievement_id ;
307+ uint8_t percent_complete ;
308+ DiscordDateTime unlocked_at ;
309+ };
310+
302311struct IDiscordLobbyTransaction {
303312 enum EDiscordResult (* set_type )(struct IDiscordLobbyTransaction * lobby_transaction ,
304313 enum EDiscordLobbyType type );
@@ -781,6 +790,30 @@ struct IDiscordVoiceManager {
781790 uint8_t volume );
782791};
783792
793+ struct IDiscordAchievementEvents {
794+ void (* on_user_achievement_update )(void * event_data ,
795+ struct DiscordUserAchievement * user_achievement );
796+ };
797+
798+ struct IDiscordAchievementManager {
799+ void (* set_user_achievement )(struct IDiscordAchievementManager * manager ,
800+ DiscordSnowflake achievement_id ,
801+ int64_t percent_complete ,
802+ void * callback_data ,
803+ void (* callback )(void * callback_data , enum EDiscordResult result ));
804+ void (* fetch_user_achievements )(struct IDiscordAchievementManager * manager ,
805+ void * callback_data ,
806+ void (* callback )(void * callback_data ,
807+ enum EDiscordResult result ));
808+ void (* count_user_achievements )(struct IDiscordAchievementManager * manager , int32_t * count );
809+ enum EDiscordResult (* get_user_achievement )(struct IDiscordAchievementManager * manager ,
810+ DiscordSnowflake user_achievement_id ,
811+ struct DiscordUserAchievement * user_achievement );
812+ enum EDiscordResult (* get_user_achievement_at )(struct IDiscordAchievementManager * manager ,
813+ int32_t index ,
814+ struct DiscordUserAchievement * user_achievement );
815+ };
816+
784817typedef void * IDiscordCoreEvents ;
785818
786819struct IDiscordCore {
@@ -803,6 +836,7 @@ struct IDiscordCore {
803836 struct IDiscordStorageManager * (* get_storage_manager )(struct IDiscordCore * core );
804837 struct IDiscordStoreManager * (* get_store_manager )(struct IDiscordCore * core );
805838 struct IDiscordVoiceManager * (* get_voice_manager )(struct IDiscordCore * core );
839+ struct IDiscordAchievementManager * (* get_achievement_manager )(struct IDiscordCore * core );
806840};
807841
808842struct DiscordCreateParams {
@@ -832,6 +866,8 @@ struct DiscordCreateParams {
832866 DiscordVersion store_version ;
833867 struct IDiscordVoiceEvents * voice_events ;
834868 DiscordVersion voice_version ;
869+ struct IDiscordAchievementEvents * achievement_events ;
870+ DiscordVersion achievement_version ;
835871};
836872
837873#ifdef __cplusplus
@@ -854,6 +890,7 @@ static
854890 params -> storage_version = DISCORD_STORAGE_MANAGER_VERSION ;
855891 params -> store_version = DISCORD_STORE_MANAGER_VERSION ;
856892 params -> voice_version = DISCORD_VOICE_MANAGER_VERSION ;
893+ params -> achievement_version = DISCORD_ACHIEVEMENT_MANAGER_VERSION ;
857894}
858895
859896enum EDiscordResult DiscordCreate (DiscordVersion version ,
0 commit comments