disgroove 3.0.0-dev.fd521a8 → 3.0.1-dev.739a5a9

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 (38) hide show
  1. package/LICENSE +9 -9
  2. package/README.md +48 -48
  3. package/dist/lib/Client.d.ts +68 -58
  4. package/dist/lib/Client.js +59 -23
  5. package/dist/lib/constants.d.ts +17 -4
  6. package/dist/lib/constants.js +18 -4
  7. package/dist/lib/gateway/Dispatcher.d.ts +104 -0
  8. package/dist/lib/gateway/Dispatcher.js +471 -0
  9. package/dist/lib/gateway/Shard.d.ts +10 -22
  10. package/dist/lib/gateway/Shard.js +123 -656
  11. package/dist/lib/gateway/Transmitter.d.ts +22 -0
  12. package/dist/lib/gateway/Transmitter.js +93 -0
  13. package/dist/lib/rest/Endpoints.d.ts +3 -0
  14. package/dist/lib/rest/Endpoints.js +10 -3
  15. package/dist/lib/rest/RequestManager.js +21 -7
  16. package/dist/lib/rest/index.js +17 -7
  17. package/dist/lib/transformers/Components.d.ts +3 -1
  18. package/dist/lib/transformers/Components.js +26 -0
  19. package/dist/lib/transformers/Guilds.d.ts +2 -0
  20. package/dist/lib/transformers/Guilds.js +134 -0
  21. package/dist/lib/transformers/Interactions.js +30 -0
  22. package/dist/lib/transformers/Invites.js +2 -2
  23. package/dist/lib/transformers/Presences.d.ts +3 -3
  24. package/dist/lib/types/components.d.ts +36 -4
  25. package/dist/lib/types/gateway-events.d.ts +201 -75
  26. package/dist/lib/types/interaction.d.ts +3 -3
  27. package/dist/lib/types/invite.d.ts +5 -2
  28. package/dist/lib/utils/errors.d.ts +3 -1
  29. package/dist/lib/utils/errors.js +4 -0
  30. package/dist/lib/utils/formatters.js +9 -10
  31. package/dist/lib/utils/index.d.ts +1 -0
  32. package/dist/lib/utils/index.js +18 -7
  33. package/dist/lib/utils/permissions.d.ts +2 -0
  34. package/dist/lib/utils/permissions.js +7 -0
  35. package/dist/package.json +5 -5
  36. package/package.json +6 -6
  37. package/dist/lib/types/message-components.d.ts +0 -450
  38. package/dist/lib/types/message-components.js +0 -2
package/LICENSE CHANGED
@@ -1,9 +1,9 @@
1
- The MIT License (MIT)
2
-
3
- Copyright © 2024 XenKys
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
-
7
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
-
9
- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ The MIT License (MIT)
2
+
3
+ Copyright © 2024 XenKys
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,48 +1,48 @@
1
- # disgroove
2
-
3
- A module to interface with Discord
4
-
5
- - Fast
6
- - Lightweight
7
- - Flexible
8
- - 100% coverage of the [Official Discord API Documentation](https://discord.com/developers/docs/intro)
9
-
10
- ## Example
11
-
12
- ```js
13
- const {
14
- Client,
15
- GatewayIntents,
16
- InteractionType,
17
- InteractionCallbackType,
18
- MessageFlags,
19
- } = require("disgroove");
20
- const client = new Client("B0t.T0k3N");
21
-
22
- client.once("ready", () => {
23
- console.log("Logged in as", client.user.username);
24
-
25
- client.createGlobalApplicationCommand(client.application.id, {
26
- name: "ping",
27
- description: "Pong!",
28
- });
29
- });
30
-
31
- client.on("interactionCreate", async (interaction) => {
32
- if (interaction.type !== InteractionType.ApplicationCommand) return;
33
-
34
- if (interaction.data.name === "ping") {
35
- client.createInteractionResponse(interaction.id, interaction.token, {
36
- type: InteractionCallbackType.ChannelMessageWithSource,
37
- data: {
38
- content: "Pong! 🏓",
39
- flags: MessageFlags.Ephemeral,
40
- },
41
- });
42
- }
43
- });
44
-
45
- client.connect();
46
- ```
47
-
48
- More examples on the [GitHub repository](https://github.com/sergiogotuzzo/disgroove/tree/main/examples)
1
+ # disgroove
2
+
3
+ A module to interface with Discord
4
+
5
+ - Fast
6
+ - Lightweight
7
+ - Flexible
8
+ - 100% coverage of the [Official Discord API Documentation](https://discord.com/developers/docs/intro)
9
+
10
+ ## Example
11
+
12
+ ```js
13
+ const {
14
+ Client,
15
+ GatewayIntents,
16
+ InteractionType,
17
+ InteractionCallbackType,
18
+ MessageFlags,
19
+ } = require("disgroove");
20
+ const client = new Client("B0t.T0k3N");
21
+
22
+ client.once("ready", () => {
23
+ console.log("Logged in as", client.user.username);
24
+
25
+ client.createGlobalApplicationCommand(client.application.id, {
26
+ name: "ping",
27
+ description: "Pong!",
28
+ });
29
+ });
30
+
31
+ client.on("interactionCreate", async (interaction) => {
32
+ if (interaction.type !== InteractionType.ApplicationCommand) return;
33
+
34
+ if (interaction.data.name === "ping") {
35
+ client.createInteractionResponse(interaction.id, interaction.token, {
36
+ type: InteractionCallbackType.ChannelMessageWithSource,
37
+ data: {
38
+ content: "Pong! 🏓",
39
+ flags: MessageFlags.Ephemeral,
40
+ },
41
+ });
42
+ }
43
+ });
44
+
45
+ client.connect();
46
+ ```
47
+
48
+ More examples on the [GitHub repository](https://github.com/sergiogotuzzo/disgroove/tree/main/examples)
@@ -1,7 +1,4 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
- import { GatewayIntents, type OAuth2Scopes, type ActionTypes, type ImageWidgetStyleOptions, type ReactionTypes, type ApplicationCommandTypes, type EventTypes, type TriggerTypes, type ChannelTypes, type VideoQualityModes, type SortOrderTypes, type ForumLayoutTypes, type InviteTargetTypes, type VerificationLevel, type DefaultMessageNotificationLevel, type ExplicitContentFilterLevel, type SystemChannelFlags, type ApplicationFlags, type ApplicationIntegrationTypes, type ChannelFlags, type GuildFeatures, type GuildScheduledEventEntityTypes, type GuildScheduledEventPrivacyLevel, type GuildScheduledEventStatus, type MessageFlags, type OnboardingMode, type PrivacyLevel, type GuildMemberFlags, type InteractionContextTypes, type LobbyMemberFlags } from "./constants";
1
+ import { GatewayIntents, type OAuth2Scopes, type ActionTypes, type ImageWidgetStyleOptions, type ReactionTypes, type ApplicationCommandTypes, type EventTypes, type TriggerTypes, type ChannelTypes, type VideoQualityModes, type SortOrderTypes, type ForumLayoutTypes, type InviteTargetTypes, type VerificationLevel, type DefaultMessageNotificationLevel, type ExplicitContentFilterLevel, type SystemChannelFlags, type ApplicationFlags, type ApplicationIntegrationTypes, type ChannelFlags, type GuildFeatures, type GuildScheduledEventEntityTypes, type GuildScheduledEventPrivacyLevel, type GuildScheduledEventStatus, type MessageFlags, type OnboardingMode, type PrivacyLevel, type GuildMemberFlags, type InteractionContextTypes, type LobbyMemberFlags, InviteTargetUsersJobStatusErrorCodes } from "./constants";
5
2
  import { RequestManager, type FileData } from "./rest";
6
3
  import EventEmitter from "node:events";
7
4
  import { Shard } from "./gateway";
@@ -14,7 +11,7 @@ import type { Channel, FollowedChannel, ThreadMember, Overwrite, DefaultReaction
14
11
  import type { LocaleMap, snowflake, timestamp } from "./types/common";
15
12
  import type { Emoji } from "./types/emoji";
16
13
  import type { Entitlement } from "./types/entitlements";
17
- import type { AutoModerationActionExecutionEventFields, ChannelPinsUpdateEventFields, ThreadListSyncEventFields, ThreadMemberUpdateEventExtraFields, ThreadMembersUpdateEventFields, GuildCreateEventExtraFields, GuildAuditLogEntryCreateExtraFields, GuildBanAddEventFields, GuildBanRemoveEventFields, GuildMemberAddEventExtraFields, GuildMemberRemoveEventFields, GuildMemberUpdateEventFields, GuildMembersChunkEventFields, IntegrationCreateEventExtraFields, IntegrationUpdateEventExtraFields, IntegrationDeleteEventFields, InviteCreateEventFields, InviteDeleteEventFields, MessageCreateEventExtraFields, MessageDeleteEventFields, MessageDeleteBulkEventFields, MessageReactionAddEventFields, MessageReactionRemoveEventFields, MessageReactionRemoveAllEventFields, MessageReactionRemoveEmojiEventFields, PresenceUpdateEventFields, TypingStartEventFields, VoiceServerUpdateEventFields, MessagePollVoteAddFields, MessagePollVoteRemoveFields, GatewayPresenceUpdate, RawPayload, IdentifyConnectionProperties, VoiceChannelEffectSendEventFields, GuildSoundboardSoundDeleteEventFields, RateLimitedFields } from "./types/gateway-events";
14
+ import type { AutoModerationActionExecutionEvent, ChannelPinsUpdateEvent, ThreadListSyncEvent, ThreadMemberUpdateEventExtra, ThreadMembersUpdateEvent, GuildCreateEventExtra, GuildAuditLogEntryCreateExtra, GuildBanAddEvent, GuildBanRemoveEvent, GuildMemberAddEventExtra, GuildMemberRemoveEvent, GuildMemberUpdateEvent, GuildMembersChunkEvent, IntegrationCreateEventExtra, IntegrationUpdateEventExtra, IntegrationDeleteEvent, InviteCreateEvent, InviteDeleteEvent, MessageCreateEventExtra, MessageDeleteEvent, MessageDeleteBulkEvent, MessageReactionAddEvent, MessageReactionRemoveEvent, MessageReactionRemoveAllEvent, MessageReactionRemoveEmojiEvent, PresenceUpdateEvent, TypingStartEvent, VoiceServerUpdateEvent, MessagePollVoteAddEvent, MessagePollVoteRemoveEvent, GatewayPresenceUpdate, RawPayload, IdentifyConnectionProperties, VoiceChannelEffectSendEvent, GuildSoundboardSoundDeleteEvent, RateLimitedEvent } from "./types/gateway-events";
18
15
  import type { Guild, GuildMember, WelcomeScreen, GuildWidgetSettings, Ban, Integration, GuildOnboarding, GuildPreview, GuildWidget, UnavailableGuild, OnboardingPrompt, WelcomeScreenChannel, IncidentsData } from "./types/guild";
19
16
  import type { GuildScheduledEvent, GuildScheduledEventUser, GuildScheduledEventEntityMetadata, GuildScheduledEventRecurrenceRule } from "./types/guild-scheduled-event";
20
17
  import type { GuildTemplate } from "./types/guild-template";
@@ -44,6 +41,7 @@ export interface GatewayOptions {
44
41
  export interface ClientOptions {
45
42
  shardsCount?: number | "auto";
46
43
  auth?: "Bot" | "Bearer";
44
+ reconnect?: boolean;
47
45
  gateway?: GatewayOptions;
48
46
  ws?: WebSocketOptions;
49
47
  }
@@ -56,9 +54,10 @@ export declare class Client extends EventEmitter {
56
54
  intents: GatewayIntents | number;
57
55
  shardsCount: number | "auto";
58
56
  auth: "Bot" | "Bearer";
57
+ reconnect: boolean;
59
58
  shards: Map<number, Shard>;
60
59
  rest: RequestManager;
61
- guildShardMap: Record<string, number>;
60
+ guildShardMap: Map<string, number>;
62
61
  user: User | null;
63
62
  guilds: Map<string, Guild>;
64
63
  application: Pick<Application, "id" | "flags"> | null;
@@ -80,7 +79,7 @@ export declare class Client extends EventEmitter {
80
79
  /** https://discord.com/developers/docs/resources/guild#add-guild-member-role */
81
80
  addGuildMemberRole(guildId: snowflake, userId: snowflake, roleId: snowflake, reason?: string): void;
82
81
  /** https://discord.com/developers/docs/resources/lobby#add-a-member-to-a-lobby */
83
- addLobbyMember(lobbyId: snowflake, userId: snowflake, options: {
82
+ addLobbyMember(lobbyId: snowflake, userId: snowflake, options?: {
84
83
  metadata?: Record<string, string> | null;
85
84
  flags?: LobbyMemberFlags;
86
85
  }): Promise<LobbyMember>;
@@ -182,6 +181,8 @@ export declare class Client extends EventEmitter {
182
181
  targetType?: InviteTargetTypes;
183
182
  targetUserId?: snowflake;
184
183
  targetApplicationId?: snowflake;
184
+ targetUsersFile?: FileData;
185
+ rolesIds?: Array<snowflake>;
185
186
  }, reason?: string): Promise<Invite>;
186
187
  /** https://discord.com/developers/docs/resources/webhook#create-webhook */
187
188
  createChannelWebhook(channelId: snowflake, options: {
@@ -295,7 +296,7 @@ export declare class Client extends EventEmitter {
295
296
  withResponse?: boolean;
296
297
  }): Promise<void | InteractionCallbackResponse>;
297
298
  /** https://discord.com/developers/docs/resources/lobby#create-lobby */
298
- createLobby(options: {
299
+ createLobby(options?: {
299
300
  metadata?: Record<string, string> | null;
300
301
  members?: Array<Pick<LobbyMember, "id" | "metadata" | "flags">>;
301
302
  idleTimeoutSeconds?: number;
@@ -835,7 +836,7 @@ export declare class Client extends EventEmitter {
835
836
  /** https://discord.com/developers/docs/interactions/application-commands#get-global-application-command */
836
837
  getGlobalApplicationCommand(applicationId: snowflake, commandId: snowflake): Promise<ApplicationCommand>;
837
838
  /** https://discord.com/developers/docs/interactions/application-commands#get-global-application-commands */
838
- getGlobalApplicationCommands(applicationId: snowflake, options: {
839
+ getGlobalApplicationCommands(applicationId: snowflake, options?: {
839
840
  withLocalizations?: boolean;
840
841
  }): Promise<Array<ApplicationCommand>>;
841
842
  /** https://discord.com/developers/docs/resources/guild#get-guild */
@@ -876,7 +877,7 @@ export declare class Client extends EventEmitter {
876
877
  /** https://discord.com/developers/docs/resources/guild#get-guild-member */
877
878
  getGuildMember(guildId: snowflake, userId: snowflake): Promise<GuildMember>;
878
879
  /** https://discord.com/developers/docs/resources/guild#list-guild-members */
879
- getGuildMembers(guildId: snowflake, options: {
880
+ getGuildMembers(guildId: snowflake, options?: {
880
881
  limit?: number;
881
882
  after?: snowflake;
882
883
  }): Promise<Array<GuildMember>>;
@@ -893,6 +894,8 @@ export declare class Client extends EventEmitter {
893
894
  }>;
894
895
  /** https://discord.com/developers/docs/resources/guild#get-guild-role */
895
896
  getGuildRole(guildId: snowflake, roleId: snowflake): Promise<Role>;
897
+ /** https://discord.com/developers/docs/resources/guild#get-guild-role-member-counts */
898
+ getGuildRoleMemberCounts(guildId: snowflake): Promise<Record<snowflake, number>>;
896
899
  /** https://discord.com/developers/docs/resources/guild#get-guild-roles */
897
900
  getGuildRoles(guildId: snowflake): Promise<Array<Role>>;
898
901
  /** https://discord.com/developers/docs/resources/guild-scheduled-event#list-scheduled-events-for-guild */
@@ -949,6 +952,16 @@ export declare class Client extends EventEmitter {
949
952
  withCounts?: boolean;
950
953
  guildScheduledEventId?: snowflake;
951
954
  }): Promise<Invite>;
955
+ /** https://discord.com/developers/docs/resources/invite#get-target-users */
956
+ getInviteTargetUser(inviteCode: string): Promise<Blob>;
957
+ getInviteTargetUserJobStatus(inviteCode: string): Promise<{
958
+ status: InviteTargetUsersJobStatusErrorCodes;
959
+ totalUsers: number;
960
+ processedUsers: number;
961
+ createdAt: timestamp;
962
+ completedAt: timestamp | null;
963
+ errorMessage: string | null;
964
+ }>;
952
965
  /** https://discord.com/developers/docs/resources/channel#list-joined-private-archived-threads */
953
966
  getJoinedPrivateArchivedThreads(channelId: snowflake, options?: {
954
967
  before?: snowflake;
@@ -969,7 +982,7 @@ export declare class Client extends EventEmitter {
969
982
  limit?: number;
970
983
  }): Promise<Array<User>>;
971
984
  /** https://discord.com/developers/docs/resources/message#get-channel-messages */
972
- getMessages(channelId: snowflake, options: {
985
+ getMessages(channelId: snowflake, options?: {
973
986
  around?: snowflake;
974
987
  before?: snowflake;
975
988
  after?: snowflake;
@@ -985,7 +998,7 @@ export declare class Client extends EventEmitter {
985
998
  user?: User;
986
999
  }>;
987
1000
  /** https://discord.com/developers/docs/resources/channel#get-pinned-messages */
988
- getPinnedMessages(channelId: snowflake, options: {
1001
+ getPinnedMessages(channelId: snowflake, options?: {
989
1002
  before?: timestamp;
990
1003
  limit?: number;
991
1004
  }): Promise<{
@@ -1004,7 +1017,7 @@ export declare class Client extends EventEmitter {
1004
1017
  /** https://discord.com/developers/docs/resources/subscription#get-sku-subscription */
1005
1018
  getSKUSubscription(skuId: snowflake, subscriptionId: snowflake): Promise<Subscription>;
1006
1019
  /** https://discord.com/developers/docs/resources/subscription#list-sku-subscriptions */
1007
- getSKUSubscriptions(skuId: snowflake, options: {
1020
+ getSKUSubscriptions(skuId: snowflake, options?: {
1008
1021
  before?: snowflake;
1009
1022
  after?: snowflake;
1010
1023
  limit?: number;
@@ -1094,11 +1107,13 @@ export declare class Client extends EventEmitter {
1094
1107
  /** https://discord.com/developers/docs/resources/application-role-connection-metadata#update-application-role-connection-metadata-records */
1095
1108
  updateApplicationRoleConnectionMetadataRecords(applicationId: snowflake): Promise<Array<ApplicationRoleConnectionMetadata>>;
1096
1109
  /** https://discord.com/developers/docs/resources/user#update-current-user-application-role-connection */
1097
- updateCurrentApplicationRoleConnection(applicationId: snowflake, options: {
1110
+ updateCurrentApplicationRoleConnection(applicationId: snowflake, options?: {
1098
1111
  platformName?: string;
1099
1112
  platformUsername?: string;
1100
1113
  metadata?: ApplicationRoleConnectionMetadata;
1101
1114
  }): Promise<ApplicationRoleConnection>;
1115
+ /** https://discord.com/developers/docs/resources/invite#update-target-users */
1116
+ updateInviteTargetUser(inviteCode: string, targetUsersFile: FileData): void;
1102
1117
  /** https://discord.com/developers/docs/resources/channel#unpin-message */
1103
1118
  unpinMessage(channelId: snowflake, messageId: snowflake, reason?: string): void;
1104
1119
  }
@@ -1118,13 +1133,14 @@ export declare interface Client extends EventEmitter {
1118
1133
  }
1119
1134
  export interface ClientEvents {
1120
1135
  dispatch: [packet: RawPayload, shard: number];
1121
- heartbeatACK: [shard: number];
1136
+ heartbeat: [shard: number];
1137
+ reconnect: [shard: number];
1138
+ invalidSession: [shard: number];
1122
1139
  hello: [interval: number, shard: number];
1123
- ready: [];
1124
- resumed: [];
1125
- rateLimited: [rateLimit: RateLimitedFields];
1126
- reconnect: [];
1127
- invalidSession: [];
1140
+ heartbeatACK: [shard: number];
1141
+ ready: [shard: number];
1142
+ resumed: [shard: Number];
1143
+ rateLimited: [rateLimit: RateLimitedEvent, shard: number];
1128
1144
  applicationCommandPermissionsUpdate: [
1129
1145
  applicationCommandPermissions: GuildApplicationCommandPermissions
1130
1146
  ];
@@ -1132,40 +1148,38 @@ export interface ClientEvents {
1132
1148
  autoModerationRuleUpdate: [autoModerationRule: AutoModerationRule];
1133
1149
  autoModerationRuleDelete: [autoModerationRule: AutoModerationRule];
1134
1150
  autoModerationActionExecution: [
1135
- autoModerationExecution: AutoModerationActionExecutionEventFields
1151
+ autoModerationExecution: AutoModerationActionExecutionEvent
1136
1152
  ];
1137
1153
  channelCreate: [channel: Channel];
1138
1154
  channelUpdate: [channel: Channel];
1139
1155
  channelDelete: [channel: Channel];
1140
- channelPinsUpdate: [pins: ChannelPinsUpdateEventFields];
1156
+ channelPinsUpdate: [pins: ChannelPinsUpdateEvent];
1141
1157
  threadCreate: [thread: Channel];
1142
1158
  threadUpdate: [thread: Channel];
1143
1159
  threadDelete: [thread: Channel];
1144
- threadListSync: [sync: ThreadListSyncEventFields];
1160
+ threadListSync: [sync: ThreadListSyncEvent];
1145
1161
  threadMemberUpdate: [
1146
- threadMember: ThreadMember & ThreadMemberUpdateEventExtraFields
1162
+ threadMember: ThreadMember & ThreadMemberUpdateEventExtra
1147
1163
  ];
1148
- threadMembersUpdate: [thread: ThreadMembersUpdateEventFields];
1164
+ threadMembersUpdate: [thread: ThreadMembersUpdateEvent];
1149
1165
  entitlementCreate: [entitlement: Entitlement];
1150
1166
  entitlementUpdate: [entitlement: Entitlement];
1151
1167
  entitlementDelete: [entitlement: Entitlement];
1152
- guildCreate: [
1153
- guild: (Guild & GuildCreateEventExtraFields) | UnavailableGuild
1154
- ];
1168
+ guildCreate: [guild: (Guild & GuildCreateEventExtra) | UnavailableGuild];
1155
1169
  guildUpdate: [guild: Guild];
1156
1170
  guildDelete: [guild: UnavailableGuild];
1157
1171
  guildAuditLogEntryCreate: [
1158
- auditLogEntry: AuditLogEntry & GuildAuditLogEntryCreateExtraFields
1172
+ auditLogEntry: AuditLogEntry & GuildAuditLogEntryCreateExtra
1159
1173
  ];
1160
- guildBanAdd: [ban: GuildBanAddEventFields];
1161
- guildBanRemove: [ban: GuildBanRemoveEventFields];
1174
+ guildBanAdd: [ban: GuildBanAddEvent];
1175
+ guildBanRemove: [ban: GuildBanRemoveEvent];
1162
1176
  guildEmojisUpdate: [emojis: Array<Emoji>, guildId: snowflake];
1163
1177
  guildStickersUpdate: [stickers: Array<Sticker>, guildId: snowflake];
1164
1178
  guildIntegrationsUpdate: [guildId: snowflake];
1165
- guildMemberAdd: [guildMember: GuildMember & GuildMemberAddEventExtraFields];
1166
- guildMemberRemove: [guildMember: GuildMemberRemoveEventFields];
1167
- guildMemberUpdate: [guildMember: GuildMemberUpdateEventFields];
1168
- guildMembersChunk: [request: GuildMembersChunkEventFields];
1179
+ guildMemberAdd: [guildMember: GuildMember & GuildMemberAddEventExtra];
1180
+ guildMemberRemove: [guildMember: GuildMemberRemoveEvent];
1181
+ guildMemberUpdate: [guildMember: GuildMemberUpdateEvent];
1182
+ guildMembersChunk: [request: GuildMembersChunkEvent];
1169
1183
  guildRoleCreate: [role: Role, guildId: snowflake];
1170
1184
  guildRoleUpdate: [role: Role, guildId: snowflake];
1171
1185
  guildRoleDelete: [roleId: snowflake, guildId: snowflake];
@@ -1184,43 +1198,39 @@ export interface ClientEvents {
1184
1198
  ];
1185
1199
  guildSoundboardSoundCreate: [sound: SoundboardSound];
1186
1200
  guildSoundboardSoundUpdate: [sound: SoundboardSound];
1187
- guildSoundboardSoundDelete: [sound: GuildSoundboardSoundDeleteEventFields];
1201
+ guildSoundboardSoundDelete: [sound: GuildSoundboardSoundDeleteEvent];
1188
1202
  guildSoundboardSoundsUpdate: [
1189
1203
  sounds: Array<SoundboardSound>,
1190
1204
  guildId: snowflake
1191
1205
  ];
1192
1206
  soundboardSounds: [sounds: Array<SoundboardSound>, guildId: snowflake];
1193
- integrationCreate: [
1194
- integration: Integration & IntegrationCreateEventExtraFields
1195
- ];
1196
- integrationUpdate: [
1197
- integration: Integration & IntegrationUpdateEventExtraFields
1198
- ];
1199
- integrationDelete: [integration: IntegrationDeleteEventFields];
1207
+ integrationCreate: [integration: Integration & IntegrationCreateEventExtra];
1208
+ integrationUpdate: [integration: Integration & IntegrationUpdateEventExtra];
1209
+ integrationDelete: [integration: IntegrationDeleteEvent];
1200
1210
  interactionCreate: [interaction: Interaction];
1201
- inviteCreate: [invite: InviteCreateEventFields];
1202
- inviteDelete: [invite: InviteDeleteEventFields];
1203
- messageCreate: [message: Message & MessageCreateEventExtraFields];
1211
+ inviteCreate: [invite: InviteCreateEvent];
1212
+ inviteDelete: [invite: InviteDeleteEvent];
1213
+ messageCreate: [message: Message & MessageCreateEventExtra];
1204
1214
  messageUpdate: [message: Message];
1205
- messageDelete: [message: MessageDeleteEventFields];
1206
- messageDeleteBulk: [bulk: MessageDeleteBulkEventFields];
1207
- messageReactionAdd: [reaction: MessageReactionAddEventFields];
1208
- messageReactionRemove: [reaction: MessageReactionRemoveEventFields];
1209
- messageReactionRemoveAll: [reaction: MessageReactionRemoveAllEventFields];
1210
- messageReactionRemoveEmoji: [reaction: MessageReactionRemoveEmojiEventFields];
1211
- presenceUpdate: [presence: PresenceUpdateEventFields];
1215
+ messageDelete: [message: MessageDeleteEvent];
1216
+ messageDeleteBulk: [bulk: MessageDeleteBulkEvent];
1217
+ messageReactionAdd: [reaction: MessageReactionAddEvent];
1218
+ messageReactionRemove: [reaction: MessageReactionRemoveEvent];
1219
+ messageReactionRemoveAll: [reaction: MessageReactionRemoveAllEvent];
1220
+ messageReactionRemoveEmoji: [reaction: MessageReactionRemoveEmojiEvent];
1221
+ presenceUpdate: [presence: PresenceUpdateEvent];
1212
1222
  stageInstanceCreate: [stageInstance: StageInstance];
1213
1223
  stageInstanceUpdate: [stageInstance: StageInstance];
1214
1224
  stageInstanceDelete: [stageInstance: StageInstance];
1215
1225
  subscriptionCreate: [subscription: Subscription];
1216
1226
  subscriptionUpdate: [subscription: Subscription];
1217
1227
  subscriptionDelete: [subscription: Subscription];
1218
- typingStart: [typing: TypingStartEventFields];
1228
+ typingStart: [typing: TypingStartEvent];
1219
1229
  userUpdate: [user: User];
1220
- voiceChannelEffectSend: [voiceEffect: VoiceChannelEffectSendEventFields];
1230
+ voiceChannelEffectSend: [voiceEffect: VoiceChannelEffectSendEvent];
1221
1231
  voiceStateUpdate: [voiceState: VoiceState];
1222
- voiceServerUpdate: [voiceServer: VoiceServerUpdateEventFields];
1232
+ voiceServerUpdate: [voiceServer: VoiceServerUpdateEvent];
1223
1233
  webhooksUpdate: [channelId: snowflake, guildId: snowflake];
1224
- messagePollVoteAdd: [vote: MessagePollVoteAddFields];
1225
- messagePollVoteRemove: [vote: MessagePollVoteRemoveFields];
1234
+ messagePollVoteAdd: [vote: MessagePollVoteAddEvent];
1235
+ messagePollVoteRemove: [vote: MessagePollVoteRemoveEvent];
1226
1236
  }
@@ -18,6 +18,7 @@ class Client extends node_events_1.default {
18
18
  intents;
19
19
  shardsCount;
20
20
  auth;
21
+ reconnect;
21
22
  shards;
22
23
  rest;
23
24
  guildShardMap;
@@ -40,9 +41,10 @@ class Client extends node_events_1.default {
40
41
  : 0;
41
42
  this.shardsCount = options?.shardsCount ?? "auto";
42
43
  this.auth = options?.auth ?? "Bot";
44
+ this.reconnect = options?.reconnect ?? true;
43
45
  this.shards = new Map();
44
46
  this.rest = new rest_1.RequestManager(token, this.auth);
45
- this.guildShardMap = {};
47
+ this.guildShardMap = new Map();
46
48
  this.user = null;
47
49
  this.guilds = new Map();
48
50
  this.application = null;
@@ -165,7 +167,7 @@ class Client extends node_events_1.default {
165
167
  : this.shardsCount;
166
168
  for (let i = 0; i < this.shardsCount; i++)
167
169
  this.shards.set(i, new gateway_1.Shard(i, this));
168
- this.shards.forEach((shard) => shard.connect(false));
170
+ this.shards.forEach((shard) => shard.connect());
169
171
  }
170
172
  /** https://discord.com/developers/docs/resources/entitlement#consume-an-entitlement */
171
173
  consumeEntitlement(applicationId, entitlementId) {
@@ -242,7 +244,11 @@ class Client extends node_events_1.default {
242
244
  target_type: options.targetType,
243
245
  target_user_id: options.targetUserId,
244
246
  target_application_id: options.targetApplicationId,
247
+ roles_ids: options.rolesIds,
245
248
  },
249
+ files: options.targetUsersFile !== undefined
250
+ ? [options.targetUsersFile]
251
+ : undefined,
246
252
  reason,
247
253
  });
248
254
  return transformers_1.Invites.inviteFromRaw(response);
@@ -596,9 +602,9 @@ class Client extends node_events_1.default {
596
602
  async createLobby(options) {
597
603
  const response = await this.rest.request(rest_1.RESTMethods.Post, rest_1.Endpoints.lobbies(), {
598
604
  json: {
599
- metadata: options.metadata,
600
- members: options.members,
601
- idle_timeout_seconds: options.idleTimeoutSeconds,
605
+ metadata: options?.metadata,
606
+ members: options?.members,
607
+ idle_timeout_seconds: options?.idleTimeoutSeconds,
602
608
  },
603
609
  });
604
610
  return transformers_1.Lobbies.lobbyFromRaw(response);
@@ -876,7 +882,7 @@ class Client extends node_events_1.default {
876
882
  }
877
883
  /** https://discord.com/developers/docs/events/gateway#initiating-a-disconnect */
878
884
  disconnect() {
879
- this.shards.forEach((shard) => shard.disconnect());
885
+ this.shards.forEach((shard) => shard.disconnect(false));
880
886
  }
881
887
  /** https://discord.com/developers/docs/resources/auto-moderation#modify-auto-moderation-rule */
882
888
  async editAutoModerationRule(guildId, autoModerationRuleId, options, reason) {
@@ -1835,7 +1841,7 @@ class Client extends node_events_1.default {
1835
1841
  async getGlobalApplicationCommands(applicationId, options) {
1836
1842
  const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.applicationCommands(applicationId), {
1837
1843
  query: {
1838
- with_localizations: options.withLocalizations,
1844
+ with_localizations: options?.withLocalizations,
1839
1845
  },
1840
1846
  });
1841
1847
  return response.map((applicationCommand) => transformers_1.ApplicationCommands.applicationCommandFromRaw(applicationCommand));
@@ -1941,8 +1947,8 @@ class Client extends node_events_1.default {
1941
1947
  async getGuildMembers(guildId, options) {
1942
1948
  const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.guildMembers(guildId), {
1943
1949
  query: {
1944
- limit: options.limit,
1945
- after: options.after,
1950
+ limit: options?.limit,
1951
+ after: options?.after,
1946
1952
  },
1947
1953
  });
1948
1954
  return response.map((guildMember) => transformers_1.Guilds.guildMemberFromRaw(guildMember));
@@ -2009,6 +2015,11 @@ class Client extends node_events_1.default {
2009
2015
  const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.guildRole(guildId, roleId));
2010
2016
  return transformers_1.Roles.roleFromRaw(response);
2011
2017
  }
2018
+ /** https://discord.com/developers/docs/resources/guild#get-guild-role-member-counts */
2019
+ async getGuildRoleMemberCounts(guildId) {
2020
+ const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.guildRoleMemberCounts(guildId));
2021
+ return response;
2022
+ }
2012
2023
  /** https://discord.com/developers/docs/resources/guild#get-guild-roles */
2013
2024
  async getGuildRoles(guildId) {
2014
2025
  const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.guildRoles(guildId));
@@ -2156,6 +2167,21 @@ class Client extends node_events_1.default {
2156
2167
  });
2157
2168
  return transformers_1.Invites.inviteFromRaw(response);
2158
2169
  }
2170
+ /** https://discord.com/developers/docs/resources/invite#get-target-users */
2171
+ getInviteTargetUser(inviteCode) {
2172
+ return this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.inviteTargetUsers(inviteCode));
2173
+ }
2174
+ async getInviteTargetUserJobStatus(inviteCode) {
2175
+ const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.inviteTargetUsersJobStatus(inviteCode));
2176
+ return {
2177
+ status: response.status,
2178
+ totalUsers: response.total_users,
2179
+ processedUsers: response.processed_users,
2180
+ createdAt: response.created_at,
2181
+ completedAt: response.completed_at,
2182
+ errorMessage: response.error_message,
2183
+ };
2184
+ }
2159
2185
  /** https://discord.com/developers/docs/resources/channel#list-joined-private-archived-threads */
2160
2186
  async getJoinedPrivateArchivedThreads(channelId, options) {
2161
2187
  const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.channelThreads(channelId, "private", true), {
@@ -2195,10 +2221,10 @@ class Client extends node_events_1.default {
2195
2221
  async getMessages(channelId, options) {
2196
2222
  const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.channelMessages(channelId), {
2197
2223
  query: {
2198
- around: options.around,
2199
- before: options.before,
2200
- after: options.after,
2201
- limit: options.limit,
2224
+ around: options?.around,
2225
+ before: options?.before,
2226
+ after: options?.after,
2227
+ limit: options?.limit,
2202
2228
  },
2203
2229
  });
2204
2230
  return response.map((message) => transformers_1.Messages.messageFromRaw(message));
@@ -2259,10 +2285,10 @@ class Client extends node_events_1.default {
2259
2285
  async getSKUSubscriptions(skuId, options) {
2260
2286
  const response = await this.rest.request(rest_1.RESTMethods.Get, rest_1.Endpoints.skuSubscriptions(skuId), {
2261
2287
  query: {
2262
- before: options.before,
2263
- after: options.after,
2264
- limit: options.limit,
2265
- user_id: options.userId,
2288
+ before: options?.before,
2289
+ after: options?.after,
2290
+ limit: options?.limit,
2291
+ user_id: options?.userId,
2266
2292
  },
2267
2293
  });
2268
2294
  return response.map((subscription) => transformers_1.Subscriptions.subscriptionFromRaw(subscription));
@@ -2361,7 +2387,9 @@ class Client extends node_events_1.default {
2361
2387
  }
2362
2388
  /** https://discord.com/developers/docs/topics/gateway-events#update-voice-state */
2363
2389
  joinVoiceChannel(guildId, channelId, options) {
2364
- this.shards.get(this.guildShardMap[guildId]).updateVoiceState({
2390
+ this.shards
2391
+ .get(this.guildShardMap.get(guildId))
2392
+ .transmitter.updateVoiceState({
2365
2393
  guildId,
2366
2394
  channelId,
2367
2395
  selfMute: !!options?.selfMute,
@@ -2382,7 +2410,9 @@ class Client extends node_events_1.default {
2382
2410
  }
2383
2411
  /** https://discord.com/developers/docs/topics/gateway-events#update-voice-state */
2384
2412
  leaveVoiceChannel(guildId) {
2385
- this.shards.get(this.guildShardMap[guildId]).updateVoiceState({
2413
+ this.shards
2414
+ .get(this.guildShardMap.get(guildId))
2415
+ .transmitter.updateVoiceState({
2386
2416
  guildId,
2387
2417
  channelId: null,
2388
2418
  selfMute: false,
@@ -2455,7 +2485,7 @@ class Client extends node_events_1.default {
2455
2485
  }
2456
2486
  /** https://discord.com/developers/docs/topics/gateway-events#update-presence */
2457
2487
  setPresence(options) {
2458
- this.shards.forEach((shard) => shard.updatePresence(options));
2488
+ this.shards.forEach((shard) => shard.transmitter.updatePresence(options));
2459
2489
  }
2460
2490
  /** https://discord.com/developers/docs/resources/guild-template#sync-guild-template */
2461
2491
  async syncGuildTemplate(guildId, code) {
@@ -2480,9 +2510,9 @@ class Client extends node_events_1.default {
2480
2510
  async updateCurrentApplicationRoleConnection(applicationId, options) {
2481
2511
  const response = await this.rest.request(rest_1.RESTMethods.Put, rest_1.Endpoints.userApplicationRoleConnection(applicationId), {
2482
2512
  json: {
2483
- platform_name: options.platformName,
2484
- platform_username: options.platformUsername,
2485
- metadata: options.metadata !== undefined
2513
+ platform_name: options?.platformName,
2514
+ platform_username: options?.platformUsername,
2515
+ metadata: options?.metadata !== undefined
2486
2516
  ? transformers_1.ApplicationRoleConnectionMetadatas.applicationRoleConnectionMetadataToRaw(options.metadata)
2487
2517
  : undefined,
2488
2518
  },
@@ -2493,6 +2523,12 @@ class Client extends node_events_1.default {
2493
2523
  metadata: transformers_1.ApplicationRoleConnectionMetadatas.applicationRoleConnectionMetadataFromRaw(response.metadata),
2494
2524
  };
2495
2525
  }
2526
+ /** https://discord.com/developers/docs/resources/invite#update-target-users */
2527
+ updateInviteTargetUser(inviteCode, targetUsersFile) {
2528
+ this.rest.request(rest_1.RESTMethods.Put, rest_1.Endpoints.inviteTargetUsers(inviteCode), {
2529
+ files: [targetUsersFile],
2530
+ });
2531
+ }
2496
2532
  /** https://discord.com/developers/docs/resources/channel#unpin-message */
2497
2533
  unpinMessage(channelId, messageId, reason) {
2498
2534
  this.rest.request(rest_1.RESTMethods.Delete, rest_1.Endpoints.channelPin(channelId, messageId), {