1 module discord.rpc;
2 
3 import core.stdc.inttypes : int8_t, int64_t;
4 import discord.register;
5 
6 extern (C):
7 
8 struct DiscordRichPresence
9 {
10     /++ max 128 bytes +/
11     const(char)* state;
12 
13     /++ max 128 bytes +/
14     const(char)* details;
15 
16     int64_t startTimestamp;
17 
18     int64_t endTimestamp;
19 
20     /++ max 32 bytes +/
21     const(char)* largeImageKey;
22 
23     /++ max 128 bytes +/
24     const(char)* largeImageText;
25 
26     /++ max 32 bytes +/
27     const(char)* smallImageKey;
28 
29     /++ max 128 bytes +/
30     const(char)* smallImageText;
31 
32     /++ max 128 bytes +/
33     const(char)* partyId;
34 
35     int partySize;
36 
37     int partyMax;
38 
39     /++ max 128 bytes +/
40     const(char)* matchSecret;
41 
42     /++ max 128 bytes +/
43     const(char)* joinSecret;
44 
45     /++ max 128 bytes +/
46     const(char)* spectateSecret;
47 
48     int8_t instance;
49 }
50 
51 struct DiscordUser
52 {
53     const(char)* userId;
54     const(char)* username;
55     const(char)* discriminator;
56     const(char)* avatar;
57 }
58 
59 struct DiscordEventHandlers
60 {
61     private
62     {
63         alias ReadyCallback = extern (C) void function(const(DiscordUser)* request);
64         alias DisconnectedCallback = extern (C) void function(int errorCode, const(char)* message);
65         alias ErroredCallback = extern (C) void function(int errorCode, const(char)* message);
66         alias JoinGameCallback = extern (C) void function(const(char)* joinSecret);
67         alias SpectateGameCallback = extern (C) void function(const(char)* spectateSecret);
68         alias JoinRequestCallback = extern (C) void function(const(DiscordUser)* request);
69     }
70 
71     ReadyCallback ready;
72     DisconnectedCallback disconnected;
73     ErroredCallback errored;
74     JoinGameCallback joinGame;
75     SpectateGameCallback spectateGame;
76     JoinRequestCallback joinRequest;
77 }
78 
79 enum DISCORD_REPLY_NO = 0;
80 enum DISCORD_REPLY_YES = 1;
81 enum DISCORD_REPLY_IGNORE = 2;
82 
83 mixin(DISCORD_EXPORT!("void Discord_Initialize(
84     const(char)* applicationId,
85     DiscordEventHandlers* handlers,
86     int autoRegister,
87     const(char)* optionalSteamId)")
88 );
89 
90 mixin(DISCORD_EXPORT!("void Discord_Shutdown()"));
91 
92 /++ checks for incoming messages, dispatches callbacks +/
93 mixin(DISCORD_EXPORT!("void Discord_RunCallbacks()"));
94 
95 version (DISCORD_DISABLE_IO_THREAD)
96 {
97     pragma(msg, "[i]\tDISCORD_DISABLE_IO_THREAD");
98 
99     /++ If you disable the lib starting its own io thread, you'll need to call this from your own +/
100     mixin(DISCORD_EXPORT!("void Discord_UpdateConnection()"));
101 }
102 
103 mixin(DISCORD_EXPORT!("void Discord_UpdatePresence(const(DiscordRichPresence)* presence)"));
104 
105 mixin(DISCORD_EXPORT!("void Discord_ClearPresence()"));
106 
107 mixin(DISCORD_EXPORT!("void Discord_Respond(const(char)* userid, int reply)"));
108 
109 mixin(DISCORD_EXPORT!("void Discord_UpdateHandlers(DiscordEventHandlers* handlers)"));