rdiscord_sdk 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +13 -0
  3. data/.vscode/c_cpp_properties.json +24 -0
  4. data/.vscode/settings.json +102 -0
  5. data/Gemfile +11 -0
  6. data/Gemfile.lock +46 -0
  7. data/INTERNALS.md +0 -0
  8. data/LICENSE +674 -0
  9. data/README.md +187 -0
  10. data/Rakefile +17 -0
  11. data/bin/console +15 -0
  12. data/bin/setup +8 -0
  13. data/ext/rdiscord_sdk/activity.cpp +297 -0
  14. data/ext/rdiscord_sdk/activity.h +17 -0
  15. data/ext/rdiscord_sdk/common.cpp +65 -0
  16. data/ext/rdiscord_sdk/common.h +88 -0
  17. data/ext/rdiscord_sdk/extconf.rb +54 -0
  18. data/ext/rdiscord_sdk/gem_activity_manager.cpp +273 -0
  19. data/ext/rdiscord_sdk/gem_activity_manager.h +8 -0
  20. data/ext/rdiscord_sdk/gem_user_manager.cpp +114 -0
  21. data/ext/rdiscord_sdk/gem_user_manager.h +8 -0
  22. data/ext/rdiscord_sdk/rdiscord_sdk.cpp +77 -0
  23. data/ext/rdiscord_sdk/rdiscord_sdk.h +17 -0
  24. data/ext/rdiscord_sdk/user.cpp +98 -0
  25. data/ext/rdiscord_sdk/user.h +19 -0
  26. data/lib/rdiscord_sdk/enums.rb +162 -0
  27. data/lib/rdiscord_sdk/rdiscord_sdk.so +0 -0
  28. data/lib/rdiscord_sdk/version.rb +16 -0
  29. data/lib/rdiscord_sdk.rb +3 -0
  30. data/rdiscord_sdk.gemspec +34 -0
  31. data/third-party/include/achievement_manager.cpp +98 -0
  32. data/third-party/include/achievement_manager.h +34 -0
  33. data/third-party/include/activity_manager.cpp +177 -0
  34. data/third-party/include/activity_manager.h +42 -0
  35. data/third-party/include/application_manager.cpp +78 -0
  36. data/third-party/include/application_manager.h +30 -0
  37. data/third-party/include/core.cpp +182 -0
  38. data/third-party/include/core.h +64 -0
  39. data/third-party/include/discord.h +16 -0
  40. data/third-party/include/event.h +59 -0
  41. data/third-party/include/ffi.h +942 -0
  42. data/third-party/include/image_manager.cpp +57 -0
  43. data/third-party/include/image_manager.h +28 -0
  44. data/third-party/include/lobby_manager.cpp +547 -0
  45. data/third-party/include/lobby_manager.h +88 -0
  46. data/third-party/include/network_manager.cpp +103 -0
  47. data/third-party/include/network_manager.h +63 -0
  48. data/third-party/include/overlay_manager.cpp +112 -0
  49. data/third-party/include/overlay_manager.h +33 -0
  50. data/third-party/include/relationship_manager.cpp +90 -0
  51. data/third-party/include/relationship_manager.h +32 -0
  52. data/third-party/include/storage_manager.cpp +158 -0
  53. data/third-party/include/storage_manager.h +46 -0
  54. data/third-party/include/store_manager.cpp +160 -0
  55. data/third-party/include/store_manager.h +38 -0
  56. data/third-party/include/types.cpp +769 -0
  57. data/third-party/include/types.h +492 -0
  58. data/third-party/include/user_manager.cpp +80 -0
  59. data/third-party/include/user_manager.h +31 -0
  60. data/third-party/include/voice_manager.cpp +124 -0
  61. data/third-party/include/voice_manager.h +37 -0
  62. data/third-party/lib/x86/discord_game_sdk.dll +0 -0
  63. data/third-party/lib/x86/discord_game_sdk.dll.lib +0 -0
  64. data/third-party/lib/x86_64/discord_game_sdk.bundle +0 -0
  65. data/third-party/lib/x86_64/discord_game_sdk.dll +0 -0
  66. data/third-party/lib/x86_64/discord_game_sdk.dll.lib +0 -0
  67. data/third-party/lib/x86_64/discord_game_sdk.dylib +0 -0
  68. data/third-party/lib/x86_64/discord_game_sdk.so +0 -0
  69. metadata +114 -0
@@ -0,0 +1,942 @@
1
+ #ifndef _DISCORD_GAME_SDK_H_
2
+ #define _DISCORD_GAME_SDK_H_
3
+
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ #include <stdint.h>
9
+ #include <string.h>
10
+ #ifndef __cplusplus
11
+ #include <stdbool.h>
12
+ #endif
13
+
14
+ #define DISCORD_VERSION 2
15
+ #define DISCORD_APPLICATION_MANAGER_VERSION 1
16
+ #define DISCORD_USER_MANAGER_VERSION 1
17
+ #define DISCORD_IMAGE_MANAGER_VERSION 1
18
+ #define DISCORD_ACTIVITY_MANAGER_VERSION 1
19
+ #define DISCORD_RELATIONSHIP_MANAGER_VERSION 1
20
+ #define DISCORD_LOBBY_MANAGER_VERSION 1
21
+ #define DISCORD_NETWORK_MANAGER_VERSION 1
22
+ #define DISCORD_OVERLAY_MANAGER_VERSION 1
23
+ #define DISCORD_STORAGE_MANAGER_VERSION 1
24
+ #define DISCORD_STORE_MANAGER_VERSION 1
25
+ #define DISCORD_VOICE_MANAGER_VERSION 1
26
+ #define DISCORD_ACHIEVEMENT_MANAGER_VERSION 1
27
+
28
+ enum EDiscordResult {
29
+ DiscordResult_Ok = 0,
30
+ DiscordResult_ServiceUnavailable = 1,
31
+ DiscordResult_InvalidVersion = 2,
32
+ DiscordResult_LockFailed = 3,
33
+ DiscordResult_InternalError = 4,
34
+ DiscordResult_InvalidPayload = 5,
35
+ DiscordResult_InvalidCommand = 6,
36
+ DiscordResult_InvalidPermissions = 7,
37
+ DiscordResult_NotFetched = 8,
38
+ DiscordResult_NotFound = 9,
39
+ DiscordResult_Conflict = 10,
40
+ DiscordResult_InvalidSecret = 11,
41
+ DiscordResult_InvalidJoinSecret = 12,
42
+ DiscordResult_NoEligibleActivity = 13,
43
+ DiscordResult_InvalidInvite = 14,
44
+ DiscordResult_NotAuthenticated = 15,
45
+ DiscordResult_InvalidAccessToken = 16,
46
+ DiscordResult_ApplicationMismatch = 17,
47
+ DiscordResult_InvalidDataUrl = 18,
48
+ DiscordResult_InvalidBase64 = 19,
49
+ DiscordResult_NotFiltered = 20,
50
+ DiscordResult_LobbyFull = 21,
51
+ DiscordResult_InvalidLobbySecret = 22,
52
+ DiscordResult_InvalidFilename = 23,
53
+ DiscordResult_InvalidFileSize = 24,
54
+ DiscordResult_InvalidEntitlement = 25,
55
+ DiscordResult_NotInstalled = 26,
56
+ DiscordResult_NotRunning = 27,
57
+ DiscordResult_InsufficientBuffer = 28,
58
+ DiscordResult_PurchaseCanceled = 29,
59
+ DiscordResult_InvalidGuild = 30,
60
+ DiscordResult_InvalidEvent = 31,
61
+ DiscordResult_InvalidChannel = 32,
62
+ DiscordResult_InvalidOrigin = 33,
63
+ DiscordResult_RateLimited = 34,
64
+ DiscordResult_OAuth2Error = 35,
65
+ DiscordResult_SelectChannelTimeout = 36,
66
+ DiscordResult_GetGuildTimeout = 37,
67
+ DiscordResult_SelectVoiceForceRequired = 38,
68
+ DiscordResult_CaptureShortcutAlreadyListening = 39,
69
+ DiscordResult_UnauthorizedForAchievement = 40,
70
+ DiscordResult_InvalidGiftCode = 41,
71
+ DiscordResult_PurchaseError = 42,
72
+ DiscordResult_TransactionAborted = 43,
73
+ };
74
+
75
+ enum EDiscordCreateFlags {
76
+ DiscordCreateFlags_Default = 0,
77
+ DiscordCreateFlags_NoRequireDiscord = 1,
78
+ };
79
+
80
+ enum EDiscordLogLevel {
81
+ DiscordLogLevel_Error = 1,
82
+ DiscordLogLevel_Warn,
83
+ DiscordLogLevel_Info,
84
+ DiscordLogLevel_Debug,
85
+ };
86
+
87
+ enum EDiscordUserFlag {
88
+ DiscordUserFlag_Partner = 2,
89
+ DiscordUserFlag_HypeSquadEvents = 4,
90
+ DiscordUserFlag_HypeSquadHouse1 = 64,
91
+ DiscordUserFlag_HypeSquadHouse2 = 128,
92
+ DiscordUserFlag_HypeSquadHouse3 = 256,
93
+ };
94
+
95
+ enum EDiscordPremiumType {
96
+ DiscordPremiumType_None = 0,
97
+ DiscordPremiumType_Tier1 = 1,
98
+ DiscordPremiumType_Tier2 = 2,
99
+ };
100
+
101
+ enum EDiscordImageType {
102
+ DiscordImageType_User,
103
+ };
104
+
105
+ enum EDiscordActivityType {
106
+ DiscordActivityType_Playing,
107
+ DiscordActivityType_Streaming,
108
+ DiscordActivityType_Listening,
109
+ DiscordActivityType_Watching,
110
+ };
111
+
112
+ enum EDiscordActivityActionType {
113
+ DiscordActivityActionType_Join = 1,
114
+ DiscordActivityActionType_Spectate,
115
+ };
116
+
117
+ enum EDiscordActivityJoinRequestReply {
118
+ DiscordActivityJoinRequestReply_No,
119
+ DiscordActivityJoinRequestReply_Yes,
120
+ DiscordActivityJoinRequestReply_Ignore,
121
+ };
122
+
123
+ enum EDiscordStatus {
124
+ DiscordStatus_Offline = 0,
125
+ DiscordStatus_Online = 1,
126
+ DiscordStatus_Idle = 2,
127
+ DiscordStatus_DoNotDisturb = 3,
128
+ };
129
+
130
+ enum EDiscordRelationshipType {
131
+ DiscordRelationshipType_None,
132
+ DiscordRelationshipType_Friend,
133
+ DiscordRelationshipType_Blocked,
134
+ DiscordRelationshipType_PendingIncoming,
135
+ DiscordRelationshipType_PendingOutgoing,
136
+ DiscordRelationshipType_Implicit,
137
+ };
138
+
139
+ enum EDiscordLobbyType {
140
+ DiscordLobbyType_Private = 1,
141
+ DiscordLobbyType_Public,
142
+ };
143
+
144
+ enum EDiscordLobbySearchComparison {
145
+ DiscordLobbySearchComparison_LessThanOrEqual = -2,
146
+ DiscordLobbySearchComparison_LessThan,
147
+ DiscordLobbySearchComparison_Equal,
148
+ DiscordLobbySearchComparison_GreaterThan,
149
+ DiscordLobbySearchComparison_GreaterThanOrEqual,
150
+ DiscordLobbySearchComparison_NotEqual,
151
+ };
152
+
153
+ enum EDiscordLobbySearchCast {
154
+ DiscordLobbySearchCast_String = 1,
155
+ DiscordLobbySearchCast_Number,
156
+ };
157
+
158
+ enum EDiscordLobbySearchDistance {
159
+ DiscordLobbySearchDistance_Local,
160
+ DiscordLobbySearchDistance_Default,
161
+ DiscordLobbySearchDistance_Extended,
162
+ DiscordLobbySearchDistance_Global,
163
+ };
164
+
165
+ enum EDiscordEntitlementType {
166
+ DiscordEntitlementType_Purchase = 1,
167
+ DiscordEntitlementType_PremiumSubscription,
168
+ DiscordEntitlementType_DeveloperGift,
169
+ DiscordEntitlementType_TestModePurchase,
170
+ DiscordEntitlementType_FreePurchase,
171
+ DiscordEntitlementType_UserGift,
172
+ DiscordEntitlementType_PremiumPurchase,
173
+ };
174
+
175
+ enum EDiscordSkuType {
176
+ DiscordSkuType_Application = 1,
177
+ DiscordSkuType_DLC,
178
+ DiscordSkuType_Consumable,
179
+ DiscordSkuType_Bundle,
180
+ };
181
+
182
+ enum EDiscordInputModeType {
183
+ DiscordInputModeType_VoiceActivity = 0,
184
+ DiscordInputModeType_PushToTalk,
185
+ };
186
+
187
+ typedef int64_t DiscordClientId;
188
+ typedef int32_t DiscordVersion;
189
+ typedef int64_t DiscordSnowflake;
190
+ typedef int64_t DiscordTimestamp;
191
+ typedef DiscordSnowflake DiscordUserId;
192
+ typedef char DiscordLocale[128];
193
+ typedef char DiscordBranch[4096];
194
+ typedef DiscordSnowflake DiscordLobbyId;
195
+ typedef char DiscordLobbySecret[128];
196
+ typedef char DiscordMetadataKey[256];
197
+ typedef char DiscordMetadataValue[4096];
198
+ typedef uint64_t DiscordNetworkPeerId;
199
+ typedef uint8_t DiscordNetworkChannelId;
200
+ typedef char DiscordPath[4096];
201
+ typedef char DiscordDateTime[64];
202
+
203
+ struct DiscordUser {
204
+ DiscordUserId id;
205
+ char username[256];
206
+ char discriminator[8];
207
+ char avatar[128];
208
+ bool bot;
209
+ };
210
+
211
+ struct DiscordOAuth2Token {
212
+ char access_token[128];
213
+ char scopes[1024];
214
+ DiscordTimestamp expires;
215
+ };
216
+
217
+ struct DiscordImageHandle {
218
+ enum EDiscordImageType type;
219
+ int64_t id;
220
+ uint32_t size;
221
+ };
222
+
223
+ struct DiscordImageDimensions {
224
+ uint32_t width;
225
+ uint32_t height;
226
+ };
227
+
228
+ struct DiscordActivityTimestamps {
229
+ DiscordTimestamp start;
230
+ DiscordTimestamp end;
231
+ };
232
+
233
+ struct DiscordActivityAssets {
234
+ char large_image[128];
235
+ char large_text[128];
236
+ char small_image[128];
237
+ char small_text[128];
238
+ };
239
+
240
+ struct DiscordPartySize {
241
+ int32_t current_size;
242
+ int32_t max_size;
243
+ };
244
+
245
+ struct DiscordActivityParty {
246
+ char id[128];
247
+ struct DiscordPartySize size;
248
+ };
249
+
250
+ struct DiscordActivitySecrets {
251
+ char match[128];
252
+ char join[128];
253
+ char spectate[128];
254
+ };
255
+
256
+ struct DiscordActivity {
257
+ enum EDiscordActivityType type;
258
+ int64_t application_id;
259
+ char name[128];
260
+ char state[128];
261
+ char details[128];
262
+ struct DiscordActivityTimestamps timestamps;
263
+ struct DiscordActivityAssets assets;
264
+ struct DiscordActivityParty party;
265
+ struct DiscordActivitySecrets secrets;
266
+ bool instance;
267
+ };
268
+
269
+ struct DiscordPresence {
270
+ enum EDiscordStatus status;
271
+ struct DiscordActivity activity;
272
+ };
273
+
274
+ struct DiscordRelationship {
275
+ enum EDiscordRelationshipType type;
276
+ struct DiscordUser user;
277
+ struct DiscordPresence presence;
278
+ };
279
+
280
+ struct DiscordLobby {
281
+ DiscordLobbyId id;
282
+ enum EDiscordLobbyType type;
283
+ DiscordUserId owner_id;
284
+ DiscordLobbySecret secret;
285
+ uint32_t capacity;
286
+ bool locked;
287
+ };
288
+
289
+ struct DiscordFileStat {
290
+ char filename[260];
291
+ uint64_t size;
292
+ uint64_t last_modified;
293
+ };
294
+
295
+ struct DiscordEntitlement {
296
+ DiscordSnowflake id;
297
+ enum EDiscordEntitlementType type;
298
+ DiscordSnowflake sku_id;
299
+ };
300
+
301
+ struct DiscordSkuPrice {
302
+ uint32_t amount;
303
+ char currency[16];
304
+ };
305
+
306
+ struct DiscordSku {
307
+ DiscordSnowflake id;
308
+ enum EDiscordSkuType type;
309
+ char name[256];
310
+ struct DiscordSkuPrice price;
311
+ };
312
+
313
+ struct DiscordInputMode {
314
+ enum EDiscordInputModeType type;
315
+ char shortcut[256];
316
+ };
317
+
318
+ struct DiscordUserAchievement {
319
+ DiscordSnowflake user_id;
320
+ DiscordSnowflake achievement_id;
321
+ uint8_t percent_complete;
322
+ DiscordDateTime unlocked_at;
323
+ };
324
+
325
+ struct IDiscordLobbyTransaction {
326
+ enum EDiscordResult (*set_type)(struct IDiscordLobbyTransaction* lobby_transaction,
327
+ enum EDiscordLobbyType type);
328
+ enum EDiscordResult (*set_owner)(struct IDiscordLobbyTransaction* lobby_transaction,
329
+ DiscordUserId owner_id);
330
+ enum EDiscordResult (*set_capacity)(struct IDiscordLobbyTransaction* lobby_transaction,
331
+ uint32_t capacity);
332
+ enum EDiscordResult (*set_metadata)(struct IDiscordLobbyTransaction* lobby_transaction,
333
+ DiscordMetadataKey key,
334
+ DiscordMetadataValue value);
335
+ enum EDiscordResult (*delete_metadata)(struct IDiscordLobbyTransaction* lobby_transaction,
336
+ DiscordMetadataKey key);
337
+ enum EDiscordResult (*set_locked)(struct IDiscordLobbyTransaction* lobby_transaction,
338
+ bool locked);
339
+ };
340
+
341
+ struct IDiscordLobbyMemberTransaction {
342
+ enum EDiscordResult (*set_metadata)(
343
+ struct IDiscordLobbyMemberTransaction* lobby_member_transaction,
344
+ DiscordMetadataKey key,
345
+ DiscordMetadataValue value);
346
+ enum EDiscordResult (*delete_metadata)(
347
+ struct IDiscordLobbyMemberTransaction* lobby_member_transaction,
348
+ DiscordMetadataKey key);
349
+ };
350
+
351
+ struct IDiscordLobbySearchQuery {
352
+ enum EDiscordResult (*filter)(struct IDiscordLobbySearchQuery* lobby_search_query,
353
+ DiscordMetadataKey key,
354
+ enum EDiscordLobbySearchComparison comparison,
355
+ enum EDiscordLobbySearchCast cast,
356
+ DiscordMetadataValue value);
357
+ enum EDiscordResult (*sort)(struct IDiscordLobbySearchQuery* lobby_search_query,
358
+ DiscordMetadataKey key,
359
+ enum EDiscordLobbySearchCast cast,
360
+ DiscordMetadataValue value);
361
+ enum EDiscordResult (*limit)(struct IDiscordLobbySearchQuery* lobby_search_query,
362
+ uint32_t limit);
363
+ enum EDiscordResult (*distance)(struct IDiscordLobbySearchQuery* lobby_search_query,
364
+ enum EDiscordLobbySearchDistance distance);
365
+ };
366
+
367
+ typedef void* IDiscordApplicationEvents;
368
+
369
+ struct IDiscordApplicationManager {
370
+ void (*validate_or_exit)(struct IDiscordApplicationManager* manager,
371
+ void* callback_data,
372
+ void (*callback)(void* callback_data, enum EDiscordResult result));
373
+ void (*get_current_locale)(struct IDiscordApplicationManager* manager, DiscordLocale* locale);
374
+ void (*get_current_branch)(struct IDiscordApplicationManager* manager, DiscordBranch* branch);
375
+ void (*get_oauth2_token)(struct IDiscordApplicationManager* manager,
376
+ void* callback_data,
377
+ void (*callback)(void* callback_data,
378
+ enum EDiscordResult result,
379
+ struct DiscordOAuth2Token* oauth2_token));
380
+ void (*get_ticket)(struct IDiscordApplicationManager* manager,
381
+ void* callback_data,
382
+ void (*callback)(void* callback_data,
383
+ enum EDiscordResult result,
384
+ const char* data));
385
+ };
386
+
387
+ struct IDiscordUserEvents {
388
+ void (*on_current_user_update)(void* event_data);
389
+ };
390
+
391
+ struct IDiscordUserManager {
392
+ enum EDiscordResult (*get_current_user)(struct IDiscordUserManager* manager,
393
+ struct DiscordUser* current_user);
394
+ void (*get_user)(struct IDiscordUserManager* manager,
395
+ DiscordUserId user_id,
396
+ void* callback_data,
397
+ void (*callback)(void* callback_data,
398
+ enum EDiscordResult result,
399
+ struct DiscordUser* user));
400
+ enum EDiscordResult (*get_current_user_premium_type)(struct IDiscordUserManager* manager,
401
+ enum EDiscordPremiumType* premium_type);
402
+ enum EDiscordResult (*current_user_has_flag)(struct IDiscordUserManager* manager,
403
+ enum EDiscordUserFlag flag,
404
+ bool* has_flag);
405
+ };
406
+
407
+ typedef void* IDiscordImageEvents;
408
+
409
+ struct IDiscordImageManager {
410
+ void (*fetch)(struct IDiscordImageManager* manager,
411
+ struct DiscordImageHandle handle,
412
+ bool refresh,
413
+ void* callback_data,
414
+ void (*callback)(void* callback_data,
415
+ enum EDiscordResult result,
416
+ struct DiscordImageHandle handle_result));
417
+ enum EDiscordResult (*get_dimensions)(struct IDiscordImageManager* manager,
418
+ struct DiscordImageHandle handle,
419
+ struct DiscordImageDimensions* dimensions);
420
+ enum EDiscordResult (*get_data)(struct IDiscordImageManager* manager,
421
+ struct DiscordImageHandle handle,
422
+ uint8_t* data,
423
+ uint32_t data_length);
424
+ };
425
+
426
+ struct IDiscordActivityEvents {
427
+ void (*on_activity_join)(void* event_data, const char* secret);
428
+ void (*on_activity_spectate)(void* event_data, const char* secret);
429
+ void (*on_activity_join_request)(void* event_data, struct DiscordUser* user);
430
+ void (*on_activity_invite)(void* event_data,
431
+ enum EDiscordActivityActionType type,
432
+ struct DiscordUser* user,
433
+ struct DiscordActivity* activity);
434
+ };
435
+
436
+ struct IDiscordActivityManager {
437
+ enum EDiscordResult (*register_command)(struct IDiscordActivityManager* manager,
438
+ const char* command);
439
+ enum EDiscordResult (*register_steam)(struct IDiscordActivityManager* manager,
440
+ uint32_t steam_id);
441
+ void (*update_activity)(struct IDiscordActivityManager* manager,
442
+ struct DiscordActivity* activity,
443
+ void* callback_data,
444
+ void (*callback)(void* callback_data, enum EDiscordResult result));
445
+ void (*clear_activity)(struct IDiscordActivityManager* manager,
446
+ void* callback_data,
447
+ void (*callback)(void* callback_data, enum EDiscordResult result));
448
+ void (*send_request_reply)(struct IDiscordActivityManager* manager,
449
+ DiscordUserId user_id,
450
+ enum EDiscordActivityJoinRequestReply reply,
451
+ void* callback_data,
452
+ void (*callback)(void* callback_data, enum EDiscordResult result));
453
+ void (*send_invite)(struct IDiscordActivityManager* manager,
454
+ DiscordUserId user_id,
455
+ enum EDiscordActivityActionType type,
456
+ const char* content,
457
+ void* callback_data,
458
+ void (*callback)(void* callback_data, enum EDiscordResult result));
459
+ void (*accept_invite)(struct IDiscordActivityManager* manager,
460
+ DiscordUserId user_id,
461
+ void* callback_data,
462
+ void (*callback)(void* callback_data, enum EDiscordResult result));
463
+ };
464
+
465
+ struct IDiscordRelationshipEvents {
466
+ void (*on_refresh)(void* event_data);
467
+ void (*on_relationship_update)(void* event_data, struct DiscordRelationship* relationship);
468
+ };
469
+
470
+ struct IDiscordRelationshipManager {
471
+ void (*filter)(struct IDiscordRelationshipManager* manager,
472
+ void* filter_data,
473
+ bool (*filter)(void* filter_data, struct DiscordRelationship* relationship));
474
+ enum EDiscordResult (*count)(struct IDiscordRelationshipManager* manager, int32_t* count);
475
+ enum EDiscordResult (*get)(struct IDiscordRelationshipManager* manager,
476
+ DiscordUserId user_id,
477
+ struct DiscordRelationship* relationship);
478
+ enum EDiscordResult (*get_at)(struct IDiscordRelationshipManager* manager,
479
+ uint32_t index,
480
+ struct DiscordRelationship* relationship);
481
+ };
482
+
483
+ struct IDiscordLobbyEvents {
484
+ void (*on_lobby_update)(void* event_data, int64_t lobby_id);
485
+ void (*on_lobby_delete)(void* event_data, int64_t lobby_id, uint32_t reason);
486
+ void (*on_member_connect)(void* event_data, int64_t lobby_id, int64_t user_id);
487
+ void (*on_member_update)(void* event_data, int64_t lobby_id, int64_t user_id);
488
+ void (*on_member_disconnect)(void* event_data, int64_t lobby_id, int64_t user_id);
489
+ void (*on_lobby_message)(void* event_data,
490
+ int64_t lobby_id,
491
+ int64_t user_id,
492
+ uint8_t* data,
493
+ uint32_t data_length);
494
+ void (*on_speaking)(void* event_data, int64_t lobby_id, int64_t user_id, bool speaking);
495
+ void (*on_network_message)(void* event_data,
496
+ int64_t lobby_id,
497
+ int64_t user_id,
498
+ uint8_t channel_id,
499
+ uint8_t* data,
500
+ uint32_t data_length);
501
+ };
502
+
503
+ struct IDiscordLobbyManager {
504
+ enum EDiscordResult (*get_lobby_create_transaction)(
505
+ struct IDiscordLobbyManager* manager,
506
+ struct IDiscordLobbyTransaction** transaction);
507
+ enum EDiscordResult (*get_lobby_update_transaction)(
508
+ struct IDiscordLobbyManager* manager,
509
+ DiscordLobbyId lobby_id,
510
+ struct IDiscordLobbyTransaction** transaction);
511
+ enum EDiscordResult (*get_member_update_transaction)(
512
+ struct IDiscordLobbyManager* manager,
513
+ DiscordLobbyId lobby_id,
514
+ DiscordUserId user_id,
515
+ struct IDiscordLobbyMemberTransaction** transaction);
516
+ void (*create_lobby)(struct IDiscordLobbyManager* manager,
517
+ struct IDiscordLobbyTransaction* transaction,
518
+ void* callback_data,
519
+ void (*callback)(void* callback_data,
520
+ enum EDiscordResult result,
521
+ struct DiscordLobby* lobby));
522
+ void (*update_lobby)(struct IDiscordLobbyManager* manager,
523
+ DiscordLobbyId lobby_id,
524
+ struct IDiscordLobbyTransaction* transaction,
525
+ void* callback_data,
526
+ void (*callback)(void* callback_data, enum EDiscordResult result));
527
+ void (*delete_lobby)(struct IDiscordLobbyManager* manager,
528
+ DiscordLobbyId lobby_id,
529
+ void* callback_data,
530
+ void (*callback)(void* callback_data, enum EDiscordResult result));
531
+ void (*connect_lobby)(struct IDiscordLobbyManager* manager,
532
+ DiscordLobbyId lobby_id,
533
+ DiscordLobbySecret secret,
534
+ void* callback_data,
535
+ void (*callback)(void* callback_data,
536
+ enum EDiscordResult result,
537
+ struct DiscordLobby* lobby));
538
+ void (*connect_lobby_with_activity_secret)(struct IDiscordLobbyManager* manager,
539
+ DiscordLobbySecret activity_secret,
540
+ void* callback_data,
541
+ void (*callback)(void* callback_data,
542
+ enum EDiscordResult result,
543
+ struct DiscordLobby* lobby));
544
+ void (*disconnect_lobby)(struct IDiscordLobbyManager* manager,
545
+ DiscordLobbyId lobby_id,
546
+ void* callback_data,
547
+ void (*callback)(void* callback_data, enum EDiscordResult result));
548
+ enum EDiscordResult (*get_lobby)(struct IDiscordLobbyManager* manager,
549
+ DiscordLobbyId lobby_id,
550
+ struct DiscordLobby* lobby);
551
+ enum EDiscordResult (*get_lobby_activity_secret)(struct IDiscordLobbyManager* manager,
552
+ DiscordLobbyId lobby_id,
553
+ DiscordLobbySecret* secret);
554
+ enum EDiscordResult (*get_lobby_metadata_value)(struct IDiscordLobbyManager* manager,
555
+ DiscordLobbyId lobby_id,
556
+ DiscordMetadataKey key,
557
+ DiscordMetadataValue* value);
558
+ enum EDiscordResult (*get_lobby_metadata_key)(struct IDiscordLobbyManager* manager,
559
+ DiscordLobbyId lobby_id,
560
+ int32_t index,
561
+ DiscordMetadataKey* key);
562
+ enum EDiscordResult (*lobby_metadata_count)(struct IDiscordLobbyManager* manager,
563
+ DiscordLobbyId lobby_id,
564
+ int32_t* count);
565
+ enum EDiscordResult (*member_count)(struct IDiscordLobbyManager* manager,
566
+ DiscordLobbyId lobby_id,
567
+ int32_t* count);
568
+ enum EDiscordResult (*get_member_user_id)(struct IDiscordLobbyManager* manager,
569
+ DiscordLobbyId lobby_id,
570
+ int32_t index,
571
+ DiscordUserId* user_id);
572
+ enum EDiscordResult (*get_member_user)(struct IDiscordLobbyManager* manager,
573
+ DiscordLobbyId lobby_id,
574
+ DiscordUserId user_id,
575
+ struct DiscordUser* user);
576
+ enum EDiscordResult (*get_member_metadata_value)(struct IDiscordLobbyManager* manager,
577
+ DiscordLobbyId lobby_id,
578
+ DiscordUserId user_id,
579
+ DiscordMetadataKey key,
580
+ DiscordMetadataValue* value);
581
+ enum EDiscordResult (*get_member_metadata_key)(struct IDiscordLobbyManager* manager,
582
+ DiscordLobbyId lobby_id,
583
+ DiscordUserId user_id,
584
+ int32_t index,
585
+ DiscordMetadataKey* key);
586
+ enum EDiscordResult (*member_metadata_count)(struct IDiscordLobbyManager* manager,
587
+ DiscordLobbyId lobby_id,
588
+ DiscordUserId user_id,
589
+ int32_t* count);
590
+ void (*update_member)(struct IDiscordLobbyManager* manager,
591
+ DiscordLobbyId lobby_id,
592
+ DiscordUserId user_id,
593
+ struct IDiscordLobbyMemberTransaction* transaction,
594
+ void* callback_data,
595
+ void (*callback)(void* callback_data, enum EDiscordResult result));
596
+ void (*send_lobby_message)(struct IDiscordLobbyManager* manager,
597
+ DiscordLobbyId lobby_id,
598
+ uint8_t* data,
599
+ uint32_t data_length,
600
+ void* callback_data,
601
+ void (*callback)(void* callback_data, enum EDiscordResult result));
602
+ enum EDiscordResult (*get_search_query)(struct IDiscordLobbyManager* manager,
603
+ struct IDiscordLobbySearchQuery** query);
604
+ void (*search)(struct IDiscordLobbyManager* manager,
605
+ struct IDiscordLobbySearchQuery* query,
606
+ void* callback_data,
607
+ void (*callback)(void* callback_data, enum EDiscordResult result));
608
+ void (*lobby_count)(struct IDiscordLobbyManager* manager, int32_t* count);
609
+ enum EDiscordResult (*get_lobby_id)(struct IDiscordLobbyManager* manager,
610
+ int32_t index,
611
+ DiscordLobbyId* lobby_id);
612
+ void (*connect_voice)(struct IDiscordLobbyManager* manager,
613
+ DiscordLobbyId lobby_id,
614
+ void* callback_data,
615
+ void (*callback)(void* callback_data, enum EDiscordResult result));
616
+ void (*disconnect_voice)(struct IDiscordLobbyManager* manager,
617
+ DiscordLobbyId lobby_id,
618
+ void* callback_data,
619
+ void (*callback)(void* callback_data, enum EDiscordResult result));
620
+ enum EDiscordResult (*connect_network)(struct IDiscordLobbyManager* manager,
621
+ DiscordLobbyId lobby_id);
622
+ enum EDiscordResult (*disconnect_network)(struct IDiscordLobbyManager* manager,
623
+ DiscordLobbyId lobby_id);
624
+ enum EDiscordResult (*flush_network)(struct IDiscordLobbyManager* manager);
625
+ enum EDiscordResult (*open_network_channel)(struct IDiscordLobbyManager* manager,
626
+ DiscordLobbyId lobby_id,
627
+ uint8_t channel_id,
628
+ bool reliable);
629
+ enum EDiscordResult (*send_network_message)(struct IDiscordLobbyManager* manager,
630
+ DiscordLobbyId lobby_id,
631
+ DiscordUserId user_id,
632
+ uint8_t channel_id,
633
+ uint8_t* data,
634
+ uint32_t data_length);
635
+ };
636
+
637
+ struct IDiscordNetworkEvents {
638
+ void (*on_message)(void* event_data,
639
+ DiscordNetworkPeerId peer_id,
640
+ DiscordNetworkChannelId channel_id,
641
+ uint8_t* data,
642
+ uint32_t data_length);
643
+ void (*on_route_update)(void* event_data, const char* route_data);
644
+ };
645
+
646
+ struct IDiscordNetworkManager {
647
+ /**
648
+ * Get the local peer ID for this process.
649
+ */
650
+ void (*get_peer_id)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId* peer_id);
651
+ /**
652
+ * Send pending network messages.
653
+ */
654
+ enum EDiscordResult (*flush)(struct IDiscordNetworkManager* manager);
655
+ /**
656
+ * Open a connection to a remote peer.
657
+ */
658
+ enum EDiscordResult (*open_peer)(struct IDiscordNetworkManager* manager,
659
+ DiscordNetworkPeerId peer_id,
660
+ const char* route_data);
661
+ /**
662
+ * Update the route data for a connected peer.
663
+ */
664
+ enum EDiscordResult (*update_peer)(struct IDiscordNetworkManager* manager,
665
+ DiscordNetworkPeerId peer_id,
666
+ const char* route_data);
667
+ /**
668
+ * Close the connection to a remote peer.
669
+ */
670
+ enum EDiscordResult (*close_peer)(struct IDiscordNetworkManager* manager,
671
+ DiscordNetworkPeerId peer_id);
672
+ /**
673
+ * Open a message channel to a connected peer.
674
+ */
675
+ enum EDiscordResult (*open_channel)(struct IDiscordNetworkManager* manager,
676
+ DiscordNetworkPeerId peer_id,
677
+ DiscordNetworkChannelId channel_id,
678
+ bool reliable);
679
+ /**
680
+ * Close a message channel to a connected peer.
681
+ */
682
+ enum EDiscordResult (*close_channel)(struct IDiscordNetworkManager* manager,
683
+ DiscordNetworkPeerId peer_id,
684
+ DiscordNetworkChannelId channel_id);
685
+ /**
686
+ * Send a message to a connected peer over an opened message channel.
687
+ */
688
+ enum EDiscordResult (*send_message)(struct IDiscordNetworkManager* manager,
689
+ DiscordNetworkPeerId peer_id,
690
+ DiscordNetworkChannelId channel_id,
691
+ uint8_t* data,
692
+ uint32_t data_length);
693
+ };
694
+
695
+ struct IDiscordOverlayEvents {
696
+ void (*on_toggle)(void* event_data, bool locked);
697
+ };
698
+
699
+ struct IDiscordOverlayManager {
700
+ void (*is_enabled)(struct IDiscordOverlayManager* manager, bool* enabled);
701
+ void (*is_locked)(struct IDiscordOverlayManager* manager, bool* locked);
702
+ void (*set_locked)(struct IDiscordOverlayManager* manager,
703
+ bool locked,
704
+ void* callback_data,
705
+ void (*callback)(void* callback_data, enum EDiscordResult result));
706
+ void (*open_activity_invite)(struct IDiscordOverlayManager* manager,
707
+ enum EDiscordActivityActionType type,
708
+ void* callback_data,
709
+ void (*callback)(void* callback_data, enum EDiscordResult result));
710
+ void (*open_guild_invite)(struct IDiscordOverlayManager* manager,
711
+ const char* code,
712
+ void* callback_data,
713
+ void (*callback)(void* callback_data, enum EDiscordResult result));
714
+ void (*open_voice_settings)(struct IDiscordOverlayManager* manager,
715
+ void* callback_data,
716
+ void (*callback)(void* callback_data, enum EDiscordResult result));
717
+ };
718
+
719
+ typedef void* IDiscordStorageEvents;
720
+
721
+ struct IDiscordStorageManager {
722
+ enum EDiscordResult (*read)(struct IDiscordStorageManager* manager,
723
+ const char* name,
724
+ uint8_t* data,
725
+ uint32_t data_length,
726
+ uint32_t* read);
727
+ void (*read_async)(struct IDiscordStorageManager* manager,
728
+ const char* name,
729
+ void* callback_data,
730
+ void (*callback)(void* callback_data,
731
+ enum EDiscordResult result,
732
+ uint8_t* data,
733
+ uint32_t data_length));
734
+ void (*read_async_partial)(struct IDiscordStorageManager* manager,
735
+ const char* name,
736
+ uint64_t offset,
737
+ uint64_t length,
738
+ void* callback_data,
739
+ void (*callback)(void* callback_data,
740
+ enum EDiscordResult result,
741
+ uint8_t* data,
742
+ uint32_t data_length));
743
+ enum EDiscordResult (*write)(struct IDiscordStorageManager* manager,
744
+ const char* name,
745
+ uint8_t* data,
746
+ uint32_t data_length);
747
+ void (*write_async)(struct IDiscordStorageManager* manager,
748
+ const char* name,
749
+ uint8_t* data,
750
+ uint32_t data_length,
751
+ void* callback_data,
752
+ void (*callback)(void* callback_data, enum EDiscordResult result));
753
+ enum EDiscordResult (*delete_)(struct IDiscordStorageManager* manager, const char* name);
754
+ enum EDiscordResult (*exists)(struct IDiscordStorageManager* manager,
755
+ const char* name,
756
+ bool* exists);
757
+ void (*count)(struct IDiscordStorageManager* manager, int32_t* count);
758
+ enum EDiscordResult (*stat)(struct IDiscordStorageManager* manager,
759
+ const char* name,
760
+ struct DiscordFileStat* stat);
761
+ enum EDiscordResult (*stat_at)(struct IDiscordStorageManager* manager,
762
+ int32_t index,
763
+ struct DiscordFileStat* stat);
764
+ enum EDiscordResult (*get_path)(struct IDiscordStorageManager* manager, DiscordPath* path);
765
+ };
766
+
767
+ struct IDiscordStoreEvents {
768
+ void (*on_entitlement_create)(void* event_data, struct DiscordEntitlement* entitlement);
769
+ void (*on_entitlement_delete)(void* event_data, struct DiscordEntitlement* entitlement);
770
+ };
771
+
772
+ struct IDiscordStoreManager {
773
+ void (*fetch_skus)(struct IDiscordStoreManager* manager,
774
+ void* callback_data,
775
+ void (*callback)(void* callback_data, enum EDiscordResult result));
776
+ void (*count_skus)(struct IDiscordStoreManager* manager, int32_t* count);
777
+ enum EDiscordResult (*get_sku)(struct IDiscordStoreManager* manager,
778
+ DiscordSnowflake sku_id,
779
+ struct DiscordSku* sku);
780
+ enum EDiscordResult (*get_sku_at)(struct IDiscordStoreManager* manager,
781
+ int32_t index,
782
+ struct DiscordSku* sku);
783
+ void (*fetch_entitlements)(struct IDiscordStoreManager* manager,
784
+ void* callback_data,
785
+ void (*callback)(void* callback_data, enum EDiscordResult result));
786
+ void (*count_entitlements)(struct IDiscordStoreManager* manager, int32_t* count);
787
+ enum EDiscordResult (*get_entitlement)(struct IDiscordStoreManager* manager,
788
+ DiscordSnowflake entitlement_id,
789
+ struct DiscordEntitlement* entitlement);
790
+ enum EDiscordResult (*get_entitlement_at)(struct IDiscordStoreManager* manager,
791
+ int32_t index,
792
+ struct DiscordEntitlement* entitlement);
793
+ enum EDiscordResult (*has_sku_entitlement)(struct IDiscordStoreManager* manager,
794
+ DiscordSnowflake sku_id,
795
+ bool* has_entitlement);
796
+ void (*start_purchase)(struct IDiscordStoreManager* manager,
797
+ DiscordSnowflake sku_id,
798
+ void* callback_data,
799
+ void (*callback)(void* callback_data, enum EDiscordResult result));
800
+ };
801
+
802
+ struct IDiscordVoiceEvents {
803
+ void (*on_settings_update)(void* event_data);
804
+ };
805
+
806
+ struct IDiscordVoiceManager {
807
+ enum EDiscordResult (*get_input_mode)(struct IDiscordVoiceManager* manager,
808
+ struct DiscordInputMode* input_mode);
809
+ void (*set_input_mode)(struct IDiscordVoiceManager* manager,
810
+ struct DiscordInputMode input_mode,
811
+ void* callback_data,
812
+ void (*callback)(void* callback_data, enum EDiscordResult result));
813
+ enum EDiscordResult (*is_self_mute)(struct IDiscordVoiceManager* manager, bool* mute);
814
+ enum EDiscordResult (*set_self_mute)(struct IDiscordVoiceManager* manager, bool mute);
815
+ enum EDiscordResult (*is_self_deaf)(struct IDiscordVoiceManager* manager, bool* deaf);
816
+ enum EDiscordResult (*set_self_deaf)(struct IDiscordVoiceManager* manager, bool deaf);
817
+ enum EDiscordResult (*is_local_mute)(struct IDiscordVoiceManager* manager,
818
+ DiscordSnowflake user_id,
819
+ bool* mute);
820
+ enum EDiscordResult (*set_local_mute)(struct IDiscordVoiceManager* manager,
821
+ DiscordSnowflake user_id,
822
+ bool mute);
823
+ enum EDiscordResult (*get_local_volume)(struct IDiscordVoiceManager* manager,
824
+ DiscordSnowflake user_id,
825
+ uint8_t* volume);
826
+ enum EDiscordResult (*set_local_volume)(struct IDiscordVoiceManager* manager,
827
+ DiscordSnowflake user_id,
828
+ uint8_t volume);
829
+ };
830
+
831
+ struct IDiscordAchievementEvents {
832
+ void (*on_user_achievement_update)(void* event_data,
833
+ struct DiscordUserAchievement* user_achievement);
834
+ };
835
+
836
+ struct IDiscordAchievementManager {
837
+ void (*set_user_achievement)(struct IDiscordAchievementManager* manager,
838
+ DiscordSnowflake achievement_id,
839
+ uint8_t percent_complete,
840
+ void* callback_data,
841
+ void (*callback)(void* callback_data, enum EDiscordResult result));
842
+ void (*fetch_user_achievements)(struct IDiscordAchievementManager* manager,
843
+ void* callback_data,
844
+ void (*callback)(void* callback_data,
845
+ enum EDiscordResult result));
846
+ void (*count_user_achievements)(struct IDiscordAchievementManager* manager, int32_t* count);
847
+ enum EDiscordResult (*get_user_achievement)(struct IDiscordAchievementManager* manager,
848
+ DiscordSnowflake user_achievement_id,
849
+ struct DiscordUserAchievement* user_achievement);
850
+ enum EDiscordResult (*get_user_achievement_at)(struct IDiscordAchievementManager* manager,
851
+ int32_t index,
852
+ struct DiscordUserAchievement* user_achievement);
853
+ };
854
+
855
+ typedef void* IDiscordCoreEvents;
856
+
857
+ struct IDiscordCore {
858
+ void (*destroy)(struct IDiscordCore* core);
859
+ enum EDiscordResult (*run_callbacks)(struct IDiscordCore* core);
860
+ void (*set_log_hook)(struct IDiscordCore* core,
861
+ enum EDiscordLogLevel min_level,
862
+ void* hook_data,
863
+ void (*hook)(void* hook_data,
864
+ enum EDiscordLogLevel level,
865
+ const char* message));
866
+ struct IDiscordApplicationManager* (*get_application_manager)(struct IDiscordCore* core);
867
+ struct IDiscordUserManager* (*get_user_manager)(struct IDiscordCore* core);
868
+ struct IDiscordImageManager* (*get_image_manager)(struct IDiscordCore* core);
869
+ struct IDiscordActivityManager* (*get_activity_manager)(struct IDiscordCore* core);
870
+ struct IDiscordRelationshipManager* (*get_relationship_manager)(struct IDiscordCore* core);
871
+ struct IDiscordLobbyManager* (*get_lobby_manager)(struct IDiscordCore* core);
872
+ struct IDiscordNetworkManager* (*get_network_manager)(struct IDiscordCore* core);
873
+ struct IDiscordOverlayManager* (*get_overlay_manager)(struct IDiscordCore* core);
874
+ struct IDiscordStorageManager* (*get_storage_manager)(struct IDiscordCore* core);
875
+ struct IDiscordStoreManager* (*get_store_manager)(struct IDiscordCore* core);
876
+ struct IDiscordVoiceManager* (*get_voice_manager)(struct IDiscordCore* core);
877
+ struct IDiscordAchievementManager* (*get_achievement_manager)(struct IDiscordCore* core);
878
+ };
879
+
880
+ struct DiscordCreateParams {
881
+ DiscordClientId client_id;
882
+ uint64_t flags;
883
+ IDiscordCoreEvents* events;
884
+ void* event_data;
885
+ IDiscordApplicationEvents* application_events;
886
+ DiscordVersion application_version;
887
+ struct IDiscordUserEvents* user_events;
888
+ DiscordVersion user_version;
889
+ IDiscordImageEvents* image_events;
890
+ DiscordVersion image_version;
891
+ struct IDiscordActivityEvents* activity_events;
892
+ DiscordVersion activity_version;
893
+ struct IDiscordRelationshipEvents* relationship_events;
894
+ DiscordVersion relationship_version;
895
+ struct IDiscordLobbyEvents* lobby_events;
896
+ DiscordVersion lobby_version;
897
+ struct IDiscordNetworkEvents* network_events;
898
+ DiscordVersion network_version;
899
+ struct IDiscordOverlayEvents* overlay_events;
900
+ DiscordVersion overlay_version;
901
+ IDiscordStorageEvents* storage_events;
902
+ DiscordVersion storage_version;
903
+ struct IDiscordStoreEvents* store_events;
904
+ DiscordVersion store_version;
905
+ struct IDiscordVoiceEvents* voice_events;
906
+ DiscordVersion voice_version;
907
+ struct IDiscordAchievementEvents* achievement_events;
908
+ DiscordVersion achievement_version;
909
+ };
910
+
911
+ #ifdef __cplusplus
912
+ inline
913
+ #else
914
+ static
915
+ #endif
916
+ void
917
+ DiscordCreateParamsSetDefault(struct DiscordCreateParams* params)
918
+ {
919
+ memset(params, 0, sizeof(struct DiscordCreateParams));
920
+ params->application_version = DISCORD_APPLICATION_MANAGER_VERSION;
921
+ params->user_version = DISCORD_USER_MANAGER_VERSION;
922
+ params->image_version = DISCORD_IMAGE_MANAGER_VERSION;
923
+ params->activity_version = DISCORD_ACTIVITY_MANAGER_VERSION;
924
+ params->relationship_version = DISCORD_RELATIONSHIP_MANAGER_VERSION;
925
+ params->lobby_version = DISCORD_LOBBY_MANAGER_VERSION;
926
+ params->network_version = DISCORD_NETWORK_MANAGER_VERSION;
927
+ params->overlay_version = DISCORD_OVERLAY_MANAGER_VERSION;
928
+ params->storage_version = DISCORD_STORAGE_MANAGER_VERSION;
929
+ params->store_version = DISCORD_STORE_MANAGER_VERSION;
930
+ params->voice_version = DISCORD_VOICE_MANAGER_VERSION;
931
+ params->achievement_version = DISCORD_ACHIEVEMENT_MANAGER_VERSION;
932
+ }
933
+
934
+ enum EDiscordResult DiscordCreate(DiscordVersion version,
935
+ struct DiscordCreateParams* params,
936
+ struct IDiscordCore** result);
937
+
938
+ #ifdef __cplusplus
939
+ }
940
+ #endif
941
+
942
+ #endif