disgroove 1.3.1 → 1.3.3-dev.1

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 (267) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/Client.d.ts +234 -0
  3. package/dist/lib/Client.js +256 -0
  4. package/dist/lib/Client.js.map +1 -0
  5. package/dist/lib/constants.d.ts +1084 -0
  6. package/dist/lib/constants.js +1163 -0
  7. package/dist/lib/constants.js.map +1 -0
  8. package/dist/lib/gateway/Shard.d.ts +25 -0
  9. package/dist/lib/gateway/Shard.js +522 -0
  10. package/dist/lib/gateway/Shard.js.map +1 -0
  11. package/dist/lib/gateway/ShardsManager.d.ts +5 -0
  12. package/dist/lib/gateway/ShardsManager.js +13 -0
  13. package/dist/lib/gateway/ShardsManager.js.map +1 -0
  14. package/dist/lib/gateway/index.d.ts +2 -0
  15. package/dist/lib/gateway/index.js +19 -0
  16. package/dist/lib/gateway/index.js.map +1 -0
  17. package/dist/lib/index.d.ts +7 -0
  18. package/dist/lib/index.js +24 -0
  19. package/dist/lib/index.js.map +1 -0
  20. package/dist/lib/rest/CDN.d.ts +21 -0
  21. package/dist/lib/rest/CDN.js +46 -0
  22. package/dist/lib/rest/CDN.js.map +1 -0
  23. package/dist/lib/rest/Endpoints.d.ts +94 -0
  24. package/dist/lib/rest/Endpoints.js +211 -0
  25. package/dist/lib/rest/Endpoints.js.map +1 -0
  26. package/dist/lib/rest/REST.d.ts +22 -0
  27. package/dist/lib/rest/REST.js +35 -0
  28. package/dist/lib/rest/REST.js.map +1 -0
  29. package/dist/lib/rest/RequestsManager.d.ts +17 -0
  30. package/dist/lib/rest/RequestsManager.js +124 -0
  31. package/dist/lib/rest/RequestsManager.js.map +1 -0
  32. package/dist/lib/rest/index.d.ts +4 -0
  33. package/dist/lib/rest/index.js +34 -0
  34. package/dist/lib/rest/index.js.map +1 -0
  35. package/dist/lib/structures/Application.d.ts +174 -0
  36. package/dist/lib/structures/Application.js +328 -0
  37. package/dist/lib/structures/Application.js.map +1 -0
  38. package/dist/lib/structures/ApplicationCommand.d.ts +45 -0
  39. package/dist/lib/structures/ApplicationCommand.js +127 -0
  40. package/dist/lib/structures/ApplicationCommand.js.map +1 -0
  41. package/dist/lib/structures/AuditLog.d.ts +20 -0
  42. package/dist/lib/structures/AuditLog.js +76 -0
  43. package/dist/lib/structures/AuditLog.js.map +1 -0
  44. package/dist/lib/structures/AutoModerationRule.d.ts +34 -0
  45. package/dist/lib/structures/AutoModerationRule.js +96 -0
  46. package/dist/lib/structures/AutoModerationRule.js.map +1 -0
  47. package/dist/lib/structures/Base.d.ts +17 -0
  48. package/dist/lib/structures/Base.js +31 -0
  49. package/dist/lib/structures/Base.js.map +1 -0
  50. package/dist/lib/structures/Channel.d.ts +253 -0
  51. package/dist/lib/structures/Channel.js +591 -0
  52. package/dist/lib/structures/Channel.js.map +1 -0
  53. package/dist/lib/structures/ClientApplication.d.ts +150 -0
  54. package/dist/lib/structures/ClientApplication.js +241 -0
  55. package/dist/lib/structures/ClientApplication.js.map +1 -0
  56. package/dist/lib/structures/Emoji.d.ts +28 -0
  57. package/dist/lib/structures/Emoji.js +79 -0
  58. package/dist/lib/structures/Emoji.js.map +1 -0
  59. package/dist/lib/structures/Entitlement.d.ts +24 -0
  60. package/dist/lib/structures/Entitlement.js +68 -0
  61. package/dist/lib/structures/Entitlement.js.map +1 -0
  62. package/dist/lib/structures/Guild.d.ts +462 -0
  63. package/dist/lib/structures/Guild.js +1095 -0
  64. package/dist/lib/structures/Guild.js.map +1 -0
  65. package/dist/lib/structures/GuildMember.d.ts +50 -0
  66. package/dist/lib/structures/GuildMember.js +149 -0
  67. package/dist/lib/structures/GuildMember.js.map +1 -0
  68. package/dist/lib/structures/GuildScheduledEvent.d.ts +49 -0
  69. package/dist/lib/structures/GuildScheduledEvent.js +118 -0
  70. package/dist/lib/structures/GuildScheduledEvent.js.map +1 -0
  71. package/dist/lib/structures/GuildTemplate.d.ts +32 -0
  72. package/dist/lib/structures/GuildTemplate.js +76 -0
  73. package/dist/lib/structures/GuildTemplate.js.map +1 -0
  74. package/dist/lib/structures/Integration.d.ts +30 -0
  75. package/dist/lib/structures/Integration.js +102 -0
  76. package/dist/lib/structures/Integration.js.map +1 -0
  77. package/dist/lib/structures/Interaction.d.ts +76 -0
  78. package/dist/lib/structures/Interaction.js +345 -0
  79. package/dist/lib/structures/Interaction.js.map +1 -0
  80. package/dist/lib/structures/Invite.d.ts +28 -0
  81. package/dist/lib/structures/Invite.js +86 -0
  82. package/dist/lib/structures/Invite.js.map +1 -0
  83. package/dist/lib/structures/Message.d.ts +84 -0
  84. package/dist/lib/structures/Message.js +300 -0
  85. package/dist/lib/structures/Message.js.map +1 -0
  86. package/dist/lib/structures/Role.d.ts +37 -0
  87. package/dist/lib/structures/Role.js +90 -0
  88. package/dist/lib/structures/Role.js.map +1 -0
  89. package/dist/lib/structures/SKU.d.ts +23 -0
  90. package/dist/lib/structures/SKU.js +63 -0
  91. package/dist/lib/structures/SKU.js.map +1 -0
  92. package/dist/lib/structures/StageInstance.d.ts +24 -0
  93. package/dist/lib/structures/StageInstance.js +57 -0
  94. package/dist/lib/structures/StageInstance.js.map +1 -0
  95. package/dist/lib/structures/Sticker.d.ts +31 -0
  96. package/dist/lib/structures/Sticker.js +86 -0
  97. package/dist/lib/structures/Sticker.js.map +1 -0
  98. package/dist/lib/structures/Team.d.ts +14 -0
  99. package/dist/lib/structures/Team.js +39 -0
  100. package/dist/lib/structures/Team.js.map +1 -0
  101. package/dist/lib/structures/TestEntitlement.d.ts +23 -0
  102. package/dist/lib/structures/TestEntitlement.js +61 -0
  103. package/dist/lib/structures/TestEntitlement.js.map +1 -0
  104. package/dist/lib/structures/UnavailableGuild.d.ts +11 -0
  105. package/dist/lib/structures/UnavailableGuild.js +25 -0
  106. package/dist/lib/structures/UnavailableGuild.js.map +1 -0
  107. package/dist/lib/structures/User.d.ts +63 -0
  108. package/dist/lib/structures/User.js +177 -0
  109. package/dist/lib/structures/User.js.map +1 -0
  110. package/dist/lib/structures/VoiceState.d.ts +26 -0
  111. package/dist/lib/structures/VoiceState.js +70 -0
  112. package/dist/lib/structures/VoiceState.js.map +1 -0
  113. package/dist/lib/structures/Webhook.d.ts +84 -0
  114. package/dist/lib/structures/Webhook.js +239 -0
  115. package/dist/lib/structures/Webhook.js.map +1 -0
  116. package/dist/lib/structures/index.d.ts +27 -0
  117. package/dist/lib/structures/index.js +44 -0
  118. package/dist/lib/structures/index.js.map +1 -0
  119. package/dist/lib/types/application-command.d.ts +102 -0
  120. package/dist/lib/types/application-command.js +3 -0
  121. package/dist/lib/types/application-command.js.map +1 -0
  122. package/dist/lib/types/application-role-connection-metadata.d.ts +18 -0
  123. package/dist/lib/types/application-role-connection-metadata.js +3 -0
  124. package/dist/lib/types/application-role-connection-metadata.js.map +1 -0
  125. package/dist/lib/types/application.d.ts +66 -0
  126. package/dist/lib/types/application.js +3 -0
  127. package/dist/lib/types/application.js.map +1 -0
  128. package/dist/lib/types/audit-log.d.ts +82 -0
  129. package/dist/lib/types/audit-log.js +3 -0
  130. package/dist/lib/types/audit-log.js.map +1 -0
  131. package/dist/lib/types/auto-moderation.d.ts +65 -0
  132. package/dist/lib/types/auto-moderation.js +3 -0
  133. package/dist/lib/types/auto-moderation.js.map +1 -0
  134. package/dist/lib/types/channel.d.ts +456 -0
  135. package/dist/lib/types/channel.js +3 -0
  136. package/dist/lib/types/channel.js.map +1 -0
  137. package/dist/lib/types/emoji.d.ts +22 -0
  138. package/dist/lib/types/emoji.js +3 -0
  139. package/dist/lib/types/emoji.js.map +1 -0
  140. package/dist/lib/types/entitlements.d.ts +32 -0
  141. package/dist/lib/types/entitlements.js +3 -0
  142. package/dist/lib/types/entitlements.js.map +1 -0
  143. package/dist/lib/types/gateway-events.d.ts +805 -0
  144. package/dist/lib/types/gateway-events.js +3 -0
  145. package/dist/lib/types/gateway-events.js.map +1 -0
  146. package/dist/lib/types/guild-scheduled-event.d.ts +57 -0
  147. package/dist/lib/types/guild-scheduled-event.js +3 -0
  148. package/dist/lib/types/guild-scheduled-event.js.map +1 -0
  149. package/dist/lib/types/guild-template.d.ts +28 -0
  150. package/dist/lib/types/guild-template.js +3 -0
  151. package/dist/lib/types/guild-template.js.map +1 -0
  152. package/dist/lib/types/guild.d.ts +333 -0
  153. package/dist/lib/types/guild.js +3 -0
  154. package/dist/lib/types/guild.js.map +1 -0
  155. package/dist/lib/types/index.d.ts +23 -0
  156. package/dist/lib/types/index.js +40 -0
  157. package/dist/lib/types/index.js.map +1 -0
  158. package/dist/lib/types/interaction.d.ts +170 -0
  159. package/dist/lib/types/interaction.js +3 -0
  160. package/dist/lib/types/interaction.js.map +1 -0
  161. package/dist/lib/types/invite.d.ts +59 -0
  162. package/dist/lib/types/invite.js +3 -0
  163. package/dist/lib/types/invite.js.map +1 -0
  164. package/dist/lib/types/message-components.d.ts +100 -0
  165. package/dist/lib/types/message-components.js +3 -0
  166. package/dist/lib/types/message-components.js.map +1 -0
  167. package/dist/lib/types/role.d.ts +47 -0
  168. package/dist/lib/types/role.js +3 -0
  169. package/dist/lib/types/role.js.map +1 -0
  170. package/dist/lib/types/sku.d.ts +30 -0
  171. package/dist/lib/types/sku.js +3 -0
  172. package/dist/lib/types/sku.js.map +1 -0
  173. package/dist/lib/types/stage-instance.d.ts +20 -0
  174. package/dist/lib/types/stage-instance.js +3 -0
  175. package/dist/lib/types/stage-instance.js.map +1 -0
  176. package/dist/lib/types/sticker.d.ts +61 -0
  177. package/dist/lib/types/sticker.js +3 -0
  178. package/dist/lib/types/sticker.js.map +1 -0
  179. package/dist/lib/types/team.d.ts +30 -0
  180. package/dist/lib/types/team.js +3 -0
  181. package/dist/lib/types/team.js.map +1 -0
  182. package/dist/lib/types/user.d.ts +77 -0
  183. package/dist/lib/types/user.js +3 -0
  184. package/dist/lib/types/user.js.map +1 -0
  185. package/dist/lib/types/voice.d.ts +47 -0
  186. package/dist/lib/types/voice.js +3 -0
  187. package/dist/lib/types/voice.js.map +1 -0
  188. package/dist/lib/types/webhook.d.ts +31 -0
  189. package/dist/lib/types/webhook.js +3 -0
  190. package/dist/lib/types/webhook.js.map +1 -0
  191. package/dist/lib/utils/Util.d.ts +15 -0
  192. package/dist/lib/utils/Util.js +543 -0
  193. package/dist/lib/utils/Util.js.map +1 -0
  194. package/dist/lib/utils/errors.d.ts +12 -0
  195. package/dist/lib/utils/errors.js +25 -0
  196. package/dist/lib/utils/errors.js.map +1 -0
  197. package/dist/lib/utils/index.d.ts +2 -0
  198. package/dist/lib/utils/index.js +19 -0
  199. package/dist/lib/utils/index.js.map +1 -0
  200. package/dist/package.json +1 -1
  201. package/lib/Client.ts +616 -0
  202. package/lib/constants.ts +1173 -0
  203. package/lib/gateway/Shard.ts +704 -0
  204. package/lib/gateway/ShardsManager.ts +11 -0
  205. package/lib/gateway/index.ts +2 -0
  206. package/lib/index.ts +7 -0
  207. package/lib/rest/CDN.ts +56 -0
  208. package/lib/rest/Endpoints.ts +241 -0
  209. package/lib/rest/REST.ts +45 -0
  210. package/lib/rest/RequestsManager.ts +134 -0
  211. package/lib/rest/index.ts +4 -0
  212. package/lib/structures/Application.ts +599 -0
  213. package/lib/structures/ApplicationCommand.ts +187 -0
  214. package/lib/structures/AuditLog.ts +112 -0
  215. package/lib/structures/AutoModerationRule.ts +127 -0
  216. package/lib/structures/Base.ts +39 -0
  217. package/lib/structures/Channel.ts +921 -0
  218. package/lib/structures/ClientApplication.ts +515 -0
  219. package/lib/structures/Emoji.ts +95 -0
  220. package/lib/structures/Entitlement.ts +65 -0
  221. package/lib/structures/Guild.ts +1842 -0
  222. package/lib/structures/GuildMember.ts +193 -0
  223. package/lib/structures/GuildScheduledEvent.ts +164 -0
  224. package/lib/structures/GuildTemplate.ts +103 -0
  225. package/lib/structures/Integration.ts +136 -0
  226. package/lib/structures/Interaction.ts +506 -0
  227. package/lib/structures/Invite.ts +108 -0
  228. package/lib/structures/Message.ts +421 -0
  229. package/lib/structures/Role.ts +116 -0
  230. package/lib/structures/SKU.ts +63 -0
  231. package/lib/structures/StageInstance.ts +74 -0
  232. package/lib/structures/Sticker.ts +100 -0
  233. package/lib/structures/Team.ts +41 -0
  234. package/lib/structures/TestEntitlement.ts +78 -0
  235. package/lib/structures/UnavailableGuild.ts +27 -0
  236. package/lib/structures/User.ts +233 -0
  237. package/lib/structures/VoiceState.ts +72 -0
  238. package/lib/structures/Webhook.ts +341 -0
  239. package/lib/structures/index.ts +27 -0
  240. package/lib/types/application-command.ts +118 -0
  241. package/lib/types/application-role-connection-metadata.ts +23 -0
  242. package/lib/types/application.ts +77 -0
  243. package/lib/types/audit-log.ts +105 -0
  244. package/lib/types/auto-moderation.ts +78 -0
  245. package/lib/types/channel.ts +534 -0
  246. package/lib/types/emoji.ts +24 -0
  247. package/lib/types/entitlements.ts +34 -0
  248. package/lib/types/gateway-events.ts +970 -0
  249. package/lib/types/guild-scheduled-event.ts +67 -0
  250. package/lib/types/guild-template.ts +30 -0
  251. package/lib/types/guild.ts +388 -0
  252. package/lib/types/index.ts +23 -0
  253. package/lib/types/interaction.ts +224 -0
  254. package/lib/types/invite.ts +78 -0
  255. package/lib/types/message-components.ts +127 -0
  256. package/lib/types/role.ts +51 -0
  257. package/lib/types/sku.ts +32 -0
  258. package/lib/types/stage-instance.ts +22 -0
  259. package/lib/types/sticker.ts +67 -0
  260. package/lib/types/team.ts +34 -0
  261. package/lib/types/user.ts +93 -0
  262. package/lib/types/voice.ts +51 -0
  263. package/lib/types/webhook.ts +40 -0
  264. package/lib/utils/Util.ts +600 -0
  265. package/lib/utils/errors.ts +23 -0
  266. package/lib/utils/index.ts +2 -0
  267. package/package.json +1 -1
@@ -0,0 +1,704 @@
1
+ import WebSocket, { type RawData } from "ws";
2
+ import { GatewayEvents, GatewayOPCodes, StatusTypes } from "../constants";
3
+ import { GatewayError } from "../utils";
4
+ import {
5
+ Application,
6
+ AutoModerationRule,
7
+ Channel,
8
+ Emoji,
9
+ Guild,
10
+ GuildMember,
11
+ GuildScheduledEvent,
12
+ Integration,
13
+ Interaction,
14
+ Message,
15
+ Role,
16
+ StageInstance,
17
+ User,
18
+ VoiceState,
19
+ ClientApplication,
20
+ Sticker,
21
+ UnavailableGuild,
22
+ Entitlement,
23
+ } from "../structures";
24
+ import type {
25
+ Activity,
26
+ RawApplicationCommandPermission,
27
+ RawChannel,
28
+ RawEmoji,
29
+ RawGuildMember,
30
+ RawSticker,
31
+ RawThreadMember,
32
+ RawAuditLogChange,
33
+ RawPresenceUpdateEventFields,
34
+ } from "../types";
35
+ import { Client } from "../Client";
36
+ import * as pkg from "../../package.json";
37
+
38
+ export class Shard {
39
+ id: number;
40
+ private heartbeatInterval!: NodeJS.Timeout | null;
41
+ client: Client;
42
+ ws: WebSocket;
43
+ sessionId!: string;
44
+
45
+ constructor(id: number, client: Client) {
46
+ this.id = id;
47
+ this.client = client;
48
+ this.ws = new WebSocket("wss://gateway.discord.gg/?v=10&encoding=json");
49
+ }
50
+
51
+ /** https://discord.com/developers/docs/topics/gateway-events#update-presence */
52
+ setPresence(options: {
53
+ activity?: Pick<Activity, "name" | "type" | "url" | "state">;
54
+ status?: StatusTypes;
55
+ afk?: boolean;
56
+ }): void {
57
+ this.ws.send(
58
+ JSON.stringify({
59
+ op: GatewayOPCodes.PresenceUpdate,
60
+ d: {
61
+ since: options.status === StatusTypes.Idle ? Date.now() : null,
62
+ activities:
63
+ options.activity !== undefined ? [options.activity] : null,
64
+ status: options.status ?? StatusTypes.Online,
65
+ afk: !!options.afk,
66
+ },
67
+ })
68
+ );
69
+ }
70
+
71
+ /** https://discord.com/developers/docs/topics/gateway#connections */
72
+ connect(): void {
73
+ this.ws.on("open", () => this.onWebSocketOpen());
74
+ this.ws.on("message", (data) => this.onWebSocketMessage(data));
75
+ this.ws.on("error", (err) => this.onWebSocketError(err));
76
+ this.ws.on("close", (code, reason) => this.onWebSocketClose(code, reason));
77
+ }
78
+
79
+ disconnect(): void {
80
+ if (this.heartbeatInterval) {
81
+ clearInterval(this.heartbeatInterval);
82
+ this.heartbeatInterval = null;
83
+ }
84
+ }
85
+
86
+ private onWebSocketOpen(): void {
87
+ this.ws.send(
88
+ JSON.stringify({
89
+ op: GatewayOPCodes.Identify,
90
+ d: {
91
+ token: this.client.token,
92
+ shard: [this.id, this.client.shardsCount],
93
+ intents: this.client.intents,
94
+ properties: {
95
+ os: process.platform,
96
+ browser: pkg.name,
97
+ device: pkg.name,
98
+ },
99
+ },
100
+ })
101
+ );
102
+ }
103
+
104
+ private onWebSocketMessage(data: RawData): void {
105
+ const packet = JSON.parse(data.toString());
106
+
107
+ switch (packet.op) {
108
+ case GatewayOPCodes.Reconnect:
109
+ this.client.emit(GatewayEvents.Reconnect);
110
+ break;
111
+ case GatewayOPCodes.InvalidSession:
112
+ this.client.emit(GatewayEvents.InvalidSession);
113
+ break;
114
+ case GatewayOPCodes.Hello:
115
+ {
116
+ this.heartbeatInterval = setInterval(() => {
117
+ this.ws.send(
118
+ JSON.stringify({
119
+ op: GatewayOPCodes.Heartbeat,
120
+ d: null,
121
+ })
122
+ );
123
+ }, packet.d.heartbeat_interval);
124
+
125
+ this.client.emit(GatewayEvents.Hello);
126
+ }
127
+ break;
128
+ }
129
+
130
+ switch (packet.t) {
131
+ case "READY":
132
+ {
133
+ this.client.user = new User(packet.d.user, this.client);
134
+ this.client.application = new ClientApplication(
135
+ packet.d.application,
136
+ this.client
137
+ );
138
+ this.sessionId = packet.d.session_id;
139
+
140
+ this.client.emit(GatewayEvents.Ready);
141
+ }
142
+ break;
143
+ case "RESUMED":
144
+ this.client.emit(GatewayEvents.Resumed);
145
+ break;
146
+ case "APPLICATION_COMMAND_PERMISSIONS_UPDATE":
147
+ this.client.emit(GatewayEvents.ApplicationCommandPermissionsUpdate, {
148
+ id: packet.d.id,
149
+ applicationId: packet.d.application_id,
150
+ guildId: packet.d.guild_id,
151
+ permissions: packet.d.permissions.map(
152
+ (permission: RawApplicationCommandPermission) => ({
153
+ id: permission.id,
154
+ type: permission.type,
155
+ permission: permission.permission,
156
+ })
157
+ ),
158
+ });
159
+ break;
160
+ case "AUTO_MODERATION_RULE_CREATE":
161
+ this.client.emit(
162
+ GatewayEvents.AutoModerationRuleCreate,
163
+ new AutoModerationRule(packet.d, this.client)
164
+ );
165
+ break;
166
+ case "AUTO_MODERATION_RULE_UPDATE":
167
+ this.client.emit(
168
+ GatewayEvents.AutoModerationRuleUpdate,
169
+ new AutoModerationRule(packet.d, this.client)
170
+ );
171
+ break;
172
+ case "AUTO_MODERATION_RULE_DELETE":
173
+ this.client.emit(
174
+ GatewayEvents.AutoModerationRuleDelete,
175
+ new AutoModerationRule(packet.d, this.client).toJSON()
176
+ );
177
+ break;
178
+ case "AUTO_MODERATION_ACTION_EXECUTION":
179
+ this.client.emit(GatewayEvents.AutoModerationActionExecution, {
180
+ guildId: packet.d.guild_id,
181
+ action: {
182
+ type: packet.d.action.type,
183
+ metadata: packet.d.action.metadata,
184
+ },
185
+ ruleId: packet.d.rule_id,
186
+ ruleTriggerType: packet.d.rule_trigger_type,
187
+ userId: packet.d.user_id,
188
+ channelId: packet.d.channel_id,
189
+ messageId: packet.d.message_id,
190
+ alertSystemMessageId: packet.d.alert_system_message_id,
191
+ content: packet.d.content,
192
+ matchedKeyword: packet.d.matched_keyword,
193
+ matchedContent: packet.d.matched_content,
194
+ });
195
+ break;
196
+ case "CHANNEL_CREATE":
197
+ this.client.emit(
198
+ GatewayEvents.ChannelCreate,
199
+ new Channel(packet.d, this.client)
200
+ );
201
+ break;
202
+ case "CHANNEL_UPDATE":
203
+ this.client.emit(
204
+ GatewayEvents.ChannelUpdate,
205
+ new Channel(packet.d, this.client)
206
+ );
207
+ break;
208
+ case "CHANNEL_DELETE":
209
+ this.client.emit(
210
+ GatewayEvents.ChannelDelete,
211
+ new Channel(packet.d, this.client).toJSON()
212
+ );
213
+ break;
214
+ case "CHANNEL_PINS_UPDATE":
215
+ this.client.emit(GatewayEvents.ChannelPinsUpdate, {
216
+ guildId: packet.d.guild_id,
217
+ channelId: packet.d.channel_id,
218
+ lastPinTimestamp: packet.d.last_pin_timestamp,
219
+ });
220
+ break;
221
+ case "THREAD_CREATE":
222
+ this.client.emit(
223
+ GatewayEvents.ThreadCreate,
224
+ new Channel(packet.d, this.client)
225
+ );
226
+ break;
227
+ case "THREAD_UPDATE":
228
+ this.client.emit(
229
+ GatewayEvents.ThreadUpdate,
230
+ new Channel(packet.d, this.client)
231
+ );
232
+ break;
233
+ case "THREAD_DELETE":
234
+ this.client.emit(
235
+ GatewayEvents.ThreadDelete,
236
+ new Channel(packet.d, this.client).toJSON()
237
+ );
238
+ break;
239
+ case "THREAD_LIST_SYNC":
240
+ this.client.emit(GatewayEvents.ThreadListSync, {
241
+ guildId: packet.d.guild_id,
242
+ channelIds: packet.d.channel_ids,
243
+ threads: packet.d.threads.map(
244
+ (channel: RawChannel) => new Channel(channel, this.client)
245
+ ),
246
+ members: packet.d.members.map((member: RawThreadMember) => ({
247
+ id: member.id,
248
+ userId: member.user_id,
249
+ joinTimestamp: member.join_timestamp,
250
+ flags: member.flags,
251
+ member:
252
+ member.member !== undefined
253
+ ? new GuildMember(member.member, this.client)
254
+ : undefined,
255
+ })),
256
+ });
257
+ break;
258
+ case "THREAD_MEMBER_UPDATE":
259
+ this.client.emit(GatewayEvents.ThreadMemberUpdate, {
260
+ id: packet.d.id,
261
+ userId: packet.d.user_id,
262
+ joinTimestamp: packet.d.join_timestamp,
263
+ flags: packet.d.flags,
264
+ member:
265
+ packet.d.member !== undefined
266
+ ? new GuildMember(packet.d.member, this.client)
267
+ : undefined,
268
+ guildId: packet.d.guild_id,
269
+ });
270
+ break;
271
+ case "THREAD_MEMBERS_UPDATE":
272
+ this.client.emit(GatewayEvents.ThreadMembersUpdate, {
273
+ id: packet.d.id,
274
+ guildId: packet.d.guild_id,
275
+ memberCount: packet.d.member_count,
276
+ addedMembers: packet.d.added_members?.map(
277
+ (member: RawThreadMember) => ({
278
+ id: member.id,
279
+ userId: member.user_id,
280
+ joinTimestamp: member.join_timestamp,
281
+ flags: member.flags,
282
+ member:
283
+ member.member !== undefined
284
+ ? new GuildMember(member.member, this.client)
285
+ : undefined,
286
+ })
287
+ ),
288
+ removedMemberIds: packet.d.removed_member_ids,
289
+ });
290
+ break;
291
+ case "ENTITLEMENT_CREATE":
292
+ this.client.emit(
293
+ GatewayEvents.EntitlementCreate,
294
+ new Entitlement(packet.d, this.client)
295
+ );
296
+ break;
297
+ case "ENTITLEMENT_UPDATE":
298
+ this.client.emit(
299
+ GatewayEvents.EntitlementUpdate,
300
+ new Entitlement(packet.d, this.client)
301
+ );
302
+ break;
303
+ case "ENTITLEMENT_DELETE":
304
+ this.client.emit(
305
+ GatewayEvents.EntitlementDelete,
306
+ new Entitlement(packet.d, this.client).toJSON()
307
+ );
308
+ break;
309
+ case "GUILD_CREATE":
310
+ {
311
+ this.client.guildSharding[packet.d.id] = this.id;
312
+
313
+ this.client.emit(
314
+ GatewayEvents.GuildCreate,
315
+ packet.d.unavailable
316
+ ? new UnavailableGuild(packet.d, this.client)
317
+ : new Guild(packet.d, this.client)
318
+ );
319
+ }
320
+ break;
321
+ case "GUILD_UPDATE":
322
+ this.client.emit(
323
+ GatewayEvents.GuildUpdate,
324
+ new Guild(packet.d, this.client)
325
+ );
326
+ break;
327
+ case "GUILD_DELETE":
328
+ {
329
+ delete this.client.guildSharding[packet.d.id];
330
+
331
+ this.client.emit(
332
+ GatewayEvents.GuildDelete,
333
+ new UnavailableGuild(packet.d, this.client).toJSON()
334
+ );
335
+ }
336
+ break;
337
+ case "GUILD_AUDIT_LOG_ENTRY_CREATE":
338
+ this.client.emit(GatewayEvents.GuildAuditLogEntryCreate, {
339
+ targetId: packet.d.target_id,
340
+ changes: packet.d.changes?.map((change: RawAuditLogChange) => ({
341
+ newValue: change.new_value,
342
+ oldValue: change.old_value,
343
+ key: change.key,
344
+ })),
345
+ userId: packet.d.user_id,
346
+ id: packet.d.id,
347
+ actionType: packet.d.action_type,
348
+ options:
349
+ packet.d.options !== undefined
350
+ ? {
351
+ applicationId: packet.d.options.application_id,
352
+ autoModerationRuleName:
353
+ packet.d.options.auto_moderation_rule_name,
354
+ autoModerationRuleTriggerType:
355
+ packet.d.options.auto_moderation_rule_trigger_type,
356
+ channelId: packet.d.options.channel_id,
357
+ count: packet.d.options.count,
358
+ deleteMemberDays: packet.d.options.delete_member_days,
359
+ id: packet.d.options.id,
360
+ membersRemoved: packet.d.options.members_removed,
361
+ messageId: packet.d.options.message_id,
362
+ roleName: packet.d.options.role_name,
363
+ type: packet.d.options.type,
364
+ integrationType: packet.d.option.integrationType,
365
+ }
366
+ : undefined,
367
+ reason: packet.d.reason,
368
+ });
369
+ break;
370
+ case "GUILD_BAN_ADD":
371
+ this.client.emit(GatewayEvents.GuildBanAdd, {
372
+ guildId: packet.d.guild_id,
373
+ user: new User(packet.d.user, this.client),
374
+ });
375
+ break;
376
+ case "GUILD_BAN_REMOVE":
377
+ this.client.emit(GatewayEvents.GuildBanRemove, {
378
+ guildId: packet.d.guild_id,
379
+ user: new User(packet.d.user, this.client),
380
+ });
381
+ break;
382
+ case "GUILD_EMOJIS_UPDATE":
383
+ this.client.emit(
384
+ GatewayEvents.GuildEmojisUpdate,
385
+ packet.d.emojis.map(
386
+ (emoji: RawEmoji) => new Emoji(emoji, this.client)
387
+ ),
388
+ packet.d.guild_id
389
+ );
390
+ break;
391
+ case "GUILD_STICKERS_UPDATE":
392
+ this.client.emit(
393
+ GatewayEvents.GuildStickersUpdate,
394
+ packet.d.stickers.map(
395
+ (sticker: RawSticker) => new Sticker(sticker, this.client)
396
+ ),
397
+ packet.d.guild_id
398
+ );
399
+ break;
400
+ case "GUILD_INTEGRATIONS_UPDATE":
401
+ this.client.emit(
402
+ GatewayEvents.GuildIntegrationsUpdate,
403
+ packet.d.guild_id
404
+ );
405
+ break;
406
+ case "GUILD_MEMBER_ADD":
407
+ this.client.emit(
408
+ GatewayEvents.GuildMemberAdd,
409
+ new GuildMember(packet.d, this.client)
410
+ );
411
+ break;
412
+ case "GUILD_MEMBER_REMOVE":
413
+ this.client.emit(GatewayEvents.GuildMemberRemove, {
414
+ guildId: packet.d.guild_id,
415
+ user: new User(packet.d.user, this.client),
416
+ });
417
+ break;
418
+ case "GUILD_MEMBER_UPDATE":
419
+ this.client.emit(GatewayEvents.GuildMemberUpdate, {
420
+ guildId: packet.d.guild_id,
421
+ roles: packet.d.roles,
422
+ user: new User(packet.d.user, this.client),
423
+ nick: packet.d.nick,
424
+ avatar: packet.d.avatar,
425
+ joinedAt: packet.d.joined_at,
426
+ premiumSince: packet.d.premium_since,
427
+ deaf: packet.d.deaf,
428
+ mute: packet.d.mute,
429
+ pending: packet.d.pending,
430
+ communicationDisabledUntil: packet.d.communication_disabled_until,
431
+ });
432
+ break;
433
+ case "GUILD_MEMBERS_CHUNK":
434
+ this.client.emit(GatewayEvents.GuildMembersChunk, {
435
+ guildId: packet.d.guild_id,
436
+ members: packet.d.members.map(
437
+ (member: RawGuildMember) => new GuildMember(member, this.client)
438
+ ),
439
+ chunkIndex: packet.d.chunk_index,
440
+ chunkCount: packet.d.chunk_count,
441
+ notFound: packet.d.not_found,
442
+ presences: packet.d.presences.map(
443
+ (presence: RawPresenceUpdateEventFields) =>
444
+ this.client.util.presenceToREST(presence, this.client)
445
+ ),
446
+ nonce: packet.d.nonce,
447
+ });
448
+ break;
449
+ case "GUILD_ROLE_CREATE":
450
+ this.client.emit(
451
+ GatewayEvents.GuildRoleCreate,
452
+ new Role(packet.d.role, this.client),
453
+ packet.d.guild_id
454
+ );
455
+ break;
456
+ case "GUILD_ROLE_UPDATE":
457
+ this.client.emit(
458
+ GatewayEvents.GuildRoleUpdate,
459
+ new Role(packet.d.role, this.client),
460
+ packet.d.guild_id
461
+ );
462
+ break;
463
+ case "GUILD_ROLE_DELETE":
464
+ this.client.emit(
465
+ GatewayEvents.GuildRoleDelete,
466
+ packet.d.role_id,
467
+ packet.d.guild_id
468
+ );
469
+ break;
470
+ case "GUILD_SCHEDULED_EVENT_CREATE":
471
+ this.client.emit(
472
+ GatewayEvents.GuildScheduledEventCreate,
473
+ new GuildScheduledEvent(packet.d, this.client)
474
+ );
475
+ break;
476
+ case "GUILD_SCHEDULED_EVENT_UPDATE":
477
+ this.client.emit(
478
+ GatewayEvents.GuildScheduledEventUpdate,
479
+ new GuildScheduledEvent(packet.d, this.client)
480
+ );
481
+ break;
482
+ case "GUILD_SCHEDULED_EVENT_DELETE":
483
+ this.client.emit(
484
+ GatewayEvents.GuildScheduledEventDelete,
485
+ new GuildScheduledEvent(packet.d, this.client).toJSON()
486
+ );
487
+ break;
488
+ case "GUILD_SCHEDULED_EVENT_USER_ADD":
489
+ this.client.emit(
490
+ GatewayEvents.GuildScheduledEventUserAdd,
491
+ packet.d.user_id,
492
+ packet.d.guild_scheduled_event_id,
493
+ packet.d.guild_id
494
+ );
495
+ break;
496
+ case "GUILD_SCHEDULED_EVENT_USER_REMOVE":
497
+ this.client.emit(
498
+ GatewayEvents.GuildScheduledEventUserRemove,
499
+ packet.d.user_id,
500
+ packet.d.guild_scheduled_event_id,
501
+ packet.d.guild_id
502
+ );
503
+ break;
504
+ case "INTEGRATION_CREATE":
505
+ this.client.emit(
506
+ GatewayEvents.IntegrationCreate,
507
+ new Integration(packet.d, this.client)
508
+ );
509
+ break;
510
+ case "INTEGRATION_UPDATE":
511
+ this.client.emit(
512
+ GatewayEvents.IntegrationUpdate,
513
+ new Integration(packet.d, this.client)
514
+ );
515
+ break;
516
+ case "INTEGRATION_DELETE":
517
+ this.client.emit(GatewayEvents.IntegrationDelete, {
518
+ id: packet.d.id,
519
+ guildId: packet.d.guild_id,
520
+ applicationId: packet.d.application_id,
521
+ });
522
+ break;
523
+ case "INTERACTION_CREATE":
524
+ this.client.emit(
525
+ GatewayEvents.InteractionCreate,
526
+ new Interaction(packet.d, this.client)
527
+ );
528
+ break;
529
+ case "INVITE_CREATE":
530
+ this.client.emit(GatewayEvents.InviteCreate, {
531
+ channelId: packet.d.channel_id,
532
+ code: packet.d.code,
533
+ createdAt: packet.d.created_at,
534
+ guildId: packet.d.guild_id,
535
+ inviter:
536
+ packet.d.inviter !== undefined
537
+ ? new User(packet.d.inviter, this.client)
538
+ : undefined,
539
+ maxAge: packet.d.max_age,
540
+ maxUses: packet.d.max_uses,
541
+ targetType: packet.d.target_type,
542
+ targetUser:
543
+ packet.d.target_user !== undefined
544
+ ? new User(packet.d.target_user, this.client)
545
+ : undefined,
546
+ targetApplication:
547
+ packet.d.target_application !== undefined
548
+ ? new Application(packet.d.target_application, this.client)
549
+ : undefined,
550
+ temporary: packet.d.temporary,
551
+ uses: packet.d.uses,
552
+ });
553
+ break;
554
+ case "INVITE_DELETE":
555
+ this.client.emit(GatewayEvents.InviteDelete, {
556
+ channelId: packet.d.channel_id,
557
+ guildId: packet.d.guild_id,
558
+ code: packet.d.code,
559
+ });
560
+ break;
561
+ case "MESSAGE_CREATE":
562
+ this.client.emit(
563
+ GatewayEvents.MessageCreate,
564
+ new Message(packet.d, this.client)
565
+ );
566
+ break;
567
+ case "MESSAGE_UPDATE":
568
+ this.client.emit(
569
+ GatewayEvents.MessageUpdate,
570
+ "id" in packet.d && "channel_id" in packet.d && "author" in packet.d
571
+ ? new Message(packet.d, this.client)
572
+ : {
573
+ id: packet.d.id,
574
+ channelId: packet.d.channel_id,
575
+ }
576
+ );
577
+ break;
578
+ case "MESSAGE_DELETE":
579
+ this.client.emit(GatewayEvents.MessageDelete, {
580
+ id: packet.d.id,
581
+ channelId: packet.d.channel_id,
582
+ guildId: packet.d.guild_id,
583
+ });
584
+ break;
585
+ case "MESSAGE_DELETE_BULK":
586
+ this.client.emit(GatewayEvents.MessageDeleteBulk, {
587
+ ids: packet.d.ids,
588
+ channelId: packet.d.channel_id,
589
+ guildId: packet.d.guild_id,
590
+ });
591
+ break;
592
+ case "MESSAGE_REACTION_ADD":
593
+ this.client.emit(GatewayEvents.MessageReactionAdd, {
594
+ userId: packet.d.user_id,
595
+ channelId: packet.d.channel_id,
596
+ messageId: packet.d.message_id,
597
+ guildId: packet.d.guild_id,
598
+ member:
599
+ packet.d.member !== undefined
600
+ ? new GuildMember(packet.d.member, this.client)
601
+ : undefined,
602
+ emoji: new Emoji(packet.d.emoji, this.client),
603
+ messageAuthorId: packet.d.message_author_id,
604
+ });
605
+ break;
606
+ case "MESSAGE_REACTION_REMOVE":
607
+ this.client.emit(GatewayEvents.MessageReactionRemove, {
608
+ userId: packet.d.user_id,
609
+ channelId: packet.d.channel_id,
610
+ messageId: packet.d.message_id,
611
+ guildId: packet.d.guild_id,
612
+ emoji: new Emoji(packet.d.emoji, this.client),
613
+ });
614
+ break;
615
+ case "MESSAGE_REACTION_REMOVE_ALL":
616
+ this.client.emit(GatewayEvents.MessageReactionRemoveAll, {
617
+ channelId: packet.d.channel_id,
618
+ messageId: packet.d.message_id,
619
+ guildId: packet.d.guild_id,
620
+ });
621
+ break;
622
+ case "MESSAGE_REACTION_REMOVE_EMOJI":
623
+ this.client.emit(GatewayEvents.MessageReactionRemoveEmoji, {
624
+ channelId: packet.d.channel_id,
625
+ guildId: packet.d.guild_id,
626
+ messageId: packet.d.message_id,
627
+ emoji: new Emoji(packet.d.emoji, this.client),
628
+ });
629
+ break;
630
+ case "PRESENCE_UPDATE":
631
+ this.client.emit(
632
+ GatewayEvents.PresenceUpdate,
633
+ this.client.util.presenceToREST(packet.d, this.client)
634
+ );
635
+ break;
636
+ case "STAGE_INSTANCE_CREATE":
637
+ this.client.emit(
638
+ GatewayEvents.StageInstanceCreate,
639
+ new StageInstance(packet.d, this.client)
640
+ );
641
+ break;
642
+ case "STAGE_INSTANCE_UPDATE":
643
+ this.client.emit(
644
+ GatewayEvents.StageInstanceUpdate,
645
+ new StageInstance(packet.d, this.client)
646
+ );
647
+ break;
648
+ case "STAGE_INSTANCE_DELETE":
649
+ this.client.emit(
650
+ GatewayEvents.StageInstanceDelete,
651
+ new StageInstance(packet.d, this.client).toJSON()
652
+ );
653
+ break;
654
+ case "TYPING_START":
655
+ this.client.emit(GatewayEvents.TypingStart, {
656
+ channelId: packet.d.channel_id,
657
+ guildId: packet.d.guild_id,
658
+ userId: packet.d.user_id,
659
+ timestamp: packet.d.timestamp,
660
+ member:
661
+ packet.d.member !== undefined
662
+ ? new GuildMember(packet.d.member, this.client)
663
+ : undefined,
664
+ });
665
+ break;
666
+ case "USER_UPDATE":
667
+ this.client.emit(
668
+ GatewayEvents.UserUpdate,
669
+ new User(packet.d, this.client)
670
+ );
671
+ break;
672
+ case "VOICE_STATE_UPDATE":
673
+ this.client.emit(
674
+ GatewayEvents.VoiceStateUpdate,
675
+ new VoiceState(packet.d, this.client)
676
+ );
677
+ break;
678
+ case "VOICE_SERVER_UPDATE":
679
+ this.client.emit(GatewayEvents.VoiceServerUpdate, {
680
+ token: packet.d.token,
681
+ guildId: packet.d.guild_id,
682
+ endpoint: packet.d.endpoint,
683
+ });
684
+ break;
685
+ case "WEBHOOKS_UPDATE":
686
+ this.client.emit(
687
+ GatewayEvents.WebhooksUpdate,
688
+ packet.d.channel_id,
689
+ packet.d.guild_id
690
+ );
691
+ break;
692
+ }
693
+ }
694
+
695
+ private onWebSocketError(err: Error): void {
696
+ throw err;
697
+ }
698
+
699
+ private onWebSocketClose(code: number, reason: Buffer): void {
700
+ if (code === 1000) return;
701
+
702
+ throw new GatewayError(`[${code}] ${reason}`);
703
+ }
704
+ }
@@ -0,0 +1,11 @@
1
+ import { Shard } from ".";
2
+
3
+ export class ShardsManager extends Map<number, Shard> {
4
+ connect(): void {
5
+ this.forEach((shard) => shard.connect());
6
+ }
7
+
8
+ disconnect(): void {
9
+ this.forEach((shard) => shard.disconnect());
10
+ }
11
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./Shard";
2
+ export * from "./ShardsManager";