@velliajs/discord 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +133 -0
- package/package.json +82 -0
- package/src/client/BaseClient.js +83 -0
- package/src/client/Client.js +591 -0
- package/src/client/WebhookClient.js +103 -0
- package/src/client/actions/Action.js +119 -0
- package/src/client/actions/ActionsManager.js +79 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +23 -0
- package/src/client/actions/ChannelUpdate.js +33 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +44 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +19 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +31 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +29 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +19 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +101 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +37 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +47 -0
- package/src/client/actions/MessageReactionAdd.js +55 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +42 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +31 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +26 -0
- package/src/client/actions/ThreadListSync.js +60 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +47 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +36 -0
- package/src/client/actions/VoiceStateUpdate.js +43 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +44 -0
- package/src/client/websocket/WebSocketManager.js +393 -0
- package/src/client/websocket/WebSocketShard.js +231 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +27 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +64 -0
- package/src/errors/DJSError.js +48 -0
- package/src/errors/ErrorCodes.js +319 -0
- package/src/errors/Messages.js +170 -0
- package/src/errors/index.js +5 -0
- package/src/index.js +213 -0
- package/src/managers/ApplicationCommandManager.js +263 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
- package/src/managers/AutoModerationRuleManager.js +288 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/CachedManager.js +57 -0
- package/src/managers/CategoryChannelChildManager.js +77 -0
- package/src/managers/ChannelManager.js +128 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +494 -0
- package/src/managers/GuildEmojiManager.js +174 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +83 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +283 -0
- package/src/managers/GuildMemberManager.js +540 -0
- package/src/managers/GuildMemberRoleManager.js +204 -0
- package/src/managers/GuildScheduledEventManager.js +297 -0
- package/src/managers/GuildStickerManager.js +182 -0
- package/src/managers/GuildTextThreadManager.js +91 -0
- package/src/managers/MessageManager.js +259 -0
- package/src/managers/PermissionOverwriteManager.js +168 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +68 -0
- package/src/managers/ReactionUserManager.js +77 -0
- package/src/managers/RoleManager.js +360 -0
- package/src/managers/StageInstanceManager.js +154 -0
- package/src/managers/ThreadManager.js +204 -0
- package/src/managers/ThreadMemberManager.js +182 -0
- package/src/managers/UserManager.js +139 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/sharding/Shard.js +457 -0
- package/src/sharding/ShardClientUtil.js +285 -0
- package/src/sharding/ShardingManager.js +326 -0
- package/src/structures/ActionRow.js +46 -0
- package/src/structures/ActionRowBuilder.js +35 -0
- package/src/structures/AnonymousGuild.js +97 -0
- package/src/structures/ApplicationCommand.js +606 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
- package/src/structures/Attachment.js +140 -0
- package/src/structures/AttachmentBuilder.js +116 -0
- package/src/structures/AutoModerationActionExecution.js +116 -0
- package/src/structures/AutoModerationRule.js +284 -0
- package/src/structures/AutocompleteInteraction.js +97 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseChannel.js +160 -0
- package/src/structures/BaseGuild.js +119 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +186 -0
- package/src/structures/BaseGuildVoiceChannel.js +234 -0
- package/src/structures/BaseInteraction.js +344 -0
- package/src/structures/BaseSelectMenuComponent.js +56 -0
- package/src/structures/ButtonBuilder.js +44 -0
- package/src/structures/ButtonComponent.js +65 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CategoryChannel.js +45 -0
- package/src/structures/ChannelSelectMenuBuilder.js +31 -0
- package/src/structures/ChannelSelectMenuComponent.js +20 -0
- package/src/structures/ChannelSelectMenuInteraction.js +33 -0
- package/src/structures/ChatInputCommandInteraction.js +41 -0
- package/src/structures/ClientApplication.js +193 -0
- package/src/structures/ClientPresence.js +82 -0
- package/src/structures/ClientUser.js +185 -0
- package/src/structures/CommandInteraction.js +224 -0
- package/src/structures/CommandInteractionOptionResolver.js +308 -0
- package/src/structures/Component.js +47 -0
- package/src/structures/ContextMenuCommandInteraction.js +64 -0
- package/src/structures/DMChannel.js +129 -0
- package/src/structures/DirectoryChannel.js +36 -0
- package/src/structures/Embed.js +220 -0
- package/src/structures/EmbedBuilder.js +41 -0
- package/src/structures/Emoji.js +108 -0
- package/src/structures/ForumChannel.js +264 -0
- package/src/structures/Guild.js +1361 -0
- package/src/structures/GuildAuditLogs.js +91 -0
- package/src/structures/GuildAuditLogsEntry.js +527 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildChannel.js +457 -0
- package/src/structures/GuildEmoji.js +148 -0
- package/src/structures/GuildMember.js +518 -0
- package/src/structures/GuildPreview.js +193 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +439 -0
- package/src/structures/GuildTemplate.js +241 -0
- package/src/structures/Integration.js +220 -0
- package/src/structures/IntegrationApplication.js +85 -0
- package/src/structures/InteractionCollector.js +263 -0
- package/src/structures/InteractionResponse.js +102 -0
- package/src/structures/InteractionWebhook.js +59 -0
- package/src/structures/Invite.js +322 -0
- package/src/structures/InviteGuild.js +22 -0
- package/src/structures/InviteStageInstance.js +87 -0
- package/src/structures/MentionableSelectMenuBuilder.js +32 -0
- package/src/structures/MentionableSelectMenuComponent.js +11 -0
- package/src/structures/MentionableSelectMenuInteraction.js +71 -0
- package/src/structures/Message.js +997 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +107 -0
- package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
- package/src/structures/MessageMentions.js +297 -0
- package/src/structures/MessagePayload.js +299 -0
- package/src/structures/MessageReaction.js +142 -0
- package/src/structures/ModalBuilder.js +34 -0
- package/src/structures/ModalSubmitFields.js +55 -0
- package/src/structures/ModalSubmitInteraction.js +121 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +60 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +372 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +458 -0
- package/src/structures/RoleSelectMenuBuilder.js +31 -0
- package/src/structures/RoleSelectMenuComponent.js +11 -0
- package/src/structures/RoleSelectMenuInteraction.js +33 -0
- package/src/structures/SelectMenuBuilder.js +26 -0
- package/src/structures/SelectMenuComponent.js +26 -0
- package/src/structures/SelectMenuInteraction.js +26 -0
- package/src/structures/SelectMenuOptionBuilder.js +26 -0
- package/src/structures/StageChannel.js +112 -0
- package/src/structures/StageInstance.js +167 -0
- package/src/structures/Sticker.js +272 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StringSelectMenuBuilder.js +79 -0
- package/src/structures/StringSelectMenuComponent.js +20 -0
- package/src/structures/StringSelectMenuInteraction.js +21 -0
- package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
- package/src/structures/Team.js +117 -0
- package/src/structures/TeamMember.js +70 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputBuilder.js +31 -0
- package/src/structures/TextInputComponent.js +29 -0
- package/src/structures/ThreadChannel.js +606 -0
- package/src/structures/ThreadMember.js +113 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +331 -0
- package/src/structures/UserContextMenuCommandInteraction.js +29 -0
- package/src/structures/UserSelectMenuBuilder.js +31 -0
- package/src/structures/UserSelectMenuComponent.js +11 -0
- package/src/structures/UserSelectMenuInteraction.js +51 -0
- package/src/structures/VoiceChannel.js +96 -0
- package/src/structures/VoiceRegion.js +46 -0
- package/src/structures/VoiceState.js +303 -0
- package/src/structures/Webhook.js +481 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +49 -0
- package/src/structures/Widget.js +88 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +108 -0
- package/src/structures/interfaces/Collector.js +335 -0
- package/src/structures/interfaces/InteractionResponses.js +320 -0
- package/src/structures/interfaces/TextBasedChannel.js +413 -0
- package/src/util/APITypes.js +456 -0
- package/src/util/ActivityFlagsBitField.js +26 -0
- package/src/util/ApplicationFlagsBitField.js +26 -0
- package/src/util/BitField.js +176 -0
- package/src/util/ChannelFlagsBitField.js +41 -0
- package/src/util/Channels.js +150 -0
- package/src/util/Colors.js +73 -0
- package/src/util/Components.js +152 -0
- package/src/util/Constants.js +230 -0
- package/src/util/DataResolver.js +140 -0
- package/src/util/Enums.js +13 -0
- package/src/util/Events.js +160 -0
- package/src/util/Formatters.js +413 -0
- package/src/util/GuildMemberFlagsBitField.js +41 -0
- package/src/util/IntentsBitField.js +34 -0
- package/src/util/LimitedCollection.js +68 -0
- package/src/util/MessageFlagsBitField.js +32 -0
- package/src/util/Options.js +216 -0
- package/src/util/Partials.js +44 -0
- package/src/util/PermissionsBitField.js +104 -0
- package/src/util/ShardEvents.js +27 -0
- package/src/util/Status.js +33 -0
- package/src/util/Sweepers.js +467 -0
- package/src/util/SystemChannelFlagsBitField.js +43 -0
- package/src/util/ThreadMemberFlagsBitField.js +31 -0
- package/src/util/Transformers.js +36 -0
- package/src/util/UserFlagsBitField.js +32 -0
- package/src/util/Util.js +394 -0
- package/src/util/WebSocketShardEvents.js +25 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const EventEmitter = require('node:events');
|
|
4
|
+
const process = require('node:process');
|
|
5
|
+
const { setTimeout, clearTimeout } = require('node:timers');
|
|
6
|
+
const { GatewayIntentBits } = require('discord-api-types/v10');
|
|
7
|
+
const Status = require('../../util/Status');
|
|
8
|
+
const WebSocketShardEvents = require('../../util/WebSocketShardEvents');
|
|
9
|
+
|
|
10
|
+
let deprecationEmittedForImportant = false;
|
|
11
|
+
/**
|
|
12
|
+
* Represents a Shard's WebSocket connection
|
|
13
|
+
* @extends {EventEmitter}
|
|
14
|
+
*/
|
|
15
|
+
class WebSocketShard extends EventEmitter {
|
|
16
|
+
constructor(manager, id) {
|
|
17
|
+
super();
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The WebSocketManager of the shard
|
|
21
|
+
* @type {WebSocketManager}
|
|
22
|
+
*/
|
|
23
|
+
this.manager = manager;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The shard's id
|
|
27
|
+
* @type {number}
|
|
28
|
+
*/
|
|
29
|
+
this.id = id;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The current status of the shard
|
|
33
|
+
* @type {Status}
|
|
34
|
+
*/
|
|
35
|
+
this.status = Status.Idle;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The sequence of the shard after close
|
|
39
|
+
* @type {number}
|
|
40
|
+
* @private
|
|
41
|
+
*/
|
|
42
|
+
this.closeSequence = 0;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The previous heartbeat ping of the shard
|
|
46
|
+
* @type {number}
|
|
47
|
+
*/
|
|
48
|
+
this.ping = -1;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The last time a ping was sent (a timestamp)
|
|
52
|
+
* @type {number}
|
|
53
|
+
*/
|
|
54
|
+
this.lastPingTimestamp = -1;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A set of guild ids this shard expects to receive
|
|
58
|
+
* @name WebSocketShard#expectedGuilds
|
|
59
|
+
* @type {?Set<string>}
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
Object.defineProperty(this, 'expectedGuilds', { value: null, writable: true });
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The ready timeout
|
|
66
|
+
* @name WebSocketShard#readyTimeout
|
|
67
|
+
* @type {?NodeJS.Timeout}
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
Object.defineProperty(this, 'readyTimeout', { value: null, writable: true });
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @external SessionInfo
|
|
74
|
+
* @see {@link https://discord.js.org/#/docs/ws/main/typedef/SessionInfo}
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The session info used by `@discordjs/ws` package.
|
|
79
|
+
* @name WebSocketShard#sessionInfo
|
|
80
|
+
* @type {?SessionInfo}
|
|
81
|
+
* @private
|
|
82
|
+
*/
|
|
83
|
+
Object.defineProperty(this, 'sessionInfo', { value: null, writable: true });
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Emits a debug event.
|
|
88
|
+
* @param {string} message The debug message
|
|
89
|
+
* @private
|
|
90
|
+
*/
|
|
91
|
+
debug(message) {
|
|
92
|
+
this.manager.debug(message, this.id);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @external CloseEvent
|
|
97
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* This method is responsible to emit close event for this shard.
|
|
102
|
+
* This method helps the shard reconnect.
|
|
103
|
+
* @param {CloseEvent} [event] Close event that was received
|
|
104
|
+
* @deprecated
|
|
105
|
+
*/
|
|
106
|
+
emitClose(
|
|
107
|
+
event = {
|
|
108
|
+
code: 1011,
|
|
109
|
+
reason: 'INTERNAL_ERROR',
|
|
110
|
+
wasClean: false,
|
|
111
|
+
},
|
|
112
|
+
) {
|
|
113
|
+
this.debug(`[CLOSE]
|
|
114
|
+
Event Code: ${event.code}
|
|
115
|
+
Clean : ${event.wasClean}
|
|
116
|
+
Reason : ${event.reason ?? 'No reason received'}`);
|
|
117
|
+
/**
|
|
118
|
+
* Emitted when a shard's WebSocket closes.
|
|
119
|
+
* @private
|
|
120
|
+
* @event WebSocketShard#close
|
|
121
|
+
* @param {CloseEvent} event The received event
|
|
122
|
+
*/
|
|
123
|
+
this.emit(WebSocketShardEvents.Close, event);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Called when the shard receives the READY payload.
|
|
128
|
+
* @param {Object} packet The received packet
|
|
129
|
+
* @private
|
|
130
|
+
*/
|
|
131
|
+
onReadyPacket(packet) {
|
|
132
|
+
if (!packet) {
|
|
133
|
+
this.debug(`Received broken packet: '${packet}'.`);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Emitted when the shard receives the READY payload and is now waiting for guilds
|
|
139
|
+
* @event WebSocketShard#ready
|
|
140
|
+
*/
|
|
141
|
+
this.emit(WebSocketShardEvents.Ready);
|
|
142
|
+
|
|
143
|
+
this.expectedGuilds = new Set(packet.guilds.map(d => d.id));
|
|
144
|
+
this.status = Status.WaitingForGuilds;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Called when a GuildCreate or GuildDelete for this shard was sent after READY payload was received,
|
|
149
|
+
* but before we emitted the READY event.
|
|
150
|
+
* @param {Snowflake} guildId the id of the Guild sent in the payload
|
|
151
|
+
* @private
|
|
152
|
+
*/
|
|
153
|
+
gotGuild(guildId) {
|
|
154
|
+
this.expectedGuilds.delete(guildId);
|
|
155
|
+
this.checkReady();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Checks if the shard can be marked as ready
|
|
160
|
+
* @private
|
|
161
|
+
*/
|
|
162
|
+
checkReady() {
|
|
163
|
+
// Step 0. Clear the ready timeout, if it exists
|
|
164
|
+
if (this.readyTimeout) {
|
|
165
|
+
clearTimeout(this.readyTimeout);
|
|
166
|
+
this.readyTimeout = null;
|
|
167
|
+
}
|
|
168
|
+
// Step 1. If we don't have any other guilds pending, we are ready
|
|
169
|
+
if (!this.expectedGuilds.size) {
|
|
170
|
+
this.debug('Shard received all its guilds. Marking as fully ready.');
|
|
171
|
+
this.status = Status.Ready;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Emitted when the shard is fully ready.
|
|
175
|
+
* This event is emitted if:
|
|
176
|
+
* * all guilds were received by this shard
|
|
177
|
+
* * the ready timeout expired, and some guilds are unavailable
|
|
178
|
+
* @event WebSocketShard#allReady
|
|
179
|
+
* @param {?Set<string>} unavailableGuilds Set of unavailable guilds, if any
|
|
180
|
+
*/
|
|
181
|
+
this.emit(WebSocketShardEvents.AllReady);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const hasGuildsIntent = this.manager.client.options.intents.has(GatewayIntentBits.Guilds);
|
|
185
|
+
// Step 2. Create a timeout that will mark the shard as ready if there are still unavailable guilds
|
|
186
|
+
// * The timeout is 15 seconds by default
|
|
187
|
+
// * This can be optionally changed in the client options via the `waitGuildTimeout` option
|
|
188
|
+
// * a timeout time of zero will skip this timeout, which potentially could cause the Client to miss guilds.
|
|
189
|
+
|
|
190
|
+
const { waitGuildTimeout } = this.manager.client.options;
|
|
191
|
+
|
|
192
|
+
this.readyTimeout = setTimeout(
|
|
193
|
+
() => {
|
|
194
|
+
this.debug(
|
|
195
|
+
`Shard ${hasGuildsIntent ? 'did' : 'will'} not receive any more guild packets` +
|
|
196
|
+
`${hasGuildsIntent ? ` in ${waitGuildTimeout} ms` : ''}.\nUnavailable guild count: ${
|
|
197
|
+
this.expectedGuilds.size
|
|
198
|
+
}`,
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
this.readyTimeout = null;
|
|
202
|
+
this.status = Status.Ready;
|
|
203
|
+
|
|
204
|
+
this.emit(WebSocketShardEvents.AllReady, this.expectedGuilds);
|
|
205
|
+
},
|
|
206
|
+
hasGuildsIntent ? waitGuildTimeout : 0,
|
|
207
|
+
).unref();
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Adds a packet to the queue to be sent to the gateway.
|
|
212
|
+
* <warn>If you use this method, make sure you understand that you need to provide
|
|
213
|
+
* a full [Payload](https://discord.com/developers/docs/topics/gateway#commands-and-events-gateway-commands).
|
|
214
|
+
* Do not use this method if you don't know what you're doing.</warn>
|
|
215
|
+
* @param {Object} data The full packet to send
|
|
216
|
+
* @param {boolean} [important=false] If this packet should be added first in queue
|
|
217
|
+
* <warn>This parameter is **deprecated**. Important payloads are determined by their opcode instead.</warn>
|
|
218
|
+
*/
|
|
219
|
+
send(data, important = false) {
|
|
220
|
+
if (important && !deprecationEmittedForImportant) {
|
|
221
|
+
process.emitWarning(
|
|
222
|
+
'Sending important payloads explicitly is deprecated. They are determined by their opcode implicitly now.',
|
|
223
|
+
'DeprecationWarning',
|
|
224
|
+
);
|
|
225
|
+
deprecationEmittedForImportant = true;
|
|
226
|
+
}
|
|
227
|
+
this.manager._ws.send(this.id, data);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
module.exports = WebSocketShard;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Events = require('../../../util/Events');
|
|
4
|
+
|
|
5
|
+
module.exports = (client, { d: data }) => {
|
|
6
|
+
const channel = client.channels.cache.get(data.channel_id);
|
|
7
|
+
const time = data.last_pin_timestamp ? Date.parse(data.last_pin_timestamp) : null;
|
|
8
|
+
|
|
9
|
+
if (channel) {
|
|
10
|
+
// Discord sends null for last_pin_timestamp if the last pinned message was removed
|
|
11
|
+
channel.lastPinTimestamp = time;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Emitted whenever the pins of a channel are updated. Due to the nature of the WebSocket event,
|
|
15
|
+
* not much information can be provided easily here - you need to manually check the pins yourself.
|
|
16
|
+
* @event Client#channelPinsUpdate
|
|
17
|
+
* @param {TextBasedChannels} channel The channel that the pins update occurred in
|
|
18
|
+
* @param {Date} time The time of the pins update
|
|
19
|
+
*/
|
|
20
|
+
client.emit(Events.ChannelPinsUpdate, channel, time);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Events = require('../../../util/Events');
|
|
4
|
+
|
|
5
|
+
module.exports = (client, packet) => {
|
|
6
|
+
const { old, updated } = client.actions.ChannelUpdate.handle(packet.d);
|
|
7
|
+
if (old && updated) {
|
|
8
|
+
/**
|
|
9
|
+
* Emitted whenever a channel is updated - e.g. name change, topic change, channel type change.
|
|
10
|
+
* @event Client#channelUpdate
|
|
11
|
+
* @param {DMChannel|GuildChannel} oldChannel The channel before the update
|
|
12
|
+
* @param {DMChannel|GuildChannel} newChannel The channel after the update
|
|
13
|
+
*/
|
|
14
|
+
client.emit(Events.ChannelUpdate, old, updated);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Events = require('../../../util/Events');
|
|
4
|
+
const Status = require('../../../util/Status');
|
|
5
|
+
|
|
6
|
+
module.exports = (client, { d: data }, shard) => {
|
|
7
|
+
let guild = client.guilds.cache.get(data.id);
|
|
8
|
+
if (guild) {
|
|
9
|
+
if (!guild.available && !data.unavailable) {
|
|
10
|
+
// A newly available guild
|
|
11
|
+
guild._patch(data);
|
|
12
|
+
}
|
|
13
|
+
} else {
|
|
14
|
+
// A new guild
|
|
15
|
+
data.shardId = shard.id;
|
|
16
|
+
guild = client.guilds._add(data);
|
|
17
|
+
if (client.ws.status === Status.Ready) {
|
|
18
|
+
/**
|
|
19
|
+
* Emitted whenever the client joins a guild.
|
|
20
|
+
* @event Client#guildCreate
|
|
21
|
+
* @param {Guild} guild The created guild
|
|
22
|
+
*/
|
|
23
|
+
client.emit(Events.GuildCreate, guild);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const Events = require('../../../util/Events');
|
|
5
|
+
|
|
6
|
+
module.exports = (client, { d: data }) => {
|
|
7
|
+
const guild = client.guilds.cache.get(data.guild_id);
|
|
8
|
+
if (!guild) return;
|
|
9
|
+
const members = new Collection();
|
|
10
|
+
|
|
11
|
+
for (const member of data.members) members.set(member.user.id, guild.members._add(member));
|
|
12
|
+
if (data.presences) {
|
|
13
|
+
for (const presence of data.presences) guild.presences._add(Object.assign(presence, { guild }));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Represents the properties of a guild members chunk
|
|
18
|
+
* @typedef {Object} GuildMembersChunk
|
|
19
|
+
* @property {number} index Index of the received chunk
|
|
20
|
+
* @property {number} count Number of chunks the client should receive
|
|
21
|
+
* @property {Array<*>} notFound An array of whatever could not be found
|
|
22
|
+
* when using {@link GatewayOpcodes.RequestGuildMembers}
|
|
23
|
+
* @property {?string} nonce Nonce for this chunk
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Emitted whenever a chunk of guild members is received (all members come from the same guild).
|
|
28
|
+
* @event Client#guildMembersChunk
|
|
29
|
+
* @param {Collection<Snowflake, GuildMember>} members The members in the chunk
|
|
30
|
+
* @param {Guild} guild The guild related to the member chunk
|
|
31
|
+
* @param {GuildMembersChunk} chunk Properties of the received chunk
|
|
32
|
+
*/
|
|
33
|
+
client.emit(Events.GuildMembersChunk, members, guild, {
|
|
34
|
+
index: data.chunk_index,
|
|
35
|
+
count: data.chunk_count,
|
|
36
|
+
notFound: data.not_found,
|
|
37
|
+
nonce: data.nonce,
|
|
38
|
+
});
|
|
39
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Events = require('../../../util/Events');
|
|
4
|
+
const Status = require('../../../util/Status');
|
|
5
|
+
|
|
6
|
+
module.exports = (client, { d: data }, shard) => {
|
|
7
|
+
const guild = client.guilds.cache.get(data.guild_id);
|
|
8
|
+
if (guild) {
|
|
9
|
+
guild.memberCount++;
|
|
10
|
+
const member = guild.members._add(data);
|
|
11
|
+
if (shard.status === Status.Ready) {
|
|
12
|
+
/**
|
|
13
|
+
* Emitted whenever a user joins a guild.
|
|
14
|
+
* @event Client#guildMemberAdd
|
|
15
|
+
* @param {GuildMember} member The member that has joined a guild
|
|
16
|
+
*/
|
|
17
|
+
client.emit(Events.GuildMemberAdd, member);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Events = require('../../../util/Events');
|
|
4
|
+
|
|
5
|
+
module.exports = (client, packet) => {
|
|
6
|
+
const { old, updated } = client.actions.MessageUpdate.handle(packet.d);
|
|
7
|
+
if (old && updated) {
|
|
8
|
+
/**
|
|
9
|
+
* Emitted whenever a message is updated - e.g. embed or content change.
|
|
10
|
+
* @event Client#messageUpdate
|
|
11
|
+
* @param {Message} oldMessage The message before the update
|
|
12
|
+
* @param {Message} newMessage The message after the update
|
|
13
|
+
*/
|
|
14
|
+
client.emit(Events.MessageUpdate, old, updated);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ClientApplication = require('../../../structures/ClientApplication');
|
|
4
|
+
let ClientUser;
|
|
5
|
+
|
|
6
|
+
module.exports = (client, { d: data }, shard) => {
|
|
7
|
+
if (client.user) {
|
|
8
|
+
client.user._patch(data.user);
|
|
9
|
+
} else {
|
|
10
|
+
ClientUser ??= require('../../../structures/ClientUser');
|
|
11
|
+
client.user = new ClientUser(client, data.user);
|
|
12
|
+
client.users.cache.set(client.user.id, client.user);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
for (const guild of data.guilds) {
|
|
16
|
+
guild.shardId = shard.id;
|
|
17
|
+
client.guilds._add(guild);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (client.application) {
|
|
21
|
+
client.application._patch(data.application);
|
|
22
|
+
} else {
|
|
23
|
+
client.application = new ClientApplication(client, data.application);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
shard.checkReady();
|
|
27
|
+
};
|