seyfert 1.5.0 → 2.1.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 +21 -190
- package/README.md +18 -10
- package/lib/api/Router.js +2 -2
- package/lib/api/Routes/applications.d.ts +23 -1
- package/lib/api/Routes/channels.d.ts +1 -1
- package/lib/api/Routes/gateway.d.ts +1 -1
- package/lib/api/Routes/guilds.d.ts +5 -2
- package/lib/api/Routes/interactions.d.ts +8 -2
- package/lib/api/Routes/invites.d.ts +1 -1
- package/lib/api/Routes/skus.d.ts +11 -0
- package/lib/api/Routes/skus.js +2 -0
- package/lib/api/Routes/stage-instances.d.ts +1 -1
- package/lib/api/Routes/stickers.d.ts +2 -2
- package/lib/api/Routes/users.d.ts +1 -1
- package/lib/api/Routes/voice.d.ts +1 -1
- package/lib/api/Routes/webhooks.d.ts +2 -2
- package/lib/api/api.d.ts +3 -3
- package/lib/api/api.js +15 -25
- package/lib/api/bucket.d.ts +0 -1
- package/lib/api/shared.d.ts +1 -2
- package/lib/api/utils/constants.d.ts +2 -5
- package/lib/api/utils/constants.js +3 -7
- package/lib/api/utils/utils.d.ts +1 -2
- package/lib/api/utils/utils.js +2 -3
- package/lib/builders/ActionRow.d.ts +1 -1
- package/lib/builders/ActionRow.js +3 -3
- package/lib/builders/Attachment.d.ts +3 -4
- package/lib/builders/Attachment.js +24 -25
- package/lib/builders/Base.d.ts +2 -2
- package/lib/builders/Base.js +1 -1
- package/lib/builders/Button.d.ts +7 -7
- package/lib/builders/Button.js +11 -9
- package/lib/builders/Embed.d.ts +1 -1
- package/lib/builders/Modal.d.ts +1 -1
- package/lib/builders/Modal.js +2 -2
- package/lib/builders/Poll.d.ts +2 -2
- package/lib/builders/Poll.js +5 -6
- package/lib/builders/SelectMenu.d.ts +1 -1
- package/lib/builders/SelectMenu.js +17 -18
- package/lib/builders/index.d.ts +1 -1
- package/lib/builders/index.js +10 -11
- package/lib/cache/adapters/default.d.ts +16 -9
- package/lib/cache/adapters/default.js +42 -31
- package/lib/cache/adapters/index.d.ts +0 -1
- package/lib/cache/adapters/index.js +0 -1
- package/lib/cache/adapters/limited.d.ts +17 -12
- package/lib/cache/adapters/limited.js +80 -36
- package/lib/cache/adapters/types.d.ts +6 -7
- package/lib/cache/adapters/workeradapter.d.ts +6 -6
- package/lib/cache/adapters/workeradapter.js +13 -0
- package/lib/cache/index.d.ts +20 -8
- package/lib/cache/index.js +328 -22
- package/lib/cache/resources/bans.d.ts +9 -6
- package/lib/cache/resources/bans.js +13 -4
- package/lib/cache/resources/channels.d.ts +6 -4
- package/lib/cache/resources/channels.js +13 -7
- package/lib/cache/resources/default/base.d.ts +7 -7
- package/lib/cache/resources/default/base.js +2 -2
- package/lib/cache/resources/default/guild-based.d.ts +6 -6
- package/lib/cache/resources/default/guild-based.js +6 -6
- package/lib/cache/resources/default/guild-related.d.ts +7 -7
- package/lib/cache/resources/default/guild-related.js +10 -8
- package/lib/cache/resources/emojis.d.ts +15 -6
- package/lib/cache/resources/emojis.js +13 -4
- package/lib/cache/resources/guilds.d.ts +9 -6
- package/lib/cache/resources/guilds.js +27 -6
- package/lib/cache/resources/members.d.ts +9 -6
- package/lib/cache/resources/members.js +22 -6
- package/lib/cache/resources/messages.d.ts +11 -7
- package/lib/cache/resources/messages.js +19 -7
- package/lib/cache/resources/overwrites.d.ts +11 -2
- package/lib/cache/resources/overwrites.js +9 -0
- package/lib/cache/resources/presence.d.ts +3 -2
- package/lib/cache/resources/roles.d.ts +9 -6
- package/lib/cache/resources/roles.js +13 -4
- package/lib/cache/resources/stage-instances.d.ts +2 -2
- package/lib/cache/resources/stickers.d.ts +9 -6
- package/lib/cache/resources/stickers.js +13 -4
- package/lib/cache/resources/threads.d.ts +9 -6
- package/lib/cache/resources/threads.js +13 -4
- package/lib/cache/resources/users.d.ts +9 -6
- package/lib/cache/resources/users.js +13 -4
- package/lib/cache/resources/voice-states.d.ts +11 -8
- package/lib/cache/resources/voice-states.js +15 -4
- package/lib/client/base.d.ts +29 -21
- package/lib/client/base.js +64 -57
- package/lib/client/client.d.ts +11 -16
- package/lib/client/client.js +51 -37
- package/lib/client/collectors.d.ts +10 -10
- package/lib/client/collectors.js +26 -1
- package/lib/client/httpclient.d.ts +8 -13
- package/lib/client/httpclient.js +27 -218
- package/lib/client/index.d.ts +1 -0
- package/lib/client/index.js +1 -0
- package/lib/client/transformers.d.ts +68 -0
- package/lib/client/transformers.js +99 -0
- package/lib/client/types.d.ts +5 -0
- package/lib/client/types.js +2 -0
- package/lib/client/workerclient.d.ts +16 -15
- package/lib/client/workerclient.js +130 -72
- package/lib/commands/applications/chat.d.ts +35 -34
- package/lib/commands/applications/chat.js +5 -9
- package/lib/commands/applications/chatcontext.d.ts +17 -17
- package/lib/commands/applications/chatcontext.js +5 -5
- package/lib/commands/applications/entryPoint.d.ts +46 -0
- package/lib/commands/applications/entryPoint.js +56 -0
- package/lib/commands/applications/entrycontext.d.ts +40 -0
- package/lib/commands/applications/entrycontext.js +85 -0
- package/lib/commands/applications/menu.d.ts +2 -3
- package/lib/commands/applications/menu.js +2 -5
- package/lib/commands/applications/menucontext.d.ts +14 -13
- package/lib/commands/applications/menucontext.js +9 -9
- package/lib/commands/applications/options.d.ts +4 -3
- package/lib/commands/applications/options.js +20 -21
- package/lib/commands/applications/shared.d.ts +3 -1
- package/lib/commands/decorators.d.ts +47 -35
- package/lib/commands/decorators.js +20 -18
- package/lib/commands/handle.d.ts +65 -0
- package/lib/commands/handle.js +727 -0
- package/lib/commands/handler.d.ts +29 -18
- package/lib/commands/handler.js +295 -164
- package/lib/commands/index.d.ts +2 -0
- package/lib/commands/index.js +2 -0
- package/lib/commands/optionresolver.d.ts +13 -13
- package/lib/commands/optionresolver.js +24 -29
- package/lib/common/bot/watcher.d.ts +4 -33
- package/lib/common/bot/watcher.js +0 -109
- package/lib/common/index.d.ts +1 -0
- package/lib/common/index.js +1 -0
- package/lib/common/it/colors.js +48 -49
- package/lib/common/it/formatter.d.ts +32 -0
- package/lib/common/it/formatter.js +42 -0
- package/lib/common/it/logger.d.ts +0 -1
- package/lib/common/it/logger.js +3 -3
- package/lib/common/it/utils.d.ts +24 -4
- package/lib/common/it/utils.js +88 -17
- package/lib/common/shorters/application.d.ts +56 -0
- package/lib/common/shorters/application.js +81 -0
- package/lib/common/shorters/bans.d.ts +4 -5
- package/lib/common/shorters/bans.js +3 -3
- package/lib/common/shorters/channels.d.ts +7 -6
- package/lib/common/shorters/channels.js +19 -15
- package/lib/common/shorters/emojis.d.ts +5 -6
- package/lib/common/shorters/emojis.js +5 -5
- package/lib/common/shorters/guilds.d.ts +18 -16
- package/lib/common/shorters/guilds.js +31 -26
- package/lib/common/shorters/interaction.d.ts +7 -7
- package/lib/common/shorters/interaction.js +3 -2
- package/lib/common/shorters/members.d.ts +29 -12
- package/lib/common/shorters/members.js +55 -16
- package/lib/common/shorters/messages.d.ts +7 -8
- package/lib/common/shorters/messages.js +8 -7
- package/lib/common/shorters/reactions.d.ts +3 -3
- package/lib/common/shorters/reactions.js +11 -11
- package/lib/common/shorters/roles.d.ts +9 -7
- package/lib/common/shorters/roles.js +26 -7
- package/lib/common/shorters/templates.d.ts +7 -8
- package/lib/common/shorters/templates.js +7 -7
- package/lib/common/shorters/threads.d.ts +6 -7
- package/lib/common/shorters/threads.js +6 -9
- package/lib/common/shorters/users.d.ts +4 -4
- package/lib/common/shorters/users.js +8 -4
- package/lib/common/shorters/webhook.d.ts +10 -10
- package/lib/common/shorters/webhook.js +10 -9
- package/lib/common/types/resolvables.d.ts +2 -2
- package/lib/common/types/util.d.ts +4 -2
- package/lib/common/types/write.d.ts +3 -3
- package/lib/components/ActionRow.d.ts +1 -1
- package/lib/components/BaseComponent.d.ts +1 -1
- package/lib/components/BaseComponent.js +1 -1
- package/lib/components/BaseSelectMenuComponent.d.ts +1 -1
- package/lib/components/ButtonComponent.d.ts +17 -7
- package/lib/components/ButtonComponent.js +19 -2
- package/lib/components/ChannelSelectMenuComponent.d.ts +3 -3
- package/lib/components/MentionableSelectMenuComponent.d.ts +2 -2
- package/lib/components/RoleSelectMenuComponent.d.ts +2 -2
- package/lib/components/StringSelectMenuComponent.d.ts +2 -2
- package/lib/components/TextInputComponent.d.ts +2 -2
- package/lib/components/UserSelectMenuComponent.d.ts +2 -2
- package/lib/components/componentcommand.js +2 -2
- package/lib/components/componentcontext.d.ts +10 -9
- package/lib/components/componentcontext.js +8 -8
- package/lib/components/handler.d.ts +15 -14
- package/lib/components/handler.js +89 -93
- package/lib/components/index.d.ts +3 -3
- package/lib/components/index.js +12 -10
- package/lib/components/modalcontext.d.ts +12 -11
- package/lib/components/modalcontext.js +2 -2
- package/lib/deps/mixer.d.ts +8 -0
- package/lib/deps/mixer.js +71 -0
- package/lib/events/handler.d.ts +35 -13
- package/lib/events/handler.js +57 -24
- package/lib/events/hooks/application_command.d.ts +2 -2
- package/lib/events/hooks/auto_moderation.d.ts +6 -7
- package/lib/events/hooks/auto_moderation.js +4 -4
- package/lib/events/hooks/channel.d.ts +2 -2
- package/lib/events/hooks/channel.js +4 -7
- package/lib/events/hooks/custom.d.ts +4 -3
- package/lib/events/hooks/custom.js +5 -1
- package/lib/events/hooks/dispatch.d.ts +3 -4
- package/lib/events/hooks/dispatch.js +2 -2
- package/lib/events/hooks/entitlement.d.ts +5 -37
- package/lib/events/hooks/entitlement.js +7 -7
- package/lib/events/hooks/guild.d.ts +125 -125
- package/lib/events/hooks/guild.js +13 -15
- package/lib/events/hooks/integration.d.ts +27 -28
- package/lib/events/hooks/integration.js +3 -3
- package/lib/events/hooks/interactions.d.ts +2 -2
- package/lib/events/hooks/invite.d.ts +18 -17
- package/lib/events/hooks/message.d.ts +69 -54
- package/lib/events/hooks/message.js +4 -8
- package/lib/events/hooks/presence.d.ts +17 -16
- package/lib/events/hooks/stage.d.ts +4 -4
- package/lib/events/hooks/subscriptions.d.ts +35 -0
- package/lib/events/hooks/subscriptions.js +16 -0
- package/lib/events/hooks/thread.d.ts +132 -63
- package/lib/events/hooks/thread.js +4 -4
- package/lib/events/hooks/typing.d.ts +28 -6
- package/lib/events/hooks/typing.js +2 -2
- package/lib/events/hooks/user.d.ts +3 -3
- package/lib/events/hooks/user.js +2 -2
- package/lib/events/hooks/voice.d.ts +28 -3
- package/lib/events/hooks/voice.js +8 -4
- package/lib/events/hooks/webhook.d.ts +1 -1
- package/lib/index.d.ts +5 -14
- package/lib/index.js +7 -12
- package/lib/langs/handler.d.ts +14 -10
- package/lib/langs/handler.js +40 -9
- package/lib/structures/AutoModerationRule.d.ts +4 -4
- package/lib/structures/AutoModerationRule.js +1 -2
- package/lib/structures/ClientUser.d.ts +1 -1
- package/lib/structures/Entitlement.d.ts +10 -0
- package/lib/structures/Entitlement.js +16 -0
- package/lib/structures/Guild.d.ts +33 -34
- package/lib/structures/Guild.js +5 -2
- package/lib/structures/GuildBan.d.ts +6 -6
- package/lib/structures/GuildBan.js +2 -1
- package/lib/structures/GuildEmoji.d.ts +4 -4
- package/lib/structures/GuildEmoji.js +3 -2
- package/lib/structures/GuildMember.d.ts +20 -17
- package/lib/structures/GuildMember.js +18 -8
- package/lib/structures/GuildPreview.d.ts +1 -1
- package/lib/structures/GuildRole.d.ts +5 -3
- package/lib/structures/GuildRole.js +8 -1
- package/lib/structures/GuildTemplate.d.ts +2 -2
- package/lib/structures/GuildTemplate.js +1 -1
- package/lib/structures/Interaction.d.ts +76 -39
- package/lib/structures/Interaction.js +179 -94
- package/lib/structures/Message.d.ts +29 -33
- package/lib/structures/Message.js +8 -12
- package/lib/structures/Poll.d.ts +4 -3
- package/lib/structures/Poll.js +6 -2
- package/lib/structures/Sticker.d.ts +7 -7
- package/lib/structures/Sticker.js +7 -7
- package/lib/structures/User.d.ts +5 -4
- package/lib/structures/User.js +2 -1
- package/lib/structures/VoiceState.d.ts +15 -11
- package/lib/structures/VoiceState.js +35 -17
- package/lib/structures/Webhook.d.ts +6 -7
- package/lib/structures/Webhook.js +6 -7
- package/lib/structures/channels.d.ts +11 -10
- package/lib/structures/channels.js +70 -65
- package/lib/structures/extra/BaseGuild.d.ts +12 -2
- package/lib/structures/extra/BaseGuild.js +30 -3
- package/lib/structures/extra/BitField.d.ts +1 -1
- package/lib/structures/extra/BitField.js +3 -2
- package/lib/structures/extra/DiscordBase.js +2 -2
- package/lib/structures/extra/Permissions.d.ts +3 -1
- package/lib/structures/extra/Permissions.js +8 -3
- package/lib/types/gateway.d.ts +1554 -0
- package/lib/types/gateway.js +4 -0
- package/lib/types/index.d.ts +9 -1
- package/lib/types/index.js +28 -1
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/attachment.d.ts +5 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/attachment.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/base.d.ts +22 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/base.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/boolean.d.ts +4 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/boolean.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/channel.d.ts +7 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/channel.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/integer.d.ts +17 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/integer.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/mentionable.d.ts +5 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/mentionable.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/number.d.ts +17 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/number.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/role.d.ts +5 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/role.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/shared.d.ts +25 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/shared.js +20 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/string.d.ts +17 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/string.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/subcommand.d.ts +11 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/subcommand.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/subcommandGroup.d.ts +11 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/subcommandGroup.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/user.d.ts +5 -0
- package/lib/types/payloads/_interactions/_applicationCommands/_chatInput/user.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/chatInput.d.ts +65 -0
- package/lib/types/payloads/_interactions/_applicationCommands/chatInput.js +29 -0
- package/lib/types/payloads/_interactions/_applicationCommands/contextMenu.d.ts +65 -0
- package/lib/types/payloads/_interactions/_applicationCommands/contextMenu.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/internals.d.ts +8 -0
- package/lib/types/payloads/_interactions/_applicationCommands/internals.js +2 -0
- package/lib/types/payloads/_interactions/_applicationCommands/permissions.d.ts +54 -0
- package/lib/types/payloads/_interactions/_applicationCommands/permissions.js +20 -0
- package/lib/types/payloads/_interactions/applicationCommands.d.ts +188 -0
- package/lib/types/payloads/_interactions/applicationCommands.js +88 -0
- package/lib/types/payloads/_interactions/autocomplete.d.ts +10 -0
- package/lib/types/payloads/_interactions/autocomplete.js +2 -0
- package/lib/types/payloads/_interactions/base.d.ts +197 -0
- package/lib/types/payloads/_interactions/base.js +2 -0
- package/lib/types/payloads/_interactions/messageComponents.d.ts +41 -0
- package/lib/types/payloads/_interactions/messageComponents.js +2 -0
- package/lib/types/payloads/_interactions/modalSubmit.d.ts +35 -0
- package/lib/types/payloads/_interactions/modalSubmit.js +2 -0
- package/lib/types/payloads/_interactions/ping.d.ts +3 -0
- package/lib/types/payloads/_interactions/ping.js +2 -0
- package/lib/types/payloads/_interactions/responses.d.ts +184 -0
- package/lib/types/payloads/_interactions/responses.js +58 -0
- package/lib/types/payloads/application.d.ts +292 -0
- package/lib/types/payloads/application.js +117 -0
- package/lib/types/payloads/auditLog.d.ts +644 -0
- package/lib/types/payloads/auditLog.js +80 -0
- package/lib/types/payloads/autoModeration.d.ts +219 -0
- package/lib/types/payloads/autoModeration.js +87 -0
- package/lib/types/payloads/channel.d.ts +1748 -0
- package/lib/types/payloads/channel.js +376 -0
- package/lib/types/payloads/emoji.d.ts +48 -0
- package/lib/types/payloads/emoji.js +5 -0
- package/lib/types/payloads/gateway.d.ts +373 -0
- package/lib/types/payloads/gateway.js +82 -0
- package/lib/types/payloads/guild.d.ts +1060 -0
- package/lib/types/payloads/guild.js +324 -0
- package/lib/types/payloads/guildScheduledEvent.d.ts +138 -0
- package/lib/types/payloads/guildScheduledEvent.js +32 -0
- package/lib/types/payloads/index.d.ts +64 -0
- package/lib/types/payloads/index.js +37 -0
- package/lib/types/payloads/interactions.d.ts +24 -0
- package/lib/types/payloads/interactions.js +23 -0
- package/lib/types/payloads/invite.d.ts +121 -0
- package/lib/types/payloads/invite.js +23 -0
- package/lib/types/payloads/monetization.d.ts +178 -0
- package/lib/types/payloads/monetization.js +88 -0
- package/lib/types/payloads/oauth2.d.ts +131 -0
- package/lib/types/payloads/oauth2.js +135 -0
- package/lib/types/payloads/permissions.d.ts +97 -0
- package/lib/types/payloads/permissions.js +16 -0
- package/lib/types/payloads/poll.d.ts +104 -0
- package/lib/types/payloads/poll.js +16 -0
- package/lib/types/payloads/stageInstance.d.ts +77 -0
- package/lib/types/payloads/stageInstance.js +19 -0
- package/lib/types/payloads/sticker.d.ts +123 -0
- package/lib/types/payloads/sticker.js +30 -0
- package/lib/types/payloads/teams.d.ts +78 -0
- package/lib/types/payloads/teams.js +23 -0
- package/lib/types/payloads/template.d.ts +62 -0
- package/lib/types/payloads/template.js +5 -0
- package/lib/types/payloads/user.d.ts +337 -0
- package/lib/types/payloads/user.js +167 -0
- package/lib/types/payloads/voice.d.ts +89 -0
- package/lib/types/payloads/voice.js +5 -0
- package/lib/types/payloads/webhook.d.ts +76 -0
- package/lib/types/payloads/webhook.js +21 -0
- package/lib/types/rest/application.d.ts +57 -0
- package/lib/types/rest/application.js +2 -0
- package/lib/types/rest/auditLog.d.ts +30 -0
- package/lib/types/rest/auditLog.js +2 -0
- package/lib/types/rest/autoModeration.d.ts +66 -0
- package/lib/types/rest/autoModeration.js +2 -0
- package/lib/types/rest/channel.d.ts +699 -0
- package/lib/types/rest/channel.js +11 -0
- package/lib/types/rest/emoji.d.ts +54 -0
- package/lib/types/rest/emoji.js +2 -0
- package/lib/types/rest/gateway.d.ts +9 -0
- package/lib/types/rest/gateway.js +2 -0
- package/lib/types/rest/guild.d.ts +865 -0
- package/lib/types/rest/guild.js +2 -0
- package/lib/types/rest/guildScheduledEvent.d.ts +126 -0
- package/lib/types/rest/guildScheduledEvent.js +2 -0
- package/lib/types/rest/index.d.ts +296 -0
- package/lib/types/rest/index.js +292 -0
- package/lib/types/rest/interactions.d.ts +216 -0
- package/lib/types/rest/interactions.js +2 -0
- package/lib/types/rest/invite.d.ts +24 -0
- package/lib/types/rest/invite.js +2 -0
- package/lib/types/rest/monetization.d.ts +103 -0
- package/lib/types/rest/monetization.js +11 -0
- package/lib/types/rest/oauth2.d.ts +172 -0
- package/lib/types/rest/oauth2.js +2 -0
- package/lib/types/rest/poll.d.ts +44 -0
- package/lib/types/rest/poll.js +2 -0
- package/lib/types/rest/stageInstance.d.ts +58 -0
- package/lib/types/rest/stageInstance.js +2 -0
- package/lib/types/rest/sticker.d.ts +77 -0
- package/lib/types/rest/sticker.js +2 -0
- package/lib/types/rest/template.d.ts +62 -0
- package/lib/types/rest/template.js +2 -0
- package/lib/types/rest/user.d.ts +120 -0
- package/lib/types/rest/user.js +2 -0
- package/lib/types/rest/voice.d.ts +17 -0
- package/lib/types/rest/voice.js +2 -0
- package/lib/types/rest/webhook.d.ts +250 -0
- package/lib/types/rest/webhook.js +2 -0
- package/lib/types/utils/index.d.ts +808 -0
- package/lib/types/utils/index.js +810 -0
- package/lib/websocket/SharedTypes.d.ts +12 -5
- package/lib/websocket/SharedTypes.js +1 -1
- package/lib/websocket/constants/index.d.ts +3 -3
- package/lib/websocket/constants/index.js +11 -1
- package/lib/websocket/discord/basesocket.d.ts +7 -7
- package/lib/websocket/discord/basesocket.js +34 -22
- package/lib/websocket/discord/events/memberUpdate.d.ts +1 -6
- package/lib/websocket/discord/events/memberUpdate.js +2 -1
- package/lib/websocket/discord/events/presenceUpdate.d.ts +5 -18
- package/lib/websocket/discord/events/presenceUpdate.js +5 -6
- package/lib/websocket/discord/shard.d.ts +9 -8
- package/lib/websocket/discord/shard.js +83 -57
- package/lib/websocket/discord/sharder.d.ts +6 -5
- package/lib/websocket/discord/sharder.js +70 -11
- package/lib/websocket/discord/shared.d.ts +34 -6
- package/lib/websocket/discord/socket/custom.d.ts +52 -0
- package/lib/websocket/discord/socket/custom.js +300 -0
- package/lib/websocket/discord/worker.d.ts +6 -10
- package/lib/websocket/discord/workermanager.d.ts +10 -16
- package/lib/websocket/discord/workermanager.js +63 -50
- package/lib/websocket/structures/index.d.ts +0 -1
- package/lib/websocket/structures/index.js +1 -1
- package/lib/websocket/structures/timeout.d.ts +0 -1
- package/package.json +70 -74
- package/lib/cache/adapters/redis.d.ts +0 -37
- package/lib/cache/adapters/redis.js +0 -218
- package/lib/client/oninteractioncreate.d.ts +0 -4
- package/lib/client/oninteractioncreate.js +0 -198
- package/lib/client/onmessagecreate.d.ts +0 -13
- package/lib/client/onmessagecreate.js +0 -410
- package/lib/structures/extra/functions.d.ts +0 -12
- package/lib/structures/extra/functions.js +0 -70
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ShardManager = void 0;
|
|
4
|
-
const v10_1 = require("discord-api-types/v10");
|
|
5
4
|
const common_1 = require("../../common");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
6
|
const constants_1 = require("../constants");
|
|
7
7
|
const structures_1 = require("../structures");
|
|
8
8
|
const timeout_1 = require("../structures/timeout");
|
|
9
|
-
const
|
|
9
|
+
const shard_1 = require("./shard");
|
|
10
10
|
let parentPort;
|
|
11
11
|
let workerData;
|
|
12
12
|
class ShardManager extends Map {
|
|
@@ -15,8 +15,9 @@ class ShardManager extends Map {
|
|
|
15
15
|
debugger;
|
|
16
16
|
constructor(options) {
|
|
17
17
|
super();
|
|
18
|
-
options
|
|
19
|
-
|
|
18
|
+
this.options = (0, common_1.MergeOptions)(constants_1.ShardManagerDefaults, {
|
|
19
|
+
totalShards: options.info.shards,
|
|
20
|
+
}, options);
|
|
20
21
|
this.connectQueue = new timeout_1.ConnectQueue(5.5e3, this.concurrency);
|
|
21
22
|
if (this.options.debug) {
|
|
22
23
|
this.debugger = new common_1.Logger({
|
|
@@ -30,6 +31,64 @@ class ShardManager extends Map {
|
|
|
30
31
|
if (worker_threads.parentPort)
|
|
31
32
|
parentPort = worker_threads.parentPort;
|
|
32
33
|
}
|
|
34
|
+
if (this.options.resharding.interval <= 0)
|
|
35
|
+
return;
|
|
36
|
+
setInterval(async () => {
|
|
37
|
+
this.debugger?.debug('Checking if reshard is needed');
|
|
38
|
+
const info = await this.options.resharding.getInfo();
|
|
39
|
+
if (info.shards <= this.totalShards)
|
|
40
|
+
return this.debugger?.debug('Resharding not needed');
|
|
41
|
+
//https://github.com/discordeno/discordeno/blob/6a5f446c0651b9fad9f1550ff1857fe7a026426b/packages/gateway/src/manager.ts#L106C8-L106C94
|
|
42
|
+
const percentage = (info.shards / ((this.totalShards * 2500) / 1000)) * 100;
|
|
43
|
+
if (percentage < this.options.resharding.percentage)
|
|
44
|
+
return this.debugger?.debug(`Percentage is not enough to reshard ${percentage}/${this.options.resharding.percentage}`);
|
|
45
|
+
this.debugger?.info('Starting resharding process');
|
|
46
|
+
this.connectQueue.concurrency = info.session_start_limit.max_concurrency;
|
|
47
|
+
this.options.totalShards = info.shards;
|
|
48
|
+
this.options.info.session_start_limit.max_concurrency = info.session_start_limit.max_concurrency;
|
|
49
|
+
let shardsConnected = 0;
|
|
50
|
+
let handlePayload = async (sharder, _, packet) => {
|
|
51
|
+
if ((packet.t === 'GUILD_CREATE' || packet.t === 'GUILD_DELETE') &&
|
|
52
|
+
this.options.resharding.onGuild(packet.d.id)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (packet.t !== 'READY')
|
|
56
|
+
return;
|
|
57
|
+
this.options.resharding.reloadGuilds(packet.d.guilds.map(x => x.id));
|
|
58
|
+
if (++shardsConnected < info.shards)
|
|
59
|
+
return; //waiting for last shard to connect
|
|
60
|
+
// dont listen more events when all shards are ready
|
|
61
|
+
handlePayload = async () => { };
|
|
62
|
+
await this.disconnectAll();
|
|
63
|
+
this.clear();
|
|
64
|
+
for (const [id, shard] of sharder) {
|
|
65
|
+
shard.options.handlePayload = (shardId, packet) => {
|
|
66
|
+
return this.options.handlePayload(shardId, packet);
|
|
67
|
+
};
|
|
68
|
+
this.set(id, shard);
|
|
69
|
+
}
|
|
70
|
+
sharder.clear();
|
|
71
|
+
};
|
|
72
|
+
const resharder = new ShardManager({
|
|
73
|
+
...this.options,
|
|
74
|
+
resharding: {
|
|
75
|
+
// getInfo mock, we don't need it
|
|
76
|
+
getInfo: () => ({}),
|
|
77
|
+
interval: 0,
|
|
78
|
+
percentage: 0,
|
|
79
|
+
reloadGuilds() { },
|
|
80
|
+
onGuild() {
|
|
81
|
+
return true;
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
handlePayload: (shardId, packet) => {
|
|
85
|
+
return handlePayload(resharder, shardId, packet);
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
// share ratelimit
|
|
89
|
+
resharder.connectQueue = this.connectQueue;
|
|
90
|
+
await resharder.spawnShards();
|
|
91
|
+
}, this.options.resharding.interval);
|
|
33
92
|
}
|
|
34
93
|
get totalShards() {
|
|
35
94
|
return this.options.totalShards ?? this.options.info.shards;
|
|
@@ -52,19 +111,19 @@ class ShardManager extends Map {
|
|
|
52
111
|
return acc / this.size;
|
|
53
112
|
}
|
|
54
113
|
calculateShardId(guildId) {
|
|
55
|
-
return
|
|
114
|
+
return (0, common_1.calculateShardId)(guildId, this.totalShards);
|
|
56
115
|
}
|
|
57
116
|
spawn(shardId) {
|
|
58
117
|
this.debugger?.info(`Spawn shard ${shardId}`);
|
|
59
118
|
let shard = this.get(shardId);
|
|
60
|
-
shard ??= new
|
|
119
|
+
shard ??= new shard_1.Shard(shardId, {
|
|
61
120
|
token: this.options.token,
|
|
62
121
|
intents: this.options.intents,
|
|
63
122
|
info: { ...this.options.info, shards: this.totalShards },
|
|
64
123
|
handlePayload: this.options.handlePayload,
|
|
65
124
|
properties: this.options.properties,
|
|
66
125
|
debugger: this.debugger,
|
|
67
|
-
compress: false,
|
|
126
|
+
compress: this.options.compress ?? false,
|
|
68
127
|
presence: this.options.presence?.(shardId, -1),
|
|
69
128
|
});
|
|
70
129
|
this.set(shardId, shard);
|
|
@@ -117,7 +176,7 @@ class ShardManager extends Map {
|
|
|
117
176
|
setShardPresence(shardId, payload) {
|
|
118
177
|
this.debugger?.info(`Shard #${shardId} update presence`);
|
|
119
178
|
return this.send(shardId, {
|
|
120
|
-
op:
|
|
179
|
+
op: types_1.GatewayOpcodes.PresenceUpdate,
|
|
121
180
|
d: payload,
|
|
122
181
|
});
|
|
123
182
|
}
|
|
@@ -133,11 +192,11 @@ class ShardManager extends Map {
|
|
|
133
192
|
const shardId = this.calculateShardId(guild_id);
|
|
134
193
|
this.debugger?.info(`Shard #${shardId} join voice ${channel_id} in ${guild_id}`);
|
|
135
194
|
return this.send(shardId, {
|
|
136
|
-
op:
|
|
195
|
+
op: types_1.GatewayOpcodes.VoiceStateUpdate,
|
|
137
196
|
d: {
|
|
138
197
|
guild_id,
|
|
139
198
|
channel_id,
|
|
140
|
-
...
|
|
199
|
+
...options,
|
|
141
200
|
},
|
|
142
201
|
});
|
|
143
202
|
}
|
|
@@ -145,7 +204,7 @@ class ShardManager extends Map {
|
|
|
145
204
|
const shardId = this.calculateShardId(guild_id);
|
|
146
205
|
this.debugger?.info(`Shard #${shardId} leave voice in ${guild_id}`);
|
|
147
206
|
return this.send(shardId, {
|
|
148
|
-
op:
|
|
207
|
+
op: types_1.GatewayOpcodes.VoiceStateUpdate,
|
|
149
208
|
d: {
|
|
150
209
|
guild_id,
|
|
151
210
|
channel_id: null,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { APIGatewayBotInfo, GatewayDispatchPayload, GatewayIntentBits, GatewayPresenceUpdateData } from '
|
|
2
|
-
import type { Logger } from '../../common';
|
|
1
|
+
import type { APIGatewayBotInfo, GatewayDispatchPayload, GatewayIntentBits, GatewayPresenceUpdateData } from '../../types';
|
|
2
|
+
import type { Awaitable, DeepPartial, Logger } from '../../common';
|
|
3
3
|
import type { IdentifyProperties } from '../constants';
|
|
4
4
|
export interface ShardManagerOptions extends ShardDetails {
|
|
5
5
|
/** Important data which is used by the manager to connect shards to the gateway. */
|
|
@@ -29,21 +29,47 @@ export interface ShardManagerOptions extends ShardDetails {
|
|
|
29
29
|
*/
|
|
30
30
|
presence?: (shardId: number, workerId: number) => GatewayPresenceUpdateData;
|
|
31
31
|
compress?: boolean;
|
|
32
|
+
resharding?: {
|
|
33
|
+
/**
|
|
34
|
+
* @returns the gateway connection info
|
|
35
|
+
*/
|
|
36
|
+
getInfo(): Promise<APIGatewayBotInfo>;
|
|
37
|
+
interval: number;
|
|
38
|
+
percentage: number;
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* @param ids
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
reloadGuilds: (ids: string[]) => unknown;
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* @param id
|
|
48
|
+
* @returns true if deleted
|
|
49
|
+
*/
|
|
50
|
+
onGuild: (id: string) => boolean;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export interface CustomManagerAdapter {
|
|
54
|
+
postMessage(workerId: number, body: unknown): Awaitable<unknown>;
|
|
55
|
+
spawn(workerData: WorkerData, env: Record<string, any>): Awaitable<unknown>;
|
|
32
56
|
}
|
|
33
|
-
export interface WorkerManagerOptions extends Omit<ShardManagerOptions, 'handlePayload'> {
|
|
34
|
-
mode: 'threads' | 'clusters';
|
|
57
|
+
export interface WorkerManagerOptions extends Omit<ShardManagerOptions, 'handlePayload' | 'properties'> {
|
|
58
|
+
mode: 'threads' | 'clusters' | 'custom';
|
|
59
|
+
adapter?: CustomManagerAdapter;
|
|
35
60
|
workers?: number;
|
|
36
61
|
/**
|
|
37
|
-
* @default
|
|
62
|
+
* @default 16
|
|
38
63
|
*/
|
|
39
64
|
shardsPerWorker?: number;
|
|
40
65
|
workerProxy?: boolean;
|
|
41
66
|
path: string;
|
|
42
67
|
handlePayload(shardId: number, workerId: number, packet: GatewayDispatchPayload): unknown;
|
|
68
|
+
properties?: DeepPartial<NonNullable<ShardManagerOptions['properties']>>;
|
|
43
69
|
}
|
|
44
70
|
export interface ShardData {
|
|
45
71
|
/** resume seq to resume connections */
|
|
46
|
-
|
|
72
|
+
resume_seq: number | null;
|
|
47
73
|
/**
|
|
48
74
|
* resume_gateway_url is the url to resume the connection
|
|
49
75
|
* @link https://discord.com/developers/docs/topics/gateway#ready-event
|
|
@@ -97,6 +123,8 @@ export interface WorkerData {
|
|
|
97
123
|
token: string;
|
|
98
124
|
path: string;
|
|
99
125
|
shards: number[];
|
|
126
|
+
totalShards: number;
|
|
127
|
+
mode: 'custom' | 'clusters' | 'threads';
|
|
100
128
|
workerId: number;
|
|
101
129
|
debug: boolean;
|
|
102
130
|
workerProxy: boolean;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Socket } from 'node:net';
|
|
2
|
+
export declare class SeyfertWebSocket {
|
|
3
|
+
#private;
|
|
4
|
+
socket?: Socket;
|
|
5
|
+
hostname: string;
|
|
6
|
+
path: string;
|
|
7
|
+
__stored: Buffer[];
|
|
8
|
+
__opcode: number;
|
|
9
|
+
__promises: Map<string, {
|
|
10
|
+
resolve: () => void;
|
|
11
|
+
reject: (reason?: any) => void;
|
|
12
|
+
}>;
|
|
13
|
+
__lastError: null | {
|
|
14
|
+
code: number;
|
|
15
|
+
reason: string;
|
|
16
|
+
};
|
|
17
|
+
__closeCalled?: boolean;
|
|
18
|
+
constructor(url: string);
|
|
19
|
+
private connect;
|
|
20
|
+
handleReadable(): void;
|
|
21
|
+
handleEvent(body: Buffer, opcode: number): void;
|
|
22
|
+
handleClose(): Promise<void>;
|
|
23
|
+
send(data: string): void;
|
|
24
|
+
private _write;
|
|
25
|
+
onping(_data: string): void;
|
|
26
|
+
onpong(_data: string): void;
|
|
27
|
+
onopen(): void;
|
|
28
|
+
onmessage(_payload: {
|
|
29
|
+
data: string | Buffer;
|
|
30
|
+
}): void;
|
|
31
|
+
onclose(_close: {
|
|
32
|
+
code: number;
|
|
33
|
+
reason: string;
|
|
34
|
+
}): void;
|
|
35
|
+
onerror(_err: unknown): void;
|
|
36
|
+
close(code: number, reason: string): void;
|
|
37
|
+
pong(data: string): void;
|
|
38
|
+
ping(data: string): void;
|
|
39
|
+
waitPing(): Promise<number>;
|
|
40
|
+
get readyState(): number;
|
|
41
|
+
/**
|
|
42
|
+
*
|
|
43
|
+
* @param start Start calculating bytes from `start`
|
|
44
|
+
* @param bits Num of bits since `start`
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
private readBytes;
|
|
48
|
+
}
|
|
49
|
+
export type ReadableHeadData = {
|
|
50
|
+
next?: ReadableHeadData;
|
|
51
|
+
data: Buffer;
|
|
52
|
+
};
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SeyfertWebSocket = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const node_https_1 = require("node:https");
|
|
6
|
+
class SeyfertWebSocket {
|
|
7
|
+
socket = undefined;
|
|
8
|
+
hostname;
|
|
9
|
+
path;
|
|
10
|
+
__stored = [];
|
|
11
|
+
__opcode = 0;
|
|
12
|
+
__promises = new Map();
|
|
13
|
+
__lastError = null;
|
|
14
|
+
__closeCalled;
|
|
15
|
+
constructor(url) {
|
|
16
|
+
const urlParts = new URL(url);
|
|
17
|
+
this.hostname = urlParts.hostname || '';
|
|
18
|
+
this.path = `${urlParts.pathname}${urlParts.search || ''}`;
|
|
19
|
+
this.connect();
|
|
20
|
+
}
|
|
21
|
+
connect(retries = 0) {
|
|
22
|
+
return new Promise((resolve, rej) => {
|
|
23
|
+
const key = (0, node_crypto_1.randomBytes)(16).toString('base64');
|
|
24
|
+
const req = (0, node_https_1.request)({
|
|
25
|
+
//discord gateway hostname
|
|
26
|
+
hostname: this.hostname,
|
|
27
|
+
path: this.path,
|
|
28
|
+
headers: {
|
|
29
|
+
Connection: 'Upgrade',
|
|
30
|
+
Upgrade: 'websocket',
|
|
31
|
+
'Sec-WebSocket-Key': key,
|
|
32
|
+
'Sec-WebSocket-Version': '13',
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
req.on('upgrade', (res, socket) => {
|
|
36
|
+
const hash = (0, node_crypto_1.createHash)('sha1').update(`${key}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`).digest('base64');
|
|
37
|
+
const accept = res.headers['sec-websocket-accept'];
|
|
38
|
+
if (accept !== hash) {
|
|
39
|
+
socket.end(() => {
|
|
40
|
+
rej(new Error('Invalid sec-websocket-accept header'));
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.socket = socket;
|
|
45
|
+
socket.on('readable', this.handleReadable.bind(this));
|
|
46
|
+
socket.on('close', this.handleClose.bind(this));
|
|
47
|
+
socket.on('error', err => this.onerror(err));
|
|
48
|
+
resolve();
|
|
49
|
+
this.onopen();
|
|
50
|
+
});
|
|
51
|
+
req.on('close', () => {
|
|
52
|
+
req.removeAllListeners();
|
|
53
|
+
});
|
|
54
|
+
req.on('error', e => {
|
|
55
|
+
if (retries < 5) {
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
resolve(this.connect(retries + 1));
|
|
58
|
+
}, 500);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
rej(e);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
req.end();
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
handleReadable() {
|
|
68
|
+
// Keep reading until no data, this is useful when two payloads merges.
|
|
69
|
+
while (this.socket.readableLength > 0) {
|
|
70
|
+
// Read length without consuming the buffer
|
|
71
|
+
let length = this.readBytes(1, 1) & 127;
|
|
72
|
+
const slice = length === 126 ? 4 : length === 127 ? 10 : 2;
|
|
73
|
+
// Check if frame/data is complete
|
|
74
|
+
if (this.socket.readableLength < slice)
|
|
75
|
+
return; // Wait to next cycle if not
|
|
76
|
+
if (length > 125) {
|
|
77
|
+
// https://datatracker.ietf.org/doc/html/rfc6455#section-5.2
|
|
78
|
+
// If length is 126/127, read extended payload length instead
|
|
79
|
+
// Equivalent to readUint32BE
|
|
80
|
+
length = this.readBytes(2, slice - 2);
|
|
81
|
+
}
|
|
82
|
+
const payloadLength = slice + length;
|
|
83
|
+
// Read the frame, ignore data next to it, leave it to next `while` cycle
|
|
84
|
+
const frame = this.socket.read(payloadLength);
|
|
85
|
+
// unfinished object when socket closes while reading the data
|
|
86
|
+
if (!frame || frame.length !== payloadLength)
|
|
87
|
+
return;
|
|
88
|
+
// Get fin (0 | 1)
|
|
89
|
+
const fin = frame[0] >> 7;
|
|
90
|
+
// Read opcode (continuation, text, binary, close, ping, pong)
|
|
91
|
+
let opcode = frame[0] & 15;
|
|
92
|
+
// Cut frame to get payload
|
|
93
|
+
let payload = frame.subarray(slice);
|
|
94
|
+
// If fin is 0, store the data and wait to next `while` cycle to be fin=1
|
|
95
|
+
if (fin === 0) {
|
|
96
|
+
this.__stored.push(payload);
|
|
97
|
+
// Only store opcode when is not 0 (continuation)
|
|
98
|
+
if (opcode !== 0) {
|
|
99
|
+
this.__opcode = opcode;
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// When the message is from ws fragmentation, opcode of last message is 0
|
|
104
|
+
// If so, merge all messages.
|
|
105
|
+
if (opcode === 0) {
|
|
106
|
+
this.__stored.push(payload);
|
|
107
|
+
payload = Buffer.concat(this.__stored);
|
|
108
|
+
opcode = this.__opcode;
|
|
109
|
+
// Reset body
|
|
110
|
+
this.__stored = [];
|
|
111
|
+
// Reset opcode, should set as -1?
|
|
112
|
+
this.__opcode = 0;
|
|
113
|
+
}
|
|
114
|
+
// Handle opcodes
|
|
115
|
+
this.handleEvent(payload, opcode);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
handleEvent(body, opcode) {
|
|
119
|
+
switch (opcode) {
|
|
120
|
+
// text
|
|
121
|
+
case 0x1:
|
|
122
|
+
this.onmessage({ data: body.toString() });
|
|
123
|
+
break;
|
|
124
|
+
// binary
|
|
125
|
+
case 0x2:
|
|
126
|
+
{
|
|
127
|
+
if (body[1] === 80)
|
|
128
|
+
body = body.subarray(6);
|
|
129
|
+
this.onmessage({ data: body });
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
// pong
|
|
133
|
+
case 0x9:
|
|
134
|
+
this.onping(body.toString());
|
|
135
|
+
break;
|
|
136
|
+
// ping
|
|
137
|
+
case 0xa:
|
|
138
|
+
this.onpong(body.toString());
|
|
139
|
+
break;
|
|
140
|
+
// close
|
|
141
|
+
case 0x8:
|
|
142
|
+
this.__lastError = {
|
|
143
|
+
code: body.readUInt16BE(0),
|
|
144
|
+
reason: body.subarray(2).toString(),
|
|
145
|
+
};
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async handleClose() {
|
|
150
|
+
this.socket?.removeAllListeners();
|
|
151
|
+
this.socket?.destroy();
|
|
152
|
+
this.socket = undefined;
|
|
153
|
+
if (this.__closeCalled)
|
|
154
|
+
return;
|
|
155
|
+
if (!this.__lastError)
|
|
156
|
+
return this.connect();
|
|
157
|
+
this.onclose(this.__lastError);
|
|
158
|
+
this.__lastError = null;
|
|
159
|
+
}
|
|
160
|
+
send(data) {
|
|
161
|
+
this._write(Buffer.from(data), 1);
|
|
162
|
+
}
|
|
163
|
+
_write(buffer, opcode) {
|
|
164
|
+
if (!this.socket?.writable)
|
|
165
|
+
return;
|
|
166
|
+
const length = buffer.length;
|
|
167
|
+
let frame;
|
|
168
|
+
// Kinda same logic as above, but client-side
|
|
169
|
+
if (length < 126) {
|
|
170
|
+
frame = Buffer.allocUnsafe(6 + length);
|
|
171
|
+
frame[1] = 128 + length;
|
|
172
|
+
}
|
|
173
|
+
else if (length < 65536) {
|
|
174
|
+
frame = Buffer.allocUnsafe(8 + length);
|
|
175
|
+
frame[1] = 254;
|
|
176
|
+
frame[2] = (length >> 8) & 255;
|
|
177
|
+
frame[3] = length & 255;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
frame = Buffer.allocUnsafe(14 + length);
|
|
181
|
+
frame[1] = 255;
|
|
182
|
+
frame.writeBigUint64BE(BigInt(length), 2);
|
|
183
|
+
}
|
|
184
|
+
frame[0] = 128 + opcode;
|
|
185
|
+
frame.writeUint32BE(0, frame.length - length - 4);
|
|
186
|
+
frame.set(buffer, frame.length - length);
|
|
187
|
+
this.socket?.write(frame);
|
|
188
|
+
}
|
|
189
|
+
onping(_data) { }
|
|
190
|
+
onpong(_data) { }
|
|
191
|
+
onopen() { }
|
|
192
|
+
onmessage(_payload) { }
|
|
193
|
+
onclose(_close) { }
|
|
194
|
+
onerror(_err) { }
|
|
195
|
+
close(code, reason) {
|
|
196
|
+
this.__closeCalled = true;
|
|
197
|
+
// alloc payload length
|
|
198
|
+
const buffer = Buffer.alloc(2 + Buffer.byteLength(reason));
|
|
199
|
+
// gateway close code
|
|
200
|
+
buffer.writeUInt16BE(code, 0);
|
|
201
|
+
// reason
|
|
202
|
+
buffer.write(reason, 2);
|
|
203
|
+
// message, close opcode
|
|
204
|
+
this._write(buffer, 0x8);
|
|
205
|
+
this.socket?.end();
|
|
206
|
+
}
|
|
207
|
+
pong(data) {
|
|
208
|
+
//send pong opcode (10)
|
|
209
|
+
this._write(Buffer.from(data), 0xa);
|
|
210
|
+
}
|
|
211
|
+
ping(data) {
|
|
212
|
+
//send ping opcode (9)
|
|
213
|
+
this._write(Buffer.from(data), 0x9);
|
|
214
|
+
}
|
|
215
|
+
waitPing() {
|
|
216
|
+
const id = this.#randomUUID();
|
|
217
|
+
let timeout;
|
|
218
|
+
const start = performance.now();
|
|
219
|
+
this.ping(id);
|
|
220
|
+
return new Promise((resolve, reject) => {
|
|
221
|
+
this.__promises.set(id, {
|
|
222
|
+
reject,
|
|
223
|
+
resolve,
|
|
224
|
+
});
|
|
225
|
+
timeout = setTimeout(() => {
|
|
226
|
+
resolve();
|
|
227
|
+
}, 60e3);
|
|
228
|
+
})
|
|
229
|
+
.then(() => {
|
|
230
|
+
return performance.now() - start;
|
|
231
|
+
})
|
|
232
|
+
.finally(() => {
|
|
233
|
+
clearTimeout(timeout);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
#randomUUID() {
|
|
237
|
+
const id = (0, node_crypto_1.randomUUID)();
|
|
238
|
+
if (this.__promises.has(id))
|
|
239
|
+
return this.#randomUUID();
|
|
240
|
+
return id;
|
|
241
|
+
}
|
|
242
|
+
get readyState() {
|
|
243
|
+
return ['opening', 'open', 'closed', 'closed'].indexOf(this.socket?.readyState ?? 'closed');
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
*
|
|
247
|
+
* @param start Start calculating bytes from `start`
|
|
248
|
+
* @param bits Num of bits since `start`
|
|
249
|
+
* @returns
|
|
250
|
+
*/
|
|
251
|
+
readBytes(start, bits) {
|
|
252
|
+
// @ts-expect-error this is private, thanks nodejs
|
|
253
|
+
const readable = this.socket._readableState;
|
|
254
|
+
// Num of bit read
|
|
255
|
+
let bitIndex = 0;
|
|
256
|
+
// Num of bit read counting since start
|
|
257
|
+
let read = 0;
|
|
258
|
+
// Bytes value
|
|
259
|
+
let value = 0;
|
|
260
|
+
// Node v20
|
|
261
|
+
if ('bufferIndex' in readable) {
|
|
262
|
+
// actual index of the buffer to read
|
|
263
|
+
let blockIndex = readable.bufferIndex;
|
|
264
|
+
// Buffer to read
|
|
265
|
+
let block;
|
|
266
|
+
while ((block = readable.buffer[blockIndex++])) {
|
|
267
|
+
for (let i = 0; i < block.length; i++) {
|
|
268
|
+
if (++bitIndex > start) {
|
|
269
|
+
value *= 256; // shift 8 bits (1 byte) `*= 256 is faster than <<= 8`
|
|
270
|
+
value += block[i]; // sum value to bits
|
|
271
|
+
// Read until read all bits
|
|
272
|
+
if (++read === bits) {
|
|
273
|
+
return value;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
} /* Support for olders versions*/
|
|
279
|
+
else {
|
|
280
|
+
// readable.buffer is kinda a LinkedList
|
|
281
|
+
let head = readable.buffer.head;
|
|
282
|
+
while (head) {
|
|
283
|
+
for (let i = 0; i < head.data.length; i++) {
|
|
284
|
+
if (++bitIndex > start) {
|
|
285
|
+
value *= 256; // shift 8 bits (1 byte) `*= 256 is faster than <<= 8`
|
|
286
|
+
value += head.data[i]; // sum value to bits
|
|
287
|
+
// Read until read all bits
|
|
288
|
+
if (++read === bits) {
|
|
289
|
+
return value;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// continue with next node
|
|
294
|
+
head = head.next;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return 0;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
exports.SeyfertWebSocket = SeyfertWebSocket;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { GatewayDispatchPayload } from 'discord-api-types/v10';
|
|
2
1
|
import type { ApiRequestOptions, HttpMethods } from '../..';
|
|
2
|
+
import type { GatewayDispatchPayload } from '../../types';
|
|
3
3
|
export interface WorkerShardInfo {
|
|
4
4
|
open: boolean;
|
|
5
5
|
shardId: number;
|
|
@@ -25,8 +25,8 @@ export type WorkerSendResultPayload = CreateWorkerMessage<'RESULT_PAYLOAD', {
|
|
|
25
25
|
}>;
|
|
26
26
|
export type WorkerSendCacheRequest = CreateWorkerMessage<'CACHE_REQUEST', {
|
|
27
27
|
nonce: string;
|
|
28
|
-
method: 'scan' | 'get' | 'set' | 'patch' | 'values' | 'keys' | 'count' | 'remove' | 'flush' | 'contains' | 'getToRelationship' | 'bulkAddToRelationShip' | 'addToRelationship' | 'removeRelationship' | 'removeToRelationship';
|
|
29
|
-
args:
|
|
28
|
+
method: 'scan' | 'bulkGet' | 'get' | 'bulkSet' | 'set' | 'bulkPatch' | 'patch' | 'values' | 'keys' | 'count' | 'bulkRemove' | 'remove' | 'flush' | 'contains' | 'getToRelationship' | 'bulkAddToRelationShip' | 'addToRelationship' | 'removeRelationship' | 'removeToRelationship';
|
|
29
|
+
args: unknown[];
|
|
30
30
|
}>;
|
|
31
31
|
export type WorkerSendShardInfo = CreateWorkerMessage<'SHARD_INFO', WorkerShardInfo & {
|
|
32
32
|
nonce: string;
|
|
@@ -35,6 +35,7 @@ export type WorkerSendInfo = CreateWorkerMessage<'WORKER_INFO', WorkerInfo & {
|
|
|
35
35
|
nonce: string;
|
|
36
36
|
}>;
|
|
37
37
|
export type WorkerReady = CreateWorkerMessage<'WORKER_READY'>;
|
|
38
|
+
export type WorkerShardsConnected = CreateWorkerMessage<'WORKER_SHARDS_CONNECTED'>;
|
|
38
39
|
export type WorkerStart = CreateWorkerMessage<'WORKER_START'>;
|
|
39
40
|
export type WorkerSendApiRequest = CreateWorkerMessage<'WORKER_API_REQUEST', {
|
|
40
41
|
method: HttpMethods;
|
|
@@ -42,13 +43,8 @@ export type WorkerSendApiRequest = CreateWorkerMessage<'WORKER_API_REQUEST', {
|
|
|
42
43
|
requestOptions: ApiRequestOptions;
|
|
43
44
|
nonce: string;
|
|
44
45
|
}>;
|
|
45
|
-
export type WorkerExecuteEval = CreateWorkerMessage<'EXECUTE_EVAL', {
|
|
46
|
-
func: string;
|
|
47
|
-
nonce: string;
|
|
48
|
-
toWorkerId: number;
|
|
49
|
-
}>;
|
|
50
46
|
export type WorkerSendEvalResponse = CreateWorkerMessage<'EVAL_RESPONSE', {
|
|
51
|
-
response:
|
|
47
|
+
response: unknown;
|
|
52
48
|
nonce: string;
|
|
53
49
|
}>;
|
|
54
50
|
export type WorkerSendEval = CreateWorkerMessage<'EVAL', {
|
|
@@ -56,5 +52,5 @@ export type WorkerSendEval = CreateWorkerMessage<'EVAL', {
|
|
|
56
52
|
nonce: string;
|
|
57
53
|
toWorkerId: number;
|
|
58
54
|
}>;
|
|
59
|
-
export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady |
|
|
55
|
+
export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady | WorkerShardsConnected | WorkerSendApiRequest | WorkerSendEvalResponse | WorkerSendEval | WorkerStart;
|
|
60
56
|
export {};
|
|
@@ -1,33 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/// <reference types="node" />
|
|
4
|
-
/// <reference types="node" />
|
|
5
|
-
/// <reference types="node" />
|
|
6
|
-
/// <reference types="node" />
|
|
7
|
-
/// <reference types="node" />
|
|
8
|
-
import type { GatewayPresenceUpdateData, GatewaySendPayload } from 'discord-api-types/v10';
|
|
1
|
+
import type { GatewayPresenceUpdateData, GatewaySendPayload } from '../../types';
|
|
9
2
|
import { type Worker as ClusterWorker } from 'node:cluster';
|
|
10
3
|
import { ApiHandler, Logger } from '../..';
|
|
11
4
|
import { type Adapter } from '../../cache';
|
|
12
5
|
import { type MakePartial } from '../../common';
|
|
13
6
|
import { ConnectQueue } from '../structures/timeout';
|
|
14
|
-
import { MemberUpdateHandler } from './events/memberUpdate';
|
|
15
|
-
import { PresenceUpdateHandler } from './events/presenceUpdate';
|
|
16
7
|
import type { ShardOptions, WorkerData, WorkerManagerOptions } from './shared';
|
|
17
8
|
import type { WorkerInfo, WorkerMessage, WorkerShardInfo } from './worker';
|
|
18
|
-
export declare class WorkerManager extends Map<number, (ClusterWorker | import('node:worker_threads').Worker
|
|
9
|
+
export declare class WorkerManager extends Map<number, (ClusterWorker | import('node:worker_threads').Worker | {
|
|
10
|
+
ready: boolean;
|
|
11
|
+
}) & {
|
|
19
12
|
ready?: boolean;
|
|
20
13
|
}> {
|
|
21
|
-
options: Required<WorkerManagerOptions>;
|
|
14
|
+
options: MakePartial<Required<WorkerManagerOptions>, 'adapter'>;
|
|
22
15
|
debugger?: Logger;
|
|
23
16
|
connectQueue: ConnectQueue;
|
|
17
|
+
workerQueue: (() => void)[];
|
|
24
18
|
cacheAdapter: Adapter;
|
|
25
19
|
promises: Map<string, {
|
|
26
20
|
resolve: (value: any) => void;
|
|
27
21
|
timeout: NodeJS.Timeout;
|
|
28
22
|
}>;
|
|
29
|
-
memberUpdateHandler: MemberUpdateHandler;
|
|
30
|
-
presenceUpdateHandler: PresenceUpdateHandler;
|
|
31
23
|
rest: ApiHandler;
|
|
32
24
|
constructor(options: MakePartial<WorkerManagerOptions, 'token' | 'intents' | 'info' | 'handlePayload'>);
|
|
33
25
|
setCache(adapter: Adapter): void;
|
|
@@ -49,7 +41,9 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
|
|
|
49
41
|
prepareSpaces(): number[][];
|
|
50
42
|
postMessage(id: number, body: any): void;
|
|
51
43
|
prepareWorkers(shards: number[][]): Promise<void>;
|
|
52
|
-
createWorker(workerData: WorkerData): ClusterWorker | import("worker_threads").Worker
|
|
44
|
+
createWorker(workerData: WorkerData): ClusterWorker | import("worker_threads").Worker | {
|
|
45
|
+
ready: boolean;
|
|
46
|
+
};
|
|
53
47
|
spawn(workerId: number, shardId: number): void;
|
|
54
48
|
handleWorkerMessage(message: WorkerMessage): Promise<void>;
|
|
55
49
|
private generateNonce;
|
|
@@ -57,7 +51,7 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
|
|
|
57
51
|
send(data: GatewaySendPayload, shardId: number): Promise<true>;
|
|
58
52
|
getShardInfo(shardId: number): Promise<WorkerShardInfo>;
|
|
59
53
|
getWorkerInfo(workerId: number): Promise<WorkerInfo>;
|
|
60
|
-
start(): Promise<void>;
|
|
54
|
+
start(): Promise<void | undefined>;
|
|
61
55
|
}
|
|
62
56
|
type CreateManagerMessage<T extends string, D extends object = {}> = {
|
|
63
57
|
type: T;
|