seyfert 4.4.1 → 5.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.
Files changed (231) hide show
  1. package/README.md +7 -1
  2. package/lib/api/Routes/cdn.d.ts +2 -2
  3. package/lib/api/Routes/guilds.d.ts +2 -2
  4. package/lib/api/Routes/invites.d.ts +2 -2
  5. package/lib/api/api.d.ts +20 -8
  6. package/lib/api/api.js +198 -44
  7. package/lib/api/shared.d.ts +30 -1
  8. package/lib/api/utils/constants.d.ts +1 -1
  9. package/lib/api/utils/constants.js +1 -1
  10. package/lib/api/utils/utils.d.ts +2 -1
  11. package/lib/api/utils/utils.js +1 -1
  12. package/lib/builders/Attachment.d.ts +1 -1
  13. package/lib/builders/Attachment.js +30 -8
  14. package/lib/builders/MediaGallery.d.ts +2 -2
  15. package/lib/builders/MediaGallery.js +10 -0
  16. package/lib/builders/Modal.d.ts +18 -8
  17. package/lib/builders/Modal.js +36 -7
  18. package/lib/builders/Poll.js +18 -0
  19. package/lib/builders/RadioGroup.d.ts +4 -3
  20. package/lib/builders/RadioGroup.js +24 -3
  21. package/lib/builders/SelectMenu.d.ts +8 -6
  22. package/lib/builders/SelectMenu.js +24 -3
  23. package/lib/builders/types.d.ts +3 -2
  24. package/lib/cache/adapters/default.d.ts +1 -1
  25. package/lib/cache/adapters/default.js +23 -26
  26. package/lib/cache/adapters/limited.d.ts +1 -0
  27. package/lib/cache/adapters/limited.js +47 -33
  28. package/lib/cache/index.d.ts +19 -25
  29. package/lib/cache/index.js +58 -6
  30. package/lib/cache/resources/bans.d.ts +1 -1
  31. package/lib/cache/resources/bans.js +4 -4
  32. package/lib/cache/resources/channels.d.ts +1 -1
  33. package/lib/cache/resources/channels.js +4 -4
  34. package/lib/cache/resources/default/base.d.ts +1 -1
  35. package/lib/cache/resources/default/base.js +8 -8
  36. package/lib/cache/resources/default/guild-based.d.ts +5 -5
  37. package/lib/cache/resources/default/guild-based.js +29 -16
  38. package/lib/cache/resources/default/guild-related.d.ts +5 -5
  39. package/lib/cache/resources/default/guild-related.js +14 -14
  40. package/lib/cache/resources/emojis.d.ts +1 -1
  41. package/lib/cache/resources/emojis.js +4 -4
  42. package/lib/cache/resources/guilds.js +28 -15
  43. package/lib/cache/resources/members.d.ts +1 -1
  44. package/lib/cache/resources/members.js +6 -6
  45. package/lib/cache/resources/messages.d.ts +7 -2
  46. package/lib/cache/resources/messages.js +43 -20
  47. package/lib/cache/resources/overwrites.d.ts +1 -1
  48. package/lib/cache/resources/overwrites.js +5 -8
  49. package/lib/cache/resources/roles.d.ts +1 -1
  50. package/lib/cache/resources/roles.js +4 -4
  51. package/lib/cache/resources/stickers.d.ts +1 -1
  52. package/lib/cache/resources/stickers.js +4 -4
  53. package/lib/cache/resources/users.js +4 -4
  54. package/lib/cache/resources/voice-states.d.ts +1 -1
  55. package/lib/cache/resources/voice-states.js +4 -4
  56. package/lib/client/base.d.ts +83 -24
  57. package/lib/client/base.js +594 -39
  58. package/lib/client/client.d.ts +29 -4
  59. package/lib/client/client.js +38 -13
  60. package/lib/client/collectors.d.ts +9 -8
  61. package/lib/client/collectors.js +19 -52
  62. package/lib/client/httpclient.d.ts +3 -0
  63. package/lib/client/index.d.ts +3 -1
  64. package/lib/client/index.js +4 -0
  65. package/lib/client/intents.d.ts +3 -0
  66. package/lib/client/intents.js +9 -0
  67. package/lib/client/plugins/api.d.ts +4 -0
  68. package/lib/client/plugins/api.js +550 -0
  69. package/lib/client/plugins/errors.d.ts +25 -0
  70. package/lib/client/plugins/errors.js +79 -0
  71. package/lib/client/plugins/order.d.ts +10 -0
  72. package/lib/client/plugins/order.js +32 -0
  73. package/lib/client/plugins/registry.d.ts +273 -0
  74. package/lib/client/plugins/registry.js +868 -0
  75. package/lib/client/plugins/shared.d.ts +23 -0
  76. package/lib/client/plugins/shared.js +193 -0
  77. package/lib/client/plugins/types.d.ts +398 -0
  78. package/lib/client/plugins/types.js +8 -0
  79. package/lib/client/plugins.d.ts +78 -0
  80. package/lib/client/plugins.js +558 -0
  81. package/lib/client/transformers.d.ts +33 -33
  82. package/lib/client/workerclient.d.ts +11 -2
  83. package/lib/client/workerclient.js +33 -22
  84. package/lib/collection.d.ts +10 -8
  85. package/lib/collection.js +19 -25
  86. package/lib/commands/applications/chat.d.ts +20 -18
  87. package/lib/commands/applications/chat.js +39 -14
  88. package/lib/commands/applications/chatcontext.d.ts +23 -15
  89. package/lib/commands/applications/chatcontext.js +23 -2
  90. package/lib/commands/applications/entryPoint.d.ts +4 -3
  91. package/lib/commands/applications/entryPoint.js +1 -1
  92. package/lib/commands/applications/entrycontext.d.ts +7 -9
  93. package/lib/commands/applications/entrycontext.js +3 -1
  94. package/lib/commands/applications/menu.d.ts +4 -3
  95. package/lib/commands/applications/menucontext.d.ts +7 -9
  96. package/lib/commands/applications/menucontext.js +3 -1
  97. package/lib/commands/applications/options.d.ts +23 -23
  98. package/lib/commands/applications/shared.d.ts +39 -17
  99. package/lib/commands/decorators.d.ts +50 -38
  100. package/lib/commands/decorators.js +15 -5
  101. package/lib/commands/handle.d.ts +19 -8
  102. package/lib/commands/handle.js +224 -143
  103. package/lib/commands/handler.d.ts +21 -8
  104. package/lib/commands/handler.js +157 -69
  105. package/lib/commands/index.d.ts +1 -0
  106. package/lib/commands/optionresolver.d.ts +2 -2
  107. package/lib/common/it/colors.js +12 -2
  108. package/lib/common/it/error.d.ts +9 -0
  109. package/lib/common/it/error.js +8 -0
  110. package/lib/common/it/fake-promise.d.ts +4 -0
  111. package/lib/common/it/fake-promise.js +10 -0
  112. package/lib/common/it/formatter.d.ts +14 -11
  113. package/lib/common/it/formatter.js +4 -3
  114. package/lib/common/it/logger.d.ts +7 -1
  115. package/lib/common/it/logger.js +24 -6
  116. package/lib/common/it/utils.d.ts +6 -8
  117. package/lib/common/it/utils.js +44 -42
  118. package/lib/common/shorters/application.d.ts +3 -3
  119. package/lib/common/shorters/application.js +3 -2
  120. package/lib/common/shorters/bans.d.ts +8 -4
  121. package/lib/common/shorters/bans.js +13 -5
  122. package/lib/common/shorters/channels.d.ts +4 -4
  123. package/lib/common/shorters/channels.js +4 -4
  124. package/lib/common/shorters/emojis.js +1 -0
  125. package/lib/common/shorters/guilds.d.ts +8 -8
  126. package/lib/common/shorters/guilds.js +14 -31
  127. package/lib/common/shorters/interaction.d.ts +1 -1
  128. package/lib/common/shorters/invites.d.ts +201 -201
  129. package/lib/common/shorters/members.d.ts +7 -7
  130. package/lib/common/shorters/members.js +13 -14
  131. package/lib/common/shorters/messages.d.ts +2 -2
  132. package/lib/common/shorters/soundboard.d.ts +5 -5
  133. package/lib/common/shorters/users.d.ts +1 -1
  134. package/lib/common/shorters/webhook.d.ts +3 -2
  135. package/lib/common/shorters/webhook.js +0 -7
  136. package/lib/common/types/options.d.ts +4 -0
  137. package/lib/common/types/util.d.ts +8 -0
  138. package/lib/common/types/write.d.ts +2 -1
  139. package/lib/components/BaseSelectMenuComponent.d.ts +1 -1
  140. package/lib/components/BaseSelectMenuComponent.js +1 -1
  141. package/lib/components/ButtonComponent.d.ts +3 -3
  142. package/lib/components/ChannelSelectMenuComponent.d.ts +2 -2
  143. package/lib/components/File.d.ts +1 -1
  144. package/lib/components/MediaGallery.d.ts +1 -1
  145. package/lib/components/MentionableSelectMenuComponent.d.ts +1 -1
  146. package/lib/components/RoleSelectMenuComponent.d.ts +1 -1
  147. package/lib/components/Separator.d.ts +1 -1
  148. package/lib/components/StringSelectMenuComponent.d.ts +1 -1
  149. package/lib/components/TextInputComponent.d.ts +1 -1
  150. package/lib/components/Thumbnail.d.ts +1 -1
  151. package/lib/components/UserSelectMenuComponent.d.ts +1 -1
  152. package/lib/components/componentcommand.d.ts +8 -7
  153. package/lib/components/componentcontext.d.ts +24 -36
  154. package/lib/components/componentcontext.js +7 -17
  155. package/lib/components/handler.d.ts +17 -7
  156. package/lib/components/handler.js +108 -49
  157. package/lib/components/index.d.ts +1 -0
  158. package/lib/components/index.js +1 -0
  159. package/lib/components/interactioncontext.d.ts +45 -0
  160. package/lib/components/interactioncontext.js +93 -0
  161. package/lib/components/modalcommand.d.ts +5 -4
  162. package/lib/components/modalcontext.d.ts +39 -20
  163. package/lib/components/modalcontext.js +59 -6
  164. package/lib/events/event.d.ts +9 -3
  165. package/lib/events/handler.d.ts +51 -6
  166. package/lib/events/handler.js +165 -36
  167. package/lib/events/hooks/application_command.d.ts +1 -1
  168. package/lib/events/hooks/auto_moderation.d.ts +2 -2
  169. package/lib/events/hooks/guild.d.ts +150 -150
  170. package/lib/events/hooks/interactions.d.ts +1 -1
  171. package/lib/events/hooks/invite.d.ts +20 -20
  172. package/lib/events/hooks/message.d.ts +27 -27
  173. package/lib/events/hooks/presence.d.ts +11 -11
  174. package/lib/events/hooks/soundboard.d.ts +6 -6
  175. package/lib/events/hooks/stage.d.ts +2 -2
  176. package/lib/events/hooks/subscriptions.d.ts +3 -3
  177. package/lib/events/hooks/thread.d.ts +30 -30
  178. package/lib/events/hooks/voice.d.ts +3 -4
  179. package/lib/events/hooks/voice.js +2 -1
  180. package/lib/events/utils.d.ts +4 -0
  181. package/lib/events/utils.js +59 -0
  182. package/lib/index.d.ts +9 -4
  183. package/lib/index.js +14 -8
  184. package/lib/langs/handler.d.ts +14 -11
  185. package/lib/langs/handler.js +46 -9
  186. package/lib/langs/router.d.ts +10 -3
  187. package/lib/structures/Application.d.ts +1 -1
  188. package/lib/structures/Emoji.d.ts +3 -3
  189. package/lib/structures/Emoji.js +2 -2
  190. package/lib/structures/Guild.d.ts +154 -154
  191. package/lib/structures/GuildBan.d.ts +4 -4
  192. package/lib/structures/GuildBan.js +3 -3
  193. package/lib/structures/GuildMember.d.ts +7 -7
  194. package/lib/structures/GuildMember.js +28 -7
  195. package/lib/structures/GuildRole.d.ts +1 -1
  196. package/lib/structures/GuildRole.js +2 -2
  197. package/lib/structures/Interaction.d.ts +11 -9
  198. package/lib/structures/Interaction.js +33 -12
  199. package/lib/structures/Message.d.ts +21 -14
  200. package/lib/structures/Message.js +29 -14
  201. package/lib/structures/User.d.ts +1 -1
  202. package/lib/structures/VoiceState.d.ts +4 -0
  203. package/lib/structures/VoiceState.js +13 -1
  204. package/lib/structures/Webhook.d.ts +9 -1
  205. package/lib/structures/Webhook.js +4 -1
  206. package/lib/structures/channels.d.ts +148 -134
  207. package/lib/structures/channels.js +27 -26
  208. package/lib/structures/extra/BitField.d.ts +4 -4
  209. package/lib/structures/extra/BitField.js +20 -4
  210. package/lib/structures/extra/DiscordBase.js +1 -1
  211. package/lib/structures/extra/Permissions.d.ts +2 -4
  212. package/lib/structures/extra/Permissions.js +1 -17
  213. package/lib/types/payloads/_interactions/responses.d.ts +2 -2
  214. package/lib/types/payloads/components.d.ts +4 -4
  215. package/lib/websocket/SharedTypes.d.ts +4 -4
  216. package/lib/websocket/constants/index.d.ts +1 -1
  217. package/lib/websocket/constants/index.js +3 -2
  218. package/lib/websocket/discord/events/memberUpdate.js +2 -2
  219. package/lib/websocket/discord/heartbeater.d.ts +1 -0
  220. package/lib/websocket/discord/heartbeater.js +7 -0
  221. package/lib/websocket/discord/shard.d.ts +2 -2
  222. package/lib/websocket/discord/shard.js +16 -14
  223. package/lib/websocket/discord/sharder.d.ts +8 -7
  224. package/lib/websocket/discord/sharder.js +26 -6
  225. package/lib/websocket/discord/shared.d.ts +19 -6
  226. package/lib/websocket/discord/socket/custom.js +5 -0
  227. package/lib/websocket/discord/worker.d.ts +1 -0
  228. package/lib/websocket/discord/worker.js +2 -0
  229. package/lib/websocket/discord/workermanager.d.ts +25 -11
  230. package/lib/websocket/discord/workermanager.js +41 -10
  231. package/package.json +13 -17
@@ -1,43 +1,46 @@
1
1
  import type { ReturnCache } from '../../cache';
2
- import type { GuildMemberStructure, GuildStructure, InteractionGuildMemberStructure, MessageStructure, OptionResolverStructure, UserStructure, WebhookMessageStructure } from '../../client/transformers';
3
- import type { If, MakeRequired, UnionToTuple, When } from '../../common';
4
- import type { InteractionCreateBodyRequest, InteractionMessageUpdateBodyRequest, MessageWebhookCreateBodyRequest } from '../../common/types/write';
5
- import { type AllChannels, ChatInputCommandInteraction } from '../../structures';
2
+ import type { BaseGuildChannelStructure, GuildMemberStructure, GuildStructure, InteractionGuildMemberStructure, MessageStructure, OptionResolverStructure, UserStructure, WebhookMessageStructure } from '../../client/transformers';
3
+ import { type If, type MakeRequired, type When } from '../../common';
4
+ import type { InteractionCreateBodyRequest, InteractionMessageUpdateBodyRequest, MessageWebhookCreateBodyRequest, ModalCreateBodyRequest, ModalCreateOptions } from '../../common/types/write';
5
+ import { type AllChannels, type AllGuildChannels, ChatInputCommandInteraction, type ModalSubmitInteraction } from '../../structures';
6
6
  import { type RESTGetAPIGuildQuery } from '../../types';
7
7
  import { BaseContext } from '../basecontext';
8
- import type { RegisteredMiddlewares } from '../decorators';
8
+ import type { ResolvedRegisteredMiddlewares } from '../decorators';
9
9
  import type { Command, ContextOptions, OptionsRecord, SubCommand } from './chat';
10
10
  import type { CommandMetadata, ExtendContext, GlobalMetadata, InferWithPrefix, UsingClient } from './shared';
11
- export interface CommandContext<T extends OptionsRecord = {}, M extends keyof RegisteredMiddlewares = never> extends BaseContext, ExtendContext {
11
+ type GuildCommandChannel = AllGuildChannels | BaseGuildChannelStructure;
12
+ export interface CommandContext<T extends OptionsRecord = {}, M extends keyof ResolvedRegisteredMiddlewares = never> extends BaseContext, ExtendContext {
12
13
  }
13
- export declare class CommandContext<T extends OptionsRecord = {}, M extends keyof RegisteredMiddlewares = never> extends BaseContext {
14
+ export declare class CommandContext<T extends OptionsRecord = {}, M extends keyof ResolvedRegisteredMiddlewares = never> extends BaseContext {
14
15
  readonly client: UsingClient;
15
16
  readonly resolver: OptionResolverStructure;
16
17
  readonly shardId: number;
17
18
  readonly command: Command | SubCommand;
18
19
  message: If<InferWithPrefix, MessageStructure | undefined, undefined>;
19
20
  interaction: If<InferWithPrefix, ChatInputCommandInteraction | undefined, ChatInputCommandInteraction>;
20
- messageResponse?: If<InferWithPrefix, MessageStructure | undefined>;
21
+ messageResponse?: If<InferWithPrefix, MessageStructure | undefined, undefined>;
21
22
  constructor(client: UsingClient, data: ChatInputCommandInteraction | MessageStructure, resolver: OptionResolverStructure, shardId: number, command: Command | SubCommand);
22
23
  options: ContextOptions<T>;
23
- metadata: CommandMetadata<UnionToTuple<M>>;
24
+ metadata: CommandMetadata<M>;
24
25
  globalMetadata: GlobalMetadata;
25
- get t(): import("../..").__InternalParseLocale<import("./shared").DefaultLocale> & {
26
- get(locale?: string): import("./shared").DefaultLocale;
27
- };
26
+ get t(): import("../..").SeyfertLocale;
28
27
  get fullCommandName(): string;
29
28
  get deferred(): boolean;
30
- write<WR extends boolean = false>(body: InteractionCreateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure | When<InferWithPrefix, MessageStructure, never>, void | WebhookMessageStructure | When<InferWithPrefix, MessageStructure, never>>>;
29
+ write<WR extends boolean = false>(body: InteractionCreateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure | When<InferWithPrefix, MessageStructure, never>, void>>;
30
+ modal(body: ModalCreateBodyRequest, options?: undefined): Promise<undefined>;
31
+ modal(body: ModalCreateBodyRequest, options: ModalCreateOptions): Promise<ModalSubmitInteraction | null>;
31
32
  deferReply<WR extends boolean = false>(ephemeral?: boolean, withResponse?: WR): Promise<When<WR, WebhookMessageStructure | When<InferWithPrefix, MessageStructure, never>, When<InferWithPrefix, MessageStructure, never> | undefined>>;
32
33
  editResponse(body: InteractionMessageUpdateBodyRequest): Promise<When<InferWithPrefix, WebhookMessageStructure | MessageStructure, WebhookMessageStructure>>;
33
34
  deleteResponse(): Promise<void>;
34
- editOrReply<WR extends boolean = false>(body: InteractionCreateBodyRequest | InteractionMessageUpdateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure | When<InferWithPrefix, MessageStructure, never>, void | WebhookMessageStructure | When<InferWithPrefix, MessageStructure, never>>>;
35
+ editOrReply<WR extends boolean = false>(body: InteractionCreateBodyRequest | InteractionMessageUpdateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure | When<InferWithPrefix, MessageStructure, never>, void>>;
35
36
  followup(body: MessageWebhookCreateBodyRequest): Promise<If<InferWithPrefix, WebhookMessageStructure | MessageStructure, WebhookMessageStructure>>;
36
37
  fetchResponse(): Promise<If<InferWithPrefix, WebhookMessageStructure | MessageStructure, WebhookMessageStructure>>;
37
38
  channel(mode?: 'rest' | 'flow'): Promise<AllChannels>;
38
39
  channel(mode: 'cache'): ReturnCache<If<InferWithPrefix, AllChannels | undefined, AllChannels>>;
39
40
  me(mode?: 'rest' | 'flow'): Promise<GuildMemberStructure | undefined>;
40
41
  me(mode: 'cache'): ReturnCache<GuildMemberStructure | undefined>;
42
+ fetchMember(mode?: 'rest' | 'flow'): Promise<GuildMemberStructure | undefined>;
43
+ fetchMember(mode: 'cache'): ReturnCache<GuildMemberStructure | undefined>;
41
44
  guild(mode?: 'rest' | 'flow', query?: RESTGetAPIGuildQuery): Promise<GuildStructure<'cached' | 'api'> | undefined>;
42
45
  guild(mode: 'cache', query?: RESTGetAPIGuildQuery): ReturnCache<GuildStructure<'cached'> | undefined>;
43
46
  get guildId(): string | undefined;
@@ -47,9 +50,14 @@ export declare class CommandContext<T extends OptionsRecord = {}, M extends keyo
47
50
  isChat(): this is CommandContext<T, M>;
48
51
  inGuild(): this is GuildCommandContext<T, M>;
49
52
  }
50
- export interface GuildCommandContext<T extends OptionsRecord = {}, M extends keyof RegisteredMiddlewares = never> extends Omit<MakeRequired<CommandContext<T, M>, 'guildId' | 'member'>, 'guild' | 'me'> {
53
+ export interface GuildCommandContext<T extends OptionsRecord = {}, M extends keyof ResolvedRegisteredMiddlewares = never> extends Omit<MakeRequired<CommandContext<T, M>, 'guildId' | 'member'>, 'channel' | 'guild' | 'me' | 'fetchMember'> {
54
+ channel(mode?: 'rest' | 'flow'): Promise<GuildCommandChannel>;
55
+ channel(mode: 'cache'): ReturnCache<If<InferWithPrefix, GuildCommandChannel | undefined, GuildCommandChannel>>;
51
56
  guild(mode?: 'rest' | 'flow'): Promise<GuildStructure<'cached' | 'api'>>;
52
57
  guild(mode: 'cache'): ReturnCache<GuildStructure<'cached'> | undefined>;
53
58
  me(mode?: 'rest' | 'flow'): Promise<GuildMemberStructure>;
54
59
  me(mode: 'cache'): ReturnCache<GuildMemberStructure | undefined>;
60
+ fetchMember(mode?: 'rest' | 'flow'): Promise<GuildMemberStructure>;
61
+ fetchMember(mode: 'cache'): ReturnCache<GuildMemberStructure | undefined>;
55
62
  }
63
+ export {};
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CommandContext = void 0;
4
+ const common_1 = require("../../common");
4
5
  const structures_1 = require("../../structures");
5
6
  const types_1 = require("../../types");
6
7
  const basecontext_1 = require("../basecontext");
@@ -29,7 +30,9 @@ class CommandContext extends basecontext_1.BaseContext {
29
30
  metadata = {};
30
31
  globalMetadata = {};
31
32
  get t() {
32
- return this.client.t(this.interaction?.locale ?? this.client.langs.defaultLang ?? 'en-US');
33
+ return this.client.t(this.client.langs.preferGuildLocale
34
+ ? (this.interaction?.guildLocale ?? this.interaction?.locale ?? this.client.langs.defaultLang ?? 'en-US')
35
+ : (this.interaction?.locale ?? this.client.langs.defaultLang ?? 'en-US'));
33
36
  }
34
37
  get fullCommandName() {
35
38
  return this.resolver.fullCommandName;
@@ -43,6 +46,13 @@ class CommandContext extends basecontext_1.BaseContext {
43
46
  const options = this.client.options?.commands;
44
47
  return (this.messageResponse = await this.message[!this.messageResponse && (await options?.reply?.(this)) ? 'reply' : 'write'](body));
45
48
  }
49
+ modal(body, options) {
50
+ if (!this.interaction)
51
+ throw new common_1.SeyfertError('CANNOT_USE_MODAL');
52
+ if (options === undefined)
53
+ return this.interaction.modal(body);
54
+ return this.interaction.modal(body, options);
55
+ }
46
56
  async deferReply(ephemeral = false, withResponse) {
47
57
  if (this.interaction)
48
58
  return this.interaction.deferReply(ephemeral ? types_1.MessageFlags.Ephemeral : undefined, withResponse);
@@ -83,7 +93,7 @@ class CommandContext extends basecontext_1.BaseContext {
83
93
  async fetchResponse() {
84
94
  if (this.interaction)
85
95
  return this.interaction.fetchResponse();
86
- return (this.messageResponse = (await this.messageResponse.fetch()));
96
+ return (this.messageResponse = await this.messageResponse.fetch());
87
97
  }
88
98
  channel(mode = 'flow') {
89
99
  if (this.interaction && mode === 'cache')
@@ -107,6 +117,17 @@ class CommandContext extends basecontext_1.BaseContext {
107
117
  return this.client.members.fetch(this.guildId, this.client.botId, mode === 'rest');
108
118
  }
109
119
  }
120
+ fetchMember(mode = 'flow') {
121
+ if (!this.guildId)
122
+ return mode === 'cache' ? (this.client.cache.adapter.isAsync ? Promise.resolve() : undefined) : Promise.resolve();
123
+ switch (mode) {
124
+ case 'cache':
125
+ return (this.client.cache.members?.get(this.author.id, this.guildId) ||
126
+ (this.client.cache.adapter.isAsync ? Promise.resolve() : undefined));
127
+ default:
128
+ return this.client.members.fetch(this.guildId, this.author.id, mode === 'rest');
129
+ }
130
+ }
110
131
  guild(mode = 'flow', query) {
111
132
  if (!this.guildId)
112
133
  return mode === 'cache' ? (this.client.cache.adapter.isAsync ? Promise.resolve() : undefined) : Promise.resolve();
@@ -1,10 +1,11 @@
1
+ import type { PluginMiddlewareDenialMetadata } from '../../client/plugins/types';
1
2
  import { type PermissionStrings } from '../../common';
2
3
  import { ApplicationCommandType, type ApplicationIntegrationType, type EntryPointCommandHandlerType, type InteractionContextType, type LocaleString } from '../../types';
3
- import type { RegisteredMiddlewares } from '../decorators';
4
+ import type { ResolvedRegisteredMiddlewares } from '../decorators';
4
5
  import type { EntryPointContext } from './entrycontext';
5
6
  import type { ExtraProps, UsingClient } from './shared';
6
7
  export declare abstract class EntryPointCommand {
7
- middlewares: (keyof RegisteredMiddlewares)[];
8
+ middlewares: readonly (keyof ResolvedRegisteredMiddlewares)[];
8
9
  __filePath?: string;
9
10
  __t?: {
10
11
  name: string | undefined;
@@ -41,7 +42,7 @@ export declare abstract class EntryPointCommand {
41
42
  abstract run?(context: EntryPointContext): any;
42
43
  onAfterRun?(context: EntryPointContext, error: unknown | undefined): any;
43
44
  onRunError(context: EntryPointContext<never>, error: unknown): any;
44
- onMiddlewaresError(context: EntryPointContext<never>, error: string): any;
45
+ onMiddlewaresError(context: EntryPointContext<never>, error: string, _metadata: PluginMiddlewareDenialMetadata): any;
45
46
  onBotPermissionsFail(context: EntryPointContext<never>, permissions: PermissionStrings): any;
46
47
  onInternalError(client: UsingClient, command: EntryPointCommand, error?: unknown): any;
47
48
  }
@@ -43,7 +43,7 @@ class EntryPointCommand {
43
43
  onRunError(context, error) {
44
44
  context.client.logger.fatal(`${this.name}.<onRunError>`, context.author.id, error);
45
45
  }
46
- onMiddlewaresError(context, error) {
46
+ onMiddlewaresError(context, error, _metadata) {
47
47
  context.client.logger.fatal(`${this.name}.<onMiddlewaresError>`, context.author.id, error);
48
48
  }
49
49
  onBotPermissionsFail(context, permissions) {
@@ -1,25 +1,23 @@
1
1
  import type { ReturnCache } from '../../cache';
2
2
  import type { GuildMemberStructure, GuildStructure, InteractionGuildMemberStructure, UserStructure, WebhookMessageStructure } from '../../client/transformers';
3
- import type { InteractionCreateBodyRequest, InteractionMessageUpdateBodyRequest, MakeRequired, MessageWebhookCreateBodyRequest, ModalCreateBodyRequest, ModalCreateOptions, UnionToTuple, When } from '../../common';
3
+ import type { InteractionCreateBodyRequest, InteractionMessageUpdateBodyRequest, MakeRequired, MessageWebhookCreateBodyRequest, ModalCreateBodyRequest, ModalCreateOptions, When } from '../../common';
4
4
  import type { AllChannels, EntryPointInteraction, ModalSubmitInteraction } from '../../structures';
5
5
  import { type RESTGetAPIGuildQuery } from '../../types';
6
6
  import { BaseContext } from '../basecontext';
7
- import type { RegisteredMiddlewares } from '../decorators';
7
+ import type { ResolvedRegisteredMiddlewares } from '../decorators';
8
8
  import type { EntryPointCommand } from './entryPoint';
9
9
  import type { CommandMetadata, ExtendContext, GlobalMetadata, UsingClient } from './shared';
10
- export interface EntryPointContext<M extends keyof RegisteredMiddlewares = never> extends BaseContext, ExtendContext {
10
+ export interface EntryPointContext<M extends keyof ResolvedRegisteredMiddlewares = never> extends BaseContext, ExtendContext {
11
11
  }
12
- export declare class EntryPointContext<M extends keyof RegisteredMiddlewares = never> extends BaseContext {
12
+ export declare class EntryPointContext<M extends keyof ResolvedRegisteredMiddlewares = never> extends BaseContext {
13
13
  readonly client: UsingClient;
14
14
  readonly interaction: EntryPointInteraction;
15
15
  readonly shardId: number;
16
16
  readonly command: EntryPointCommand;
17
17
  constructor(client: UsingClient, interaction: EntryPointInteraction, shardId: number, command: EntryPointCommand);
18
- metadata: CommandMetadata<UnionToTuple<M>>;
18
+ metadata: CommandMetadata<M>;
19
19
  globalMetadata: GlobalMetadata;
20
- get t(): import("../..").__InternalParseLocale<import("./shared").DefaultLocale> & {
21
- get(locale?: string): import("./shared").DefaultLocale;
22
- };
20
+ get t(): import("../..").SeyfertLocale;
23
21
  get fullCommandName(): string;
24
22
  get deferred(): boolean;
25
23
  write<WR extends boolean = false>(body: InteractionCreateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, void>>;
@@ -44,7 +42,7 @@ export declare class EntryPointContext<M extends keyof RegisteredMiddlewares = n
44
42
  isEntryPoint(): this is EntryPointContext<M>;
45
43
  inGuild(): this is GuildEntryPointContext<M>;
46
44
  }
47
- export interface GuildEntryPointContext<M extends keyof RegisteredMiddlewares = never> extends Omit<MakeRequired<EntryPointContext<M>, 'guildId' | 'member'>, 'guild' | 'me'> {
45
+ export interface GuildEntryPointContext<M extends keyof ResolvedRegisteredMiddlewares = never> extends Omit<MakeRequired<EntryPointContext<M>, 'guildId' | 'member'>, 'guild' | 'me'> {
48
46
  guild(mode?: 'rest' | 'flow'): Promise<GuildStructure<'cached' | 'api'>>;
49
47
  guild(mode: 'cache'): ReturnCache<GuildStructure<'cached'> | undefined>;
50
48
  me(mode?: 'rest' | 'flow'): Promise<GuildMemberStructure>;
@@ -18,7 +18,9 @@ class EntryPointContext extends basecontext_1.BaseContext {
18
18
  metadata = {};
19
19
  globalMetadata = {};
20
20
  get t() {
21
- return this.client.t(this.interaction.locale ?? this.client.langs.defaultLang ?? 'en-US');
21
+ return this.client.t(this.client.langs.preferGuildLocale
22
+ ? (this.interaction.guildLocale ?? this.interaction.locale ?? this.client.langs.defaultLang ?? 'en-US')
23
+ : (this.interaction.locale ?? this.client.langs.defaultLang ?? 'en-US'));
22
24
  }
23
25
  get fullCommandName() {
24
26
  return this.command.name;
@@ -1,10 +1,11 @@
1
+ import type { PluginMiddlewareDenialMetadata } from '../../client/plugins/types';
1
2
  import { type PermissionStrings } from '../../common';
2
3
  import type { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType, LocaleString } from '../../types';
3
- import type { RegisteredMiddlewares } from '../decorators';
4
+ import type { ResolvedRegisteredMiddlewares } from '../decorators';
4
5
  import type { MenuCommandContext } from './menucontext';
5
6
  import type { ExtraProps, UsingClient } from './shared';
6
7
  export declare abstract class ContextMenuCommand {
7
- middlewares: (keyof RegisteredMiddlewares)[];
8
+ middlewares: readonly (keyof ResolvedRegisteredMiddlewares)[];
8
9
  __filePath?: string;
9
10
  __t?: {
10
11
  name: string | undefined;
@@ -41,7 +42,7 @@ export declare abstract class ContextMenuCommand {
41
42
  abstract run?(context: MenuCommandContext<any>): any;
42
43
  onAfterRun?(context: MenuCommandContext<any>, error: unknown | undefined): any;
43
44
  onRunError?(context: MenuCommandContext<any, never>, error: unknown): any;
44
- onMiddlewaresError?(context: MenuCommandContext<any, never>, error: string): any;
45
+ onMiddlewaresError?(context: MenuCommandContext<any, never>, error: string, metadata: PluginMiddlewareDenialMetadata): any;
45
46
  onBotPermissionsFail?(context: MenuCommandContext<any, never>, permissions: PermissionStrings): any;
46
47
  onInternalError?(client: UsingClient, command: ContextMenuCommand, error?: unknown): any;
47
48
  }
@@ -1,26 +1,24 @@
1
1
  import type { ContextMenuCommand, InteractionGuildMemberStructure, ReturnCache } from '../..';
2
2
  import { type GuildMemberStructure, type GuildStructure, type MessageStructure, type UserStructure, type WebhookMessageStructure } from '../../client/transformers';
3
- import { type InteractionCreateBodyRequest, type InteractionMessageUpdateBodyRequest, type MakeRequired, type MessageWebhookCreateBodyRequest, type ModalCreateBodyRequest, type ModalCreateOptions, type UnionToTuple, type When } from '../../common';
3
+ import { type InteractionCreateBodyRequest, type InteractionMessageUpdateBodyRequest, type MakeRequired, type MessageWebhookCreateBodyRequest, type ModalCreateBodyRequest, type ModalCreateOptions, type When } from '../../common';
4
4
  import type { AllChannels, MessageCommandInteraction, ModalSubmitInteraction, UserCommandInteraction } from '../../structures';
5
5
  import { type RESTGetAPIGuildQuery } from '../../types';
6
6
  import { BaseContext } from '../basecontext';
7
- import type { RegisteredMiddlewares } from '../decorators';
7
+ import type { ResolvedRegisteredMiddlewares } from '../decorators';
8
8
  import type { CommandMetadata, ExtendContext, GlobalMetadata, UsingClient } from './shared';
9
9
  export type InteractionTarget<T> = T extends MessageCommandInteraction ? MessageStructure : UserStructure;
10
- export interface MenuCommandContext<T extends MessageCommandInteraction | UserCommandInteraction, M extends keyof RegisteredMiddlewares = never> extends BaseContext, ExtendContext {
10
+ export interface MenuCommandContext<T extends MessageCommandInteraction | UserCommandInteraction, M extends keyof ResolvedRegisteredMiddlewares = never> extends BaseContext, ExtendContext {
11
11
  }
12
- export declare class MenuCommandContext<T extends MessageCommandInteraction | UserCommandInteraction, M extends keyof RegisteredMiddlewares = never> extends BaseContext {
12
+ export declare class MenuCommandContext<T extends MessageCommandInteraction | UserCommandInteraction, M extends keyof ResolvedRegisteredMiddlewares = never> extends BaseContext {
13
13
  readonly client: UsingClient;
14
14
  readonly interaction: T;
15
15
  readonly shardId: number;
16
16
  readonly command: ContextMenuCommand;
17
17
  constructor(client: UsingClient, interaction: T, shardId: number, command: ContextMenuCommand);
18
- metadata: CommandMetadata<UnionToTuple<M>>;
18
+ metadata: CommandMetadata<M>;
19
19
  globalMetadata: GlobalMetadata;
20
20
  get target(): InteractionTarget<T>;
21
- get t(): import("../..").__InternalParseLocale<import("./shared").DefaultLocale> & {
22
- get(locale?: string): import("./shared").DefaultLocale;
23
- };
21
+ get t(): import("../..").SeyfertLocale;
24
22
  get fullCommandName(): string;
25
23
  get deferred(): boolean;
26
24
  write<WR extends boolean = false>(body: InteractionCreateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, void>>;
@@ -47,7 +45,7 @@ export declare class MenuCommandContext<T extends MessageCommandInteraction | Us
47
45
  isMenuMessage(): this is MenuCommandContext<MessageCommandInteraction>;
48
46
  inGuild(): this is GuildMenuCommandContext<T, M>;
49
47
  }
50
- export interface GuildMenuCommandContext<T extends MessageCommandInteraction | UserCommandInteraction, M extends keyof RegisteredMiddlewares = never> extends Omit<MakeRequired<MenuCommandContext<T, M>, 'guildId' | 'member'>, 'guild'> {
48
+ export interface GuildMenuCommandContext<T extends MessageCommandInteraction | UserCommandInteraction, M extends keyof ResolvedRegisteredMiddlewares = never> extends Omit<MakeRequired<MenuCommandContext<T, M>, 'guildId' | 'member'>, 'guild'> {
51
49
  guild(mode?: 'rest' | 'flow'): Promise<GuildStructure<'cached' | 'api'>>;
52
50
  guild(mode: 'cache'): ReturnCache<GuildStructure<'cached'> | undefined>;
53
51
  }
@@ -32,7 +32,9 @@ class MenuCommandContext extends basecontext_1.BaseContext {
32
32
  }
33
33
  }
34
34
  get t() {
35
- return this.client.t(this.interaction.locale ?? this.client.langs.defaultLang ?? 'en-US');
35
+ return this.client.t(this.client.langs.preferGuildLocale
36
+ ? (this.interaction.guildLocale ?? this.interaction.locale ?? this.client.langs.defaultLang ?? 'en-US')
37
+ : (this.interaction.locale ?? this.client.langs.defaultLang ?? 'en-US'));
36
38
  }
37
39
  get fullCommandName() {
38
40
  return this.command.name;
@@ -21,7 +21,7 @@ export interface SeyfertBasicOption<T extends keyof ReturnOptionsTypes, R = true
21
21
  description?: FlatObjectKeys<DefaultLocale>;
22
22
  };
23
23
  }
24
- export interface SeyfertBaseChoiceableOption<T extends keyof ReturnOptionsTypes, C = T extends ChoiceableTypes ? SeyfertChoice<ChoiceableValues[T]>[] : never, R = true | false, VC = never> {
24
+ export interface SeyfertBaseChoiceableOption<T extends keyof ReturnOptionsTypes, C = T extends ChoiceableTypes ? readonly SeyfertChoice<ChoiceableValues[T]>[] : never, R = true | false, VC = never> {
25
25
  required?: R;
26
26
  choices?: C;
27
27
  value?: ValueCallback<T, C, VC>;
@@ -47,25 +47,25 @@ export interface ChoiceableValues {
47
47
  [ApplicationCommandOptionType.Number]: number;
48
48
  [ApplicationCommandOptionType.Integer]: number;
49
49
  }
50
- export type ValueCallback<T extends keyof ReturnOptionsTypes, C = T extends ChoiceableTypes ? SeyfertChoice<ChoiceableValues[T]>[] : keyof SeyfertChannelMap, I = any> = (data: {
50
+ export type ValueCallback<T extends keyof ReturnOptionsTypes, C = T extends ChoiceableTypes ? readonly SeyfertChoice<ChoiceableValues[T]>[] : keyof SeyfertChannelMap, I = any> = (data: {
51
51
  context: CommandContext;
52
- value: T extends ChoiceableTypes ? C extends SeyfertChoice<ChoiceableValues[T]>[] ? C[number]['value'] extends ReturnOptionsTypes[T] ? C[number]['value'] : never : never : C extends keyof SeyfertChannelMap ? SeyfertChannelMap[C] : never;
52
+ value: T extends ChoiceableTypes ? C extends readonly SeyfertChoice<ChoiceableValues[T]>[] ? C[number]['value'] extends ReturnOptionsTypes[T] ? C[number]['value'] : never : never : C extends keyof SeyfertChannelMap ? SeyfertChannelMap[C] : never;
53
53
  }, ok: OKFunction<I>, fail: StopFunction) => Awaitable<void>;
54
- export type SeyfertStringOption<T = SeyfertChoice<string>[], R = boolean, VC = never> = SeyfertBaseChoiceableOption<ApplicationCommandOptionType.String, T, R, VC> & {
55
- autocomplete?: AutocompleteCallback;
56
- onAutocompleteError?: OnAutocompleteErrorCallback;
54
+ export type SeyfertStringOption<T = readonly SeyfertChoice<string>[], R = boolean, VC = never> = SeyfertBaseChoiceableOption<ApplicationCommandOptionType.String, T, R, VC> & {
55
+ autocomplete?: AutocompleteCallback<string>;
56
+ onAutocompleteError?: OnAutocompleteErrorCallback<string>;
57
57
  min_length?: number;
58
58
  max_length?: number;
59
59
  };
60
- export type SeyfertIntegerOption<T = SeyfertChoice<number>[], R = boolean, VC = never> = SeyfertBaseChoiceableOption<ApplicationCommandOptionType.Integer, T, R, VC> & {
61
- autocomplete?: AutocompleteCallback;
62
- onAutocompleteError?: OnAutocompleteErrorCallback;
60
+ export type SeyfertIntegerOption<T = readonly SeyfertChoice<number>[], R = boolean, VC = never> = SeyfertBaseChoiceableOption<ApplicationCommandOptionType.Integer, T, R, VC> & {
61
+ autocomplete?: AutocompleteCallback<number>;
62
+ onAutocompleteError?: OnAutocompleteErrorCallback<number>;
63
63
  min_value?: number;
64
64
  max_value?: number;
65
65
  };
66
- export type SeyfertNumberOption<T = SeyfertChoice<number>[], R = boolean, VC = never> = SeyfertBaseChoiceableOption<ApplicationCommandOptionType.Number, T, R, VC> & {
67
- autocomplete?: AutocompleteCallback;
68
- onAutocompleteError?: OnAutocompleteErrorCallback;
66
+ export type SeyfertNumberOption<T = readonly SeyfertChoice<number>[], R = boolean, VC = never> = SeyfertBaseChoiceableOption<ApplicationCommandOptionType.Number, T, R, VC> & {
67
+ autocomplete?: AutocompleteCallback<number>;
68
+ onAutocompleteError?: OnAutocompleteErrorCallback<number>;
69
69
  min_value?: number;
70
70
  max_value?: number;
71
71
  };
@@ -81,12 +81,12 @@ export type SeyfertChannelOption<C = keyof SeyfertChannelMap, R = true | false,
81
81
  name?: FlatObjectKeys<DefaultLocale>;
82
82
  description?: FlatObjectKeys<DefaultLocale>;
83
83
  };
84
- channel_types?: C[];
84
+ channel_types?: readonly C[];
85
85
  };
86
86
  export type SeyfertRoleOption<R = boolean> = SeyfertBasicOption<ApplicationCommandOptionType.Role, R>;
87
87
  export type SeyfertMentionableOption<R = boolean> = SeyfertBasicOption<ApplicationCommandOptionType.Mentionable, R>;
88
88
  export type SeyfertAttachmentOption<R = boolean> = SeyfertBasicOption<ApplicationCommandOptionType.Attachment, R>;
89
- export declare function createStringOption<R extends boolean, C extends SeyfertChoice<string>[] = SeyfertChoice<string>[], VC = never>(data: SeyfertStringOption<C, R, VC>): {
89
+ export declare function createStringOption<R extends boolean, C extends readonly SeyfertChoice<string>[] = readonly SeyfertChoice<string>[], VC = never>(data: SeyfertStringOption<C, R, VC>): {
90
90
  readonly type: ApplicationCommandOptionType.String;
91
91
  readonly required?: R | undefined;
92
92
  readonly choices?: C | undefined;
@@ -98,12 +98,12 @@ export declare function createStringOption<R extends boolean, C extends SeyfertC
98
98
  name?: FlatObjectKeys<DefaultLocale>;
99
99
  description?: FlatObjectKeys<DefaultLocale>;
100
100
  };
101
- readonly autocomplete?: AutocompleteCallback;
102
- readonly onAutocompleteError?: OnAutocompleteErrorCallback;
101
+ readonly autocomplete?: AutocompleteCallback<string>;
102
+ readonly onAutocompleteError?: OnAutocompleteErrorCallback<string>;
103
103
  readonly min_length?: number;
104
104
  readonly max_length?: number;
105
105
  };
106
- export declare function createIntegerOption<R extends boolean, C extends SeyfertChoice<number>[] = SeyfertChoice<number>[], VC = never>(data: SeyfertIntegerOption<C, R, VC>): {
106
+ export declare function createIntegerOption<R extends boolean, C extends readonly SeyfertChoice<number>[] = readonly SeyfertChoice<number>[], VC = never>(data: SeyfertIntegerOption<C, R, VC>): {
107
107
  readonly type: ApplicationCommandOptionType.Integer;
108
108
  readonly required?: R | undefined;
109
109
  readonly choices?: C | undefined;
@@ -115,12 +115,12 @@ export declare function createIntegerOption<R extends boolean, C extends Seyfert
115
115
  name?: FlatObjectKeys<DefaultLocale>;
116
116
  description?: FlatObjectKeys<DefaultLocale>;
117
117
  };
118
- readonly autocomplete?: AutocompleteCallback;
119
- readonly onAutocompleteError?: OnAutocompleteErrorCallback;
118
+ readonly autocomplete?: AutocompleteCallback<number>;
119
+ readonly onAutocompleteError?: OnAutocompleteErrorCallback<number>;
120
120
  readonly min_value?: number;
121
121
  readonly max_value?: number;
122
122
  };
123
- export declare function createNumberOption<R extends boolean, C extends SeyfertChoice<number>[] = SeyfertChoice<number>[], VC = never>(data: SeyfertNumberOption<C, R, VC>): {
123
+ export declare function createNumberOption<R extends boolean, C extends readonly SeyfertChoice<number>[] = readonly SeyfertChoice<number>[], VC = never>(data: SeyfertNumberOption<C, R, VC>): {
124
124
  readonly type: ApplicationCommandOptionType.Number;
125
125
  readonly required?: R | undefined;
126
126
  readonly choices?: C | undefined;
@@ -132,8 +132,8 @@ export declare function createNumberOption<R extends boolean, C extends SeyfertC
132
132
  name?: FlatObjectKeys<DefaultLocale>;
133
133
  description?: FlatObjectKeys<DefaultLocale>;
134
134
  };
135
- readonly autocomplete?: AutocompleteCallback;
136
- readonly onAutocompleteError?: OnAutocompleteErrorCallback;
135
+ readonly autocomplete?: AutocompleteCallback<number>;
136
+ readonly onAutocompleteError?: OnAutocompleteErrorCallback<number>;
137
137
  readonly min_value?: number;
138
138
  readonly max_value?: number;
139
139
  };
@@ -148,7 +148,7 @@ export declare function createChannelOption<R extends boolean, C extends keyof S
148
148
  name?: FlatObjectKeys<DefaultLocale>;
149
149
  description?: FlatObjectKeys<DefaultLocale>;
150
150
  };
151
- readonly channel_types?: C[] | undefined;
151
+ readonly channel_types?: readonly C[] | undefined;
152
152
  };
153
153
  export declare function createBooleanOption<R extends boolean, T extends SeyfertBooleanOption<R> = SeyfertBooleanOption<R>>(data: T): T & {
154
154
  readonly type: ApplicationCommandOptionType.Boolean;
@@ -1,25 +1,31 @@
1
1
  import type { CategoryChannelStructure, DirectoryChannelStructure, DMChannelStructure, ForumChannelStructure, MediaChannelStructure, NewsChannelStructure, StageChannelStructure, TextGuildChannelStructure, ThreadChannelStructure, VoiceChannelStructure } from '../../client';
2
2
  import type { BaseClient } from '../../client/base';
3
+ import type { RegisteredPluginContext, RegisteredPluginExtension, SeyfertRegistry } from '../../client/plugins';
3
4
  import type { IsStrictlyUndefined } from '../../common';
4
5
  import type { ChannelType } from '../../types';
5
- import type { RegisteredMiddlewares } from '../decorators';
6
+ import type { ResolvedRegisteredMiddlewares } from '../decorators';
6
7
  export type OKFunction<T> = (value: T) => void;
7
- export type StopFunction = (error: string) => void;
8
+ export type StopFunction = (error?: string | null) => void;
8
9
  export type NextFunction<T = unknown> = IsStrictlyUndefined<T> extends true ? () => void : (data: T) => void;
9
- export type PassFunction = () => void;
10
10
  export type InferWithPrefix = InternalOptions extends {
11
11
  withPrefix: infer P;
12
12
  } ? P : false;
13
13
  export interface GlobalMetadata {
14
14
  }
15
- export interface DefaultLocale {
16
- }
17
- export interface ExtendContext {
15
+ export type DefaultLocale = SeyfertRegistry extends {
16
+ langs: infer L extends Record<string, any>;
17
+ } ? L : {};
18
+ export interface ExtendContext extends RegisteredPluginContext {
18
19
  }
19
20
  export interface ExtraProps {
20
21
  }
21
- export interface UsingClient extends BaseClient {
22
- }
22
+ declare const __seyfertClientType: unique symbol;
23
+ type RegisteredClient = SeyfertRegistry extends {
24
+ client: infer C;
25
+ } ? [C] extends [{
26
+ readonly [__seyfertClientType]?: infer T;
27
+ }] ? [T] extends [never] ? BaseClient : unknown extends T ? C extends BaseClient ? C : BaseClient : T & Omit<C, typeof __seyfertClientType> : C extends BaseClient ? C : BaseClient : BaseClient;
28
+ export type UsingClient = BaseClient & RegisteredPluginExtension & RegisteredClient;
23
29
  export interface CustomWorkerClientEvents {
24
30
  }
25
31
  export interface CustomWorkerManagerEvents {
@@ -28,8 +34,10 @@ export interface ExtendedRC {
28
34
  }
29
35
  export interface ExtendedRCLocations {
30
36
  }
31
- export type ParseClient<T extends BaseClient> = T;
32
- export type ParseGlobalMiddlewares<T extends Record<string, MiddlewareContext>> = {
37
+ export type ParseClient<T extends BaseClient> = T & {
38
+ readonly [__seyfertClientType]?: T;
39
+ };
40
+ export type ParseGlobalMiddlewares<T extends Record<string, AnyMiddlewareContext>> = {
33
41
  [K in keyof T]: MetadataMiddleware<T[K]>;
34
42
  };
35
43
  export interface InternalOptions {
@@ -40,16 +48,29 @@ export type MiddlewareContext<T = any, C = any> = (context: {
40
48
  context: C;
41
49
  next: NextFunction<T>;
42
50
  stop: StopFunction;
43
- pass: PassFunction;
44
51
  }) => any;
45
- export type MetadataMiddleware<T extends MiddlewareContext> = IsStrictlyUndefined<Parameters<Parameters<T>[0]['next']>[0]> extends true ? never : Parameters<Parameters<T>[0]['next']>[0];
46
- export type CommandMetadata<T extends readonly (keyof RegisteredMiddlewares)[]> = T extends readonly [
52
+ export type AnyMiddlewareContext = (context: {
53
+ context: any;
54
+ next: any;
55
+ stop: StopFunction;
56
+ }) => any;
57
+ export type MetadataMiddleware<T extends AnyMiddlewareContext> = T extends (context: infer Payload) => any ? Payload extends {
58
+ next: (...args: infer Args) => unknown;
59
+ } ? IsStrictlyUndefined<Args[0]> extends true ? never : Args[0] : never : never;
60
+ type MetadataForMiddleware<T extends keyof ResolvedRegisteredMiddlewares> = ResolvedRegisteredMiddlewares[T] extends infer Middleware extends AnyMiddlewareContext ? MetadataMiddleware<Middleware> : never;
61
+ type OmitNever<T extends object> = {
62
+ [key in keyof T as [T[key]] extends [never] ? never : key]: T[key];
63
+ };
64
+ type MiddlewareMetadata<T extends keyof ResolvedRegisteredMiddlewares> = OmitNever<{
65
+ [key in T]: MetadataForMiddleware<key>;
66
+ }>;
67
+ type CommandMetadataFromUnion<T extends keyof ResolvedRegisteredMiddlewares> = [T] extends [never] ? {} : MiddlewareMetadata<T>;
68
+ type CommandMetadataFromTuple<T extends readonly (keyof ResolvedRegisteredMiddlewares)[]> = T extends readonly [
47
69
  infer first,
48
70
  ...infer rest
49
- ] ? first extends keyof RegisteredMiddlewares ? (MetadataMiddleware<RegisteredMiddlewares[first]> extends never ? {} : {
50
- [key in first]: MetadataMiddleware<RegisteredMiddlewares[first]>;
51
- }) & (rest extends readonly (keyof RegisteredMiddlewares)[] ? CommandMetadata<rest> : never) : {} : {};
52
- export type MessageCommandOptionErrors = ['CHANNEL_TYPES', type: ChannelType[]] | ['STRING_MIN_LENGTH', min: number] | ['STRING_MAX_LENGTH', max: number] | ['STRING_INVALID_CHOICE', choices: readonly {
71
+ ] ? first extends keyof ResolvedRegisteredMiddlewares ? MiddlewareMetadata<first> & (rest extends readonly (keyof ResolvedRegisteredMiddlewares)[] ? CommandMetadataFromTuple<rest> : never) : {} : {};
72
+ export type CommandMetadata<T extends readonly (keyof ResolvedRegisteredMiddlewares)[] | keyof ResolvedRegisteredMiddlewares> = [T] extends [never] ? {} : [T] extends [readonly (keyof ResolvedRegisteredMiddlewares)[]] ? CommandMetadataFromTuple<T> : [T] extends [keyof ResolvedRegisteredMiddlewares] ? CommandMetadataFromUnion<T> : {};
73
+ export type MessageCommandOptionErrors = ['CHANNEL_TYPES', type: readonly ChannelType[]] | ['STRING_MIN_LENGTH', min: number] | ['STRING_MAX_LENGTH', max: number] | ['STRING_INVALID_CHOICE', choices: readonly {
53
74
  name: string;
54
75
  value: string;
55
76
  }[]] | ['NUMBER_NAN', value: string] | ['NUMBER_MIN_VALUE', min: number] | ['NUMBER_MAX_VALUE', max: number] | ['NUMBER_INVALID_CHOICE', choices: readonly {
@@ -84,3 +105,4 @@ export interface SeyfertChannelMap {
84
105
  [ChannelType.GuildForum]: ForumChannelStructure;
85
106
  [ChannelType.GuildMedia]: MediaChannelStructure;
86
107
  }
108
+ export {};