rdiscord_sdk 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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