seyfert 1.5.0 → 2.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 +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 +1 -1
- package/lib/api/Routes/invites.d.ts +1 -1
- 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 +2 -2
- package/lib/api/api.js +2 -14
- package/lib/api/bucket.d.ts +0 -1
- package/lib/api/shared.d.ts +0 -1
- 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 +2 -3
- package/lib/builders/Attachment.js +12 -13
- 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 +18 -9
- package/lib/cache/index.js +319 -21
- 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 +28 -20
- package/lib/client/base.js +58 -56
- package/lib/client/client.d.ts +7 -16
- package/lib/client/client.js +29 -31
- 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 +14 -14
- package/lib/client/workerclient.js +112 -66
- 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/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 +1 -1
- package/lib/commands/applications/options.js +20 -21
- package/lib/commands/applications/shared.d.ts +3 -1
- package/lib/commands/decorators.d.ts +38 -20
- package/lib/commands/decorators.js +17 -18
- package/lib/commands/handle.d.ts +64 -0
- package/lib/commands/handle.js +685 -0
- package/lib/commands/handler.d.ts +27 -18
- package/lib/commands/handler.js +290 -164
- package/lib/commands/optionresolver.d.ts +13 -13
- package/lib/commands/optionresolver.js +23 -28
- 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 +15 -2
- package/lib/common/it/utils.js +78 -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 +6 -6
- 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 +3 -1
- package/lib/common/types/write.d.ts +1 -1
- 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 +66 -0
- package/lib/events/handler.d.ts +35 -13
- package/lib/events/handler.js +58 -25
- 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 +3 -3
- 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/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 +53 -36
- package/lib/structures/Interaction.js +127 -91
- package/lib/structures/Message.d.ts +29 -30
- package/lib/structures/Message.js +8 -9
- 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 +1 -1
- package/lib/structures/extra/BaseGuild.js +3 -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 +1537 -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 +60 -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 +153 -0
- package/lib/types/payloads/_interactions/applicationCommands.js +61 -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 +112 -0
- package/lib/types/payloads/_interactions/responses.js +54 -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 +1708 -0
- package/lib/types/payloads/channel.js +372 -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 +150 -0
- package/lib/types/payloads/monetization.js +79 -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 +712 -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 +194 -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 +82 -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 +797 -0
- package/lib/types/utils/index.js +799 -0
- package/lib/websocket/SharedTypes.d.ts +4 -3
- package/lib/websocket/SharedTypes.js +1 -1
- package/lib/websocket/constants/index.d.ts +0 -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 +8 -8
- package/lib/websocket/discord/shard.js +59 -47
- package/lib/websocket/discord/sharder.d.ts +6 -5
- package/lib/websocket/discord/sharder.js +11 -10
- package/lib/websocket/discord/shared.d.ts +13 -5
- package/lib/websocket/discord/socket/custom.d.ts +52 -0
- package/lib/websocket/discord/socket/custom.js +283 -0
- package/lib/websocket/discord/worker.d.ts +5 -10
- package/lib/websocket/discord/workermanager.d.ts +8 -15
- package/lib/websocket/discord/workermanager.js +35 -39
- 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 +65 -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,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. */
|
|
@@ -30,8 +30,13 @@ export interface ShardManagerOptions extends ShardDetails {
|
|
|
30
30
|
presence?: (shardId: number, workerId: number) => GatewayPresenceUpdateData;
|
|
31
31
|
compress?: boolean;
|
|
32
32
|
}
|
|
33
|
-
export interface
|
|
34
|
-
|
|
33
|
+
export interface CustomManagerAdapter {
|
|
34
|
+
postMessage(workerId: number, body: unknown): Awaitable<unknown>;
|
|
35
|
+
spawn(workerData: WorkerData, env: Record<string, any>): Awaitable<unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface WorkerManagerOptions extends Omit<ShardManagerOptions, 'handlePayload' | 'properties'> {
|
|
38
|
+
mode: 'threads' | 'clusters' | 'custom';
|
|
39
|
+
adapter?: CustomManagerAdapter;
|
|
35
40
|
workers?: number;
|
|
36
41
|
/**
|
|
37
42
|
* @default 32
|
|
@@ -40,10 +45,11 @@ export interface WorkerManagerOptions extends Omit<ShardManagerOptions, 'handleP
|
|
|
40
45
|
workerProxy?: boolean;
|
|
41
46
|
path: string;
|
|
42
47
|
handlePayload(shardId: number, workerId: number, packet: GatewayDispatchPayload): unknown;
|
|
48
|
+
properties?: DeepPartial<NonNullable<ShardManagerOptions['properties']>>;
|
|
43
49
|
}
|
|
44
50
|
export interface ShardData {
|
|
45
51
|
/** resume seq to resume connections */
|
|
46
|
-
|
|
52
|
+
resume_seq: number | null;
|
|
47
53
|
/**
|
|
48
54
|
* resume_gateway_url is the url to resume the connection
|
|
49
55
|
* @link https://discord.com/developers/docs/topics/gateway#ready-event
|
|
@@ -97,6 +103,8 @@ export interface WorkerData {
|
|
|
97
103
|
token: string;
|
|
98
104
|
path: string;
|
|
99
105
|
shards: number[];
|
|
106
|
+
totalShards: number;
|
|
107
|
+
mode: 'custom' | 'clusters' | 'threads';
|
|
100
108
|
workerId: number;
|
|
101
109
|
debug: boolean;
|
|
102
110
|
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(): 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,283 @@
|
|
|
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() {
|
|
22
|
+
const key = (0, node_crypto_1.randomBytes)(16).toString('base64');
|
|
23
|
+
const req = (0, node_https_1.request)({
|
|
24
|
+
//discord gateway hostname
|
|
25
|
+
hostname: this.hostname,
|
|
26
|
+
path: this.path,
|
|
27
|
+
headers: {
|
|
28
|
+
Connection: 'Upgrade',
|
|
29
|
+
Upgrade: 'websocket',
|
|
30
|
+
'Sec-WebSocket-Key': key,
|
|
31
|
+
'Sec-WebSocket-Version': '13',
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
req.on('upgrade', (res, socket) => {
|
|
35
|
+
const hash = (0, node_crypto_1.createHash)('sha1').update(`${key}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`).digest('base64');
|
|
36
|
+
const accept = res.headers['sec-websocket-accept'];
|
|
37
|
+
if (accept !== hash) {
|
|
38
|
+
socket.end(() => {
|
|
39
|
+
this.onerror(new Error('Invalid sec-websocket-accept header'));
|
|
40
|
+
});
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.socket = socket;
|
|
44
|
+
socket.on('readable', this.handleReadable.bind(this));
|
|
45
|
+
socket.on('close', this.handleClose.bind(this));
|
|
46
|
+
socket.on('error', err => this.onerror(err));
|
|
47
|
+
this.onopen();
|
|
48
|
+
});
|
|
49
|
+
req.on('close', () => {
|
|
50
|
+
req.removeAllListeners();
|
|
51
|
+
});
|
|
52
|
+
req.end();
|
|
53
|
+
}
|
|
54
|
+
handleReadable() {
|
|
55
|
+
// Keep reading until no data, this is useful when two payloads merges.
|
|
56
|
+
while (this.socket.readableLength > 0) {
|
|
57
|
+
// Read length without consuming the buffer
|
|
58
|
+
let length = this.readBytes(1, 1) & 127;
|
|
59
|
+
const slice = length === 126 ? 4 : length === 127 ? 10 : 2;
|
|
60
|
+
// Check if frame/data is complete
|
|
61
|
+
if (this.socket.readableLength < slice)
|
|
62
|
+
return; // Wait to next cycle if not
|
|
63
|
+
if (length > 125) {
|
|
64
|
+
// https://datatracker.ietf.org/doc/html/rfc6455#section-5.2
|
|
65
|
+
// If length is 126/127, read extended payload length instead
|
|
66
|
+
// Equivalent to readUint32BE
|
|
67
|
+
length = this.readBytes(2, slice - 2);
|
|
68
|
+
}
|
|
69
|
+
// Read the frame, ignore data next to it, leave it to next `while` cycle
|
|
70
|
+
const frame = this.socket.read(slice + length);
|
|
71
|
+
if (!frame)
|
|
72
|
+
return;
|
|
73
|
+
// Get fin (0 | 1)
|
|
74
|
+
const fin = frame[0] >> 7;
|
|
75
|
+
// Read opcode (continuation, text, binary, close, ping, pong)
|
|
76
|
+
let opcode = frame[0] & 15;
|
|
77
|
+
// Cut frame to get payload
|
|
78
|
+
let payload = frame.subarray(slice);
|
|
79
|
+
// If fin is 0, store the data and wait to next `while` cycle to be fin=1
|
|
80
|
+
if (fin === 0) {
|
|
81
|
+
this.__stored.push(payload);
|
|
82
|
+
// Only store opcode when is not 0 (continuation)
|
|
83
|
+
if (opcode !== 0) {
|
|
84
|
+
this.__opcode = opcode;
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// When the message is from ws fragmentation, opcode of last message is 0
|
|
89
|
+
// If so, merge all messages.
|
|
90
|
+
if (opcode === 0) {
|
|
91
|
+
this.__stored.push(payload);
|
|
92
|
+
payload = Buffer.concat(this.__stored);
|
|
93
|
+
opcode = this.__opcode;
|
|
94
|
+
// Reset body
|
|
95
|
+
this.__stored = [];
|
|
96
|
+
// Reset opcode, should set as -1?
|
|
97
|
+
this.__opcode = 0;
|
|
98
|
+
}
|
|
99
|
+
// Handle opcodes
|
|
100
|
+
this.handleEvent(payload, opcode);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
handleEvent(body, opcode) {
|
|
104
|
+
switch (opcode) {
|
|
105
|
+
// text
|
|
106
|
+
case 0x1:
|
|
107
|
+
this.onmessage({ data: body.toString() });
|
|
108
|
+
break;
|
|
109
|
+
// binary
|
|
110
|
+
case 0x2:
|
|
111
|
+
{
|
|
112
|
+
if (body[1] === 80)
|
|
113
|
+
body = body.subarray(6);
|
|
114
|
+
this.onmessage({ data: body });
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
// pong
|
|
118
|
+
case 0x9:
|
|
119
|
+
this.onping(body.toString());
|
|
120
|
+
break;
|
|
121
|
+
// ping
|
|
122
|
+
case 0xa:
|
|
123
|
+
this.onpong(body.toString());
|
|
124
|
+
break;
|
|
125
|
+
// close
|
|
126
|
+
case 0x8:
|
|
127
|
+
this.__lastError = {
|
|
128
|
+
code: body.readUInt16BE(0),
|
|
129
|
+
reason: body.subarray(2).toString(),
|
|
130
|
+
};
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
handleClose() {
|
|
135
|
+
this.socket?.removeAllListeners();
|
|
136
|
+
this.socket?.destroy();
|
|
137
|
+
this.socket = undefined;
|
|
138
|
+
if (this.__closeCalled)
|
|
139
|
+
return;
|
|
140
|
+
if (!this.__lastError)
|
|
141
|
+
return this.connect();
|
|
142
|
+
this.onclose(this.__lastError);
|
|
143
|
+
this.__lastError = null;
|
|
144
|
+
}
|
|
145
|
+
send(data) {
|
|
146
|
+
this._write(Buffer.from(data), 1);
|
|
147
|
+
}
|
|
148
|
+
_write(buffer, opcode) {
|
|
149
|
+
const length = buffer.length;
|
|
150
|
+
let frame;
|
|
151
|
+
// Kinda same logic as above, but client-side
|
|
152
|
+
if (length < 126) {
|
|
153
|
+
frame = Buffer.allocUnsafe(6 + length);
|
|
154
|
+
frame[1] = 128 + length;
|
|
155
|
+
}
|
|
156
|
+
else if (length < 65536) {
|
|
157
|
+
frame = Buffer.allocUnsafe(8 + length);
|
|
158
|
+
frame[1] = 254;
|
|
159
|
+
frame[2] = (length >> 8) & 255;
|
|
160
|
+
frame[3] = length & 255;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
frame = Buffer.allocUnsafe(14 + length);
|
|
164
|
+
frame[1] = 255;
|
|
165
|
+
frame.writeBigUint64BE(BigInt(length), 2);
|
|
166
|
+
}
|
|
167
|
+
frame[0] = 128 + opcode;
|
|
168
|
+
frame.writeUint32BE(0, frame.length - length - 4);
|
|
169
|
+
frame.set(buffer, frame.length - length);
|
|
170
|
+
this.socket?.write(frame);
|
|
171
|
+
}
|
|
172
|
+
onping(_data) { }
|
|
173
|
+
onpong(_data) { }
|
|
174
|
+
onopen() { }
|
|
175
|
+
onmessage(_payload) { }
|
|
176
|
+
onclose(_close) { }
|
|
177
|
+
onerror(_err) { }
|
|
178
|
+
close(code, reason) {
|
|
179
|
+
this.__closeCalled = true;
|
|
180
|
+
// alloc payload length
|
|
181
|
+
const buffer = Buffer.alloc(2 + Buffer.byteLength(reason));
|
|
182
|
+
// gateway close code
|
|
183
|
+
buffer.writeUInt16BE(code, 0);
|
|
184
|
+
// reason
|
|
185
|
+
buffer.write(reason, 2);
|
|
186
|
+
// message, close opcode
|
|
187
|
+
this._write(buffer, 0x8);
|
|
188
|
+
this.socket?.end();
|
|
189
|
+
}
|
|
190
|
+
pong(data) {
|
|
191
|
+
//send pong opcode (10)
|
|
192
|
+
this._write(Buffer.from(data), 0xa);
|
|
193
|
+
}
|
|
194
|
+
ping(data) {
|
|
195
|
+
//send ping opcode (9)
|
|
196
|
+
this._write(Buffer.from(data), 0x9);
|
|
197
|
+
}
|
|
198
|
+
waitPing() {
|
|
199
|
+
const id = this.#randomUUID();
|
|
200
|
+
let timeout;
|
|
201
|
+
const start = performance.now();
|
|
202
|
+
this.ping(id);
|
|
203
|
+
return new Promise((resolve, reject) => {
|
|
204
|
+
this.__promises.set(id, {
|
|
205
|
+
reject,
|
|
206
|
+
resolve,
|
|
207
|
+
});
|
|
208
|
+
timeout = setTimeout(() => {
|
|
209
|
+
resolve();
|
|
210
|
+
}, 60e3);
|
|
211
|
+
})
|
|
212
|
+
.then(() => {
|
|
213
|
+
return performance.now() - start;
|
|
214
|
+
})
|
|
215
|
+
.finally(() => {
|
|
216
|
+
clearTimeout(timeout);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
#randomUUID() {
|
|
220
|
+
const id = (0, node_crypto_1.randomUUID)();
|
|
221
|
+
if (this.__promises.has(id))
|
|
222
|
+
return this.#randomUUID();
|
|
223
|
+
return id;
|
|
224
|
+
}
|
|
225
|
+
get readyState() {
|
|
226
|
+
return ['opening', 'open', 'closed', 'closed'].indexOf(this.socket?.readyState ?? 'closed');
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
*
|
|
230
|
+
* @param start Start calculating bytes from `start`
|
|
231
|
+
* @param bits Num of bits since `start`
|
|
232
|
+
* @returns
|
|
233
|
+
*/
|
|
234
|
+
readBytes(start, bits) {
|
|
235
|
+
// @ts-expect-error this is private, thanks nodejs
|
|
236
|
+
const readable = this.socket._readableState;
|
|
237
|
+
// Num of bit read
|
|
238
|
+
let bitIndex = 0;
|
|
239
|
+
// Num of bit read counting since start
|
|
240
|
+
let read = 0;
|
|
241
|
+
// Bytes value
|
|
242
|
+
let value = 0;
|
|
243
|
+
// Node v20
|
|
244
|
+
if ('bufferIndex' in readable) {
|
|
245
|
+
// actual index of the buffer to read
|
|
246
|
+
let blockIndex = readable.bufferIndex;
|
|
247
|
+
// Buffer to read
|
|
248
|
+
let block;
|
|
249
|
+
while ((block = readable.buffer[blockIndex++])) {
|
|
250
|
+
for (let i = 0; i < block.length; i++) {
|
|
251
|
+
if (++bitIndex > start) {
|
|
252
|
+
value *= 256; // shift 8 bits (1 byte) `*= 256 is faster than <<= 8`
|
|
253
|
+
value += block[i]; // sum value to bits
|
|
254
|
+
// Read until read all bits
|
|
255
|
+
if (++read === bits) {
|
|
256
|
+
return value;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
} /* Support for olders versions*/
|
|
262
|
+
else {
|
|
263
|
+
// readable.buffer is kinda a LinkedList
|
|
264
|
+
let head = readable.buffer.head;
|
|
265
|
+
while (head) {
|
|
266
|
+
for (let i = 0; i < head.data.length; i++) {
|
|
267
|
+
if (++bitIndex > start) {
|
|
268
|
+
value *= 256; // shift 8 bits (1 byte) `*= 256 is faster than <<= 8`
|
|
269
|
+
value += head.data[i]; // sum value to bits
|
|
270
|
+
// Read until read all bits
|
|
271
|
+
if (++read === bits) {
|
|
272
|
+
return value;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// continue with next node
|
|
277
|
+
head = head.next;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return 0;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
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;
|
|
@@ -42,13 +42,8 @@ export type WorkerSendApiRequest = CreateWorkerMessage<'WORKER_API_REQUEST', {
|
|
|
42
42
|
requestOptions: ApiRequestOptions;
|
|
43
43
|
nonce: string;
|
|
44
44
|
}>;
|
|
45
|
-
export type WorkerExecuteEval = CreateWorkerMessage<'EXECUTE_EVAL', {
|
|
46
|
-
func: string;
|
|
47
|
-
nonce: string;
|
|
48
|
-
toWorkerId: number;
|
|
49
|
-
}>;
|
|
50
45
|
export type WorkerSendEvalResponse = CreateWorkerMessage<'EVAL_RESPONSE', {
|
|
51
|
-
response:
|
|
46
|
+
response: unknown;
|
|
52
47
|
nonce: string;
|
|
53
48
|
}>;
|
|
54
49
|
export type WorkerSendEval = CreateWorkerMessage<'EVAL', {
|
|
@@ -56,5 +51,5 @@ export type WorkerSendEval = CreateWorkerMessage<'EVAL', {
|
|
|
56
51
|
nonce: string;
|
|
57
52
|
toWorkerId: number;
|
|
58
53
|
}>;
|
|
59
|
-
export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady | WorkerSendApiRequest |
|
|
54
|
+
export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady | WorkerSendApiRequest | WorkerSendEvalResponse | WorkerSendEval | WorkerStart;
|
|
60
55
|
export {};
|
|
@@ -1,24 +1,17 @@
|
|
|
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;
|
|
24
17
|
cacheAdapter: Adapter;
|
|
@@ -26,8 +19,6 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
|
|
|
26
19
|
resolve: (value: any) => void;
|
|
27
20
|
timeout: NodeJS.Timeout;
|
|
28
21
|
}>;
|
|
29
|
-
memberUpdateHandler: MemberUpdateHandler;
|
|
30
|
-
presenceUpdateHandler: PresenceUpdateHandler;
|
|
31
22
|
rest: ApiHandler;
|
|
32
23
|
constructor(options: MakePartial<WorkerManagerOptions, 'token' | 'intents' | 'info' | 'handlePayload'>);
|
|
33
24
|
setCache(adapter: Adapter): void;
|
|
@@ -49,7 +40,9 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
|
|
|
49
40
|
prepareSpaces(): number[][];
|
|
50
41
|
postMessage(id: number, body: any): void;
|
|
51
42
|
prepareWorkers(shards: number[][]): Promise<void>;
|
|
52
|
-
createWorker(workerData: WorkerData): ClusterWorker | import("worker_threads").Worker
|
|
43
|
+
createWorker(workerData: WorkerData): ClusterWorker | import("worker_threads").Worker | {
|
|
44
|
+
ready: boolean;
|
|
45
|
+
};
|
|
53
46
|
spawn(workerId: number, shardId: number): void;
|
|
54
47
|
handleWorkerMessage(message: WorkerMessage): Promise<void>;
|
|
55
48
|
private generateNonce;
|
|
@@ -13,16 +13,12 @@ const common_1 = require("../../common");
|
|
|
13
13
|
const constants_1 = require("../constants");
|
|
14
14
|
const structures_1 = require("../structures");
|
|
15
15
|
const timeout_1 = require("../structures/timeout");
|
|
16
|
-
const memberUpdate_1 = require("./events/memberUpdate");
|
|
17
|
-
const presenceUpdate_1 = require("./events/presenceUpdate");
|
|
18
16
|
class WorkerManager extends Map {
|
|
19
17
|
options;
|
|
20
18
|
debugger;
|
|
21
19
|
connectQueue;
|
|
22
20
|
cacheAdapter;
|
|
23
21
|
promises = new Map();
|
|
24
|
-
memberUpdateHandler = new memberUpdate_1.MemberUpdateHandler();
|
|
25
|
-
presenceUpdateHandler = new presenceUpdate_1.PresenceUpdateHandler();
|
|
26
22
|
rest;
|
|
27
23
|
constructor(options) {
|
|
28
24
|
super();
|
|
@@ -103,9 +99,15 @@ class WorkerManager extends Map {
|
|
|
103
99
|
case 'threads':
|
|
104
100
|
worker.postMessage(body);
|
|
105
101
|
break;
|
|
102
|
+
case 'custom':
|
|
103
|
+
this.options.adapter.postMessage(id, body);
|
|
104
|
+
break;
|
|
106
105
|
}
|
|
107
106
|
}
|
|
108
107
|
async prepareWorkers(shards) {
|
|
108
|
+
const worker_threads = (0, common_1.lazyLoadPackage)('node:worker_threads');
|
|
109
|
+
if (!worker_threads)
|
|
110
|
+
throw new Error('Cannot prepare workers without worker_threads.');
|
|
109
111
|
for (let i = 0; i < shards.length; i++) {
|
|
110
112
|
let worker = this.get(i);
|
|
111
113
|
if (!worker) {
|
|
@@ -117,24 +119,11 @@ class WorkerManager extends Map {
|
|
|
117
119
|
intents: this.options.intents,
|
|
118
120
|
workerId: i,
|
|
119
121
|
workerProxy: this.options.workerProxy,
|
|
122
|
+
totalShards: this.totalShards,
|
|
123
|
+
mode: this.options.mode,
|
|
120
124
|
});
|
|
121
125
|
this.set(i, worker);
|
|
122
126
|
}
|
|
123
|
-
const listener = (message) => {
|
|
124
|
-
if (message.type !== 'WORKER_START')
|
|
125
|
-
return;
|
|
126
|
-
worker.removeListener('message', listener);
|
|
127
|
-
this.postMessage(i, {
|
|
128
|
-
type: 'SPAWN_SHARDS',
|
|
129
|
-
compress: this.options.compress ?? false,
|
|
130
|
-
info: {
|
|
131
|
-
...this.options.info,
|
|
132
|
-
shards: this.totalShards,
|
|
133
|
-
},
|
|
134
|
-
properties: this.options.properties,
|
|
135
|
-
});
|
|
136
|
-
};
|
|
137
|
-
worker.on('message', listener);
|
|
138
127
|
}
|
|
139
128
|
}
|
|
140
129
|
createWorker(workerData) {
|
|
@@ -163,11 +152,16 @@ class WorkerManager extends Map {
|
|
|
163
152
|
worker.on('message', data => this.handleWorkerMessage(data));
|
|
164
153
|
return worker;
|
|
165
154
|
}
|
|
155
|
+
case 'custom':
|
|
156
|
+
this.options.adapter.spawn(workerData, env);
|
|
157
|
+
return {
|
|
158
|
+
ready: false,
|
|
159
|
+
};
|
|
166
160
|
}
|
|
167
161
|
}
|
|
168
162
|
spawn(workerId, shardId) {
|
|
169
163
|
this.connectQueue.push(() => {
|
|
170
|
-
const worker = this.
|
|
164
|
+
const worker = this.has(workerId);
|
|
171
165
|
if (!worker) {
|
|
172
166
|
this.debugger?.fatal("Trying spawn with worker doesn't exist");
|
|
173
167
|
return;
|
|
@@ -181,12 +175,28 @@ class WorkerManager extends Map {
|
|
|
181
175
|
}
|
|
182
176
|
async handleWorkerMessage(message) {
|
|
183
177
|
switch (message.type) {
|
|
178
|
+
case 'WORKER_START':
|
|
179
|
+
{
|
|
180
|
+
this.postMessage(message.workerId, {
|
|
181
|
+
type: 'SPAWN_SHARDS',
|
|
182
|
+
compress: this.options.compress ?? false,
|
|
183
|
+
info: {
|
|
184
|
+
...this.options.info,
|
|
185
|
+
shards: this.totalShards,
|
|
186
|
+
},
|
|
187
|
+
properties: {
|
|
188
|
+
...constants_1.properties,
|
|
189
|
+
...this.options.properties,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
184
194
|
case 'CONNECT_QUEUE':
|
|
185
195
|
this.spawn(message.workerId, message.shardId);
|
|
186
196
|
break;
|
|
187
197
|
case 'CACHE_REQUEST':
|
|
188
198
|
{
|
|
189
|
-
const worker = this.
|
|
199
|
+
const worker = this.has(message.workerId);
|
|
190
200
|
if (!worker) {
|
|
191
201
|
throw new Error('Invalid request from unavailable worker');
|
|
192
202
|
}
|
|
@@ -200,21 +210,7 @@ class WorkerManager extends Map {
|
|
|
200
210
|
}
|
|
201
211
|
break;
|
|
202
212
|
case 'RECEIVE_PAYLOAD':
|
|
203
|
-
|
|
204
|
-
switch (message.payload.t) {
|
|
205
|
-
case 'GUILD_MEMBER_UPDATE':
|
|
206
|
-
if (!this.memberUpdateHandler.check(message.payload.d)) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
case 'PRESENCE_UPDATE':
|
|
211
|
-
if (!this.presenceUpdateHandler.check(message.payload.d)) {
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
break;
|
|
215
|
-
}
|
|
216
|
-
this.options.handlePayload(message.shardId, message.workerId, message.payload);
|
|
217
|
-
}
|
|
213
|
+
await this.options.handlePayload(message.shardId, message.workerId, message.payload);
|
|
218
214
|
break;
|
|
219
215
|
case 'RESULT_PAYLOAD':
|
|
220
216
|
{
|
|
@@ -322,7 +318,7 @@ class WorkerManager extends Map {
|
|
|
322
318
|
}
|
|
323
319
|
async send(data, shardId) {
|
|
324
320
|
const workerId = this.calculateWorkerId(shardId);
|
|
325
|
-
const worker = this.
|
|
321
|
+
const worker = this.has(workerId);
|
|
326
322
|
if (!worker) {
|
|
327
323
|
throw new Error(`Worker #${workerId} doesnt exist`);
|
|
328
324
|
}
|
|
@@ -337,7 +333,7 @@ class WorkerManager extends Map {
|
|
|
337
333
|
}
|
|
338
334
|
async getShardInfo(shardId) {
|
|
339
335
|
const workerId = this.calculateWorkerId(shardId);
|
|
340
|
-
const worker = this.
|
|
336
|
+
const worker = this.has(workerId);
|
|
341
337
|
if (!worker) {
|
|
342
338
|
throw new Error(`Worker #${workerId} doesnt exist`);
|
|
343
339
|
}
|
|
@@ -346,7 +342,7 @@ class WorkerManager extends Map {
|
|
|
346
342
|
return this.generateSendPromise(nonce, 'Get shard info timeout');
|
|
347
343
|
}
|
|
348
344
|
async getWorkerInfo(workerId) {
|
|
349
|
-
const worker = this.
|
|
345
|
+
const worker = this.has(workerId);
|
|
350
346
|
if (!worker) {
|
|
351
347
|
throw new Error(`Worker #${workerId} doesnt exist`);
|
|
352
348
|
}
|