@mostfeatured/dbi 0.1.2 → 0.1.3

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.
@@ -2,41 +2,94 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hookInteractionListeners = void 0;
4
4
  const customId_1 = require("../utils/customId");
5
- const componentTypes = ["Button", "StringSelectMenu", "UserSelectMenu", "RoleSelectMenu", "ChannelSelectMenu", "MentionableSelectMenu", "Modal"];
5
+ const componentTypes = [
6
+ "Button",
7
+ "StringSelectMenu",
8
+ "UserSelectMenu",
9
+ "RoleSelectMenu",
10
+ "ChannelSelectMenu",
11
+ "MentionableSelectMenu",
12
+ "Modal",
13
+ ];
6
14
  function hookInteractionListeners(dbi) {
7
15
  async function handle(inter) {
8
- const dbiInter = inter.dbiChatInput ?? dbi.data.interactions.find(i => {
9
- let isUsesCustomId = (inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit());
10
- let parsedId = isUsesCustomId ? (0, customId_1.parseCustomId)(dbi, inter.customId) : null;
11
- return ((i.type == "ChatInput"
12
- && (inter.isChatInputCommand() || inter.isAutocomplete())
13
- && i.name == [inter.commandName, inter.options.getSubcommandGroup(false), inter.options.getSubcommand(false)].filter(i => !!i).join(" "))
14
- ||
15
- ((i.type == "MessageContextMenu" || i.type == "UserContextMenu")
16
- && (inter.isMessageContextMenuCommand() || inter.isUserContextMenuCommand())
17
- && inter.commandName == i.name)
18
- ||
19
- (componentTypes.includes(i.type)
20
- && isUsesCustomId
21
- && parsedId?.name == i.name));
22
- });
16
+ const dbiInter = inter.dbiChatInput ??
17
+ dbi.data.interactions.find((i) => {
18
+ let isUsesCustomId = inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit();
19
+ let parsedId = isUsesCustomId
20
+ ? (0, customId_1.parseCustomId)(dbi, inter.customId)
21
+ : null;
22
+ return ((i.type == "ChatInput" &&
23
+ (inter.isChatInputCommand() || inter.isAutocomplete()) &&
24
+ i.name ==
25
+ [
26
+ inter.commandName,
27
+ inter.options.getSubcommandGroup(false),
28
+ inter.options.getSubcommand(false),
29
+ ]
30
+ .filter((i) => !!i)
31
+ .join(" ")) ||
32
+ ((i.type == "MessageContextMenu" || i.type == "UserContextMenu") &&
33
+ (inter.isMessageContextMenuCommand() ||
34
+ inter.isUserContextMenuCommand()) &&
35
+ inter.commandName == i.name) ||
36
+ (componentTypes.includes(i.type) &&
37
+ isUsesCustomId &&
38
+ parsedId?.name == i.name));
39
+ });
23
40
  if (!dbiInter)
24
41
  return;
25
42
  let userLocaleName = inter.locale.split("-")[0];
26
- let userLocale = dbi.data.locales.has(userLocaleName) ? dbi.data.locales.get(userLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale);
27
- let guildLocaleName = inter.guild ? inter.guild.preferredLocale.split("-")[0] : null;
28
- let guildLocale = guildLocaleName ? (dbi.data.locales.has(guildLocaleName) ? dbi.data.locales.get(guildLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale)) : null;
43
+ let userLocale = dbi.data.locales.has(userLocaleName)
44
+ ? dbi.data.locales.get(userLocaleName)
45
+ : dbi.data.locales.get(dbi.config.defaults.locale);
46
+ let guildLocaleName = inter.guild
47
+ ? inter.guild.preferredLocale.split("-")[0]
48
+ : null;
49
+ let guildLocale = guildLocaleName
50
+ ? dbi.data.locales.has(guildLocaleName)
51
+ ? dbi.data.locales.get(guildLocaleName)
52
+ : dbi.data.locales.get(dbi.config.defaults.locale)
53
+ : null;
29
54
  let locale = {
30
55
  user: userLocale,
31
- guild: guildLocale
56
+ guild: guildLocale,
32
57
  };
33
- let data = (inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit()) ? (0, customId_1.parseCustomId)(dbi, inter.customId).data : undefined;
58
+ let data = inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit()
59
+ ? (0, customId_1.parseCustomId)(dbi, inter.customId).data
60
+ : undefined;
34
61
  let other = {};
35
- if (!(await dbi.events.trigger("beforeInteraction", { dbi, interaction: inter, locale, setRateLimit, data, other, dbiInteraction: dbiInter })))
62
+ if (!(await dbi.events.trigger("beforeInteraction", {
63
+ dbi,
64
+ interaction: inter,
65
+ locale,
66
+ setRateLimit,
67
+ data,
68
+ other,
69
+ dbiInteraction: dbiInter,
70
+ })))
36
71
  return;
37
72
  if (inter.isAutocomplete()) {
38
73
  let focussed = inter.options.getFocused(true);
39
- let option = dbiInter.options.find(i => i.name == focussed.name);
74
+ let option = dbiInter.options.find((i) => i.name == focussed.name);
75
+ if (option?.validate) {
76
+ const res = await option.validate({
77
+ value: focussed.value,
78
+ interaction: inter,
79
+ dbiInteraction: dbiInter,
80
+ dbi,
81
+ data,
82
+ other,
83
+ locale,
84
+ step: "Autocomplete",
85
+ });
86
+ if (Array.isArray(res) && res.length > 0) {
87
+ await inter.respond(res);
88
+ return;
89
+ }
90
+ if (res !== true)
91
+ return;
92
+ }
40
93
  if (option?.onComplete) {
41
94
  let response = await option.onComplete({
42
95
  value: focussed.value,
@@ -45,18 +98,18 @@ function hookInteractionListeners(dbi) {
45
98
  dbi,
46
99
  data,
47
100
  other,
48
- locale
101
+ locale,
49
102
  });
50
103
  await inter.respond(response);
51
104
  }
52
105
  return;
53
106
  }
54
107
  let rateLimitKeyMap = {
55
- "User": `${dbiInter.name}_${inter.user.id}`,
56
- "Channel": `${dbiInter.name}_${inter.channelId || "Channel"}`,
57
- "Guild": `${dbiInter.name}_${inter.guildId || "Guild"}`,
58
- "Member": `${dbiInter.name}_${inter.user.id}_${inter.guildId || "Guild"}`,
59
- "Message": `${dbiInter.name}_${inter?.message?.id}`
108
+ User: `${dbiInter.name}_${inter.user.id}`,
109
+ Channel: `${dbiInter.name}_${inter.channelId || "Channel"}`,
110
+ Guild: `${dbiInter.name}_${inter.guildId || "Guild"}`,
111
+ Member: `${dbiInter.name}_${inter.user.id}_${inter.guildId || "Guild"}`,
112
+ Message: `${dbiInter.name}_${inter?.message?.id}`,
60
113
  };
61
114
  for (const type in rateLimitKeyMap) {
62
115
  // @ts-ignore
@@ -75,19 +128,44 @@ function hookInteractionListeners(dbi) {
75
128
  data,
76
129
  rateLimit: {
77
130
  type: key,
78
- ...val
79
- }
131
+ ...val,
132
+ },
80
133
  })) === true)
81
134
  return;
82
135
  }
83
136
  }
84
137
  async function setRateLimit(type, duration) {
85
138
  // @ts-ignore
86
- await dbi.config.store.set(`RateLimit["${rateLimitKeyMap[type]}"]`, { at: Date.now(), duration });
139
+ await dbi.config.store.set(`RateLimit["${rateLimitKeyMap[type]}"]`, {
140
+ at: Date.now(),
141
+ duration,
142
+ });
87
143
  }
88
144
  for (const rateLimit of dbiInter.rateLimits) {
89
145
  await setRateLimit(rateLimit.type, rateLimit.duration);
90
146
  }
147
+ if (inter.isChatInputCommand()) {
148
+ let dcOptions = inter.options
149
+ ._hoistedOptions;
150
+ let dbiOptions = dbiInter.options;
151
+ for (const dcOption of dcOptions) {
152
+ const dbiOption = dbiOptions.find((i) => i.name == dcOption.name);
153
+ if (dbiOption?.validate) {
154
+ const res = await dbiOption.validate({
155
+ value: dcOption.value,
156
+ interaction: inter,
157
+ dbiInteraction: dbiInter,
158
+ dbi,
159
+ data,
160
+ other,
161
+ locale,
162
+ step: "Result",
163
+ });
164
+ if (res !== true)
165
+ return;
166
+ }
167
+ }
168
+ }
91
169
  let arg = {
92
170
  // @ts-ignore
93
171
  dbi,
@@ -102,7 +180,7 @@ function hookInteractionListeners(dbi) {
102
180
  // @ts-ignore
103
181
  data,
104
182
  // @ts-ignore
105
- other
183
+ other,
106
184
  };
107
185
  if (dbi.config.strict) {
108
186
  // @ts-ignore
@@ -119,13 +197,21 @@ function hookInteractionListeners(dbi) {
119
197
  }
120
198
  }
121
199
  // @ts-ignore
122
- dbi.events.trigger("afterInteraction", { dbi, interaction: inter, dbiInteraction: dbiInter, locale, setRateLimit, data, other });
200
+ dbi.events.trigger("afterInteraction", {
201
+ dbi,
202
+ interaction: inter,
203
+ dbiInteraction: dbiInter,
204
+ locale,
205
+ setRateLimit,
206
+ data,
207
+ other,
208
+ });
123
209
  }
124
- dbi.data.clients.forEach(d => {
210
+ dbi.data.clients.forEach((d) => {
125
211
  d.client.on("interactionCreate", handle);
126
212
  });
127
213
  return () => {
128
- dbi.data.clients.forEach(d => {
214
+ dbi.data.clients.forEach((d) => {
129
215
  d.client.off("interactionCreate", handle);
130
216
  });
131
217
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hookInteractionListeners.js","sourceRoot":"","sources":["../../src/methods/hookInteractionListeners.ts"],"names":[],"mappings":"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","sourcesContent":["import { DBI } from \"../DBI\";\r\nimport Discord from \"discord.js\";\r\nimport { parseCustomId } from \"../utils/customId\";\r\nimport { NamespaceEnums } from \"../../generated/namespaceData\";\r\n\r\nconst componentTypes = [\"Button\", \"StringSelectMenu\", \"UserSelectMenu\", \"RoleSelectMenu\", \"ChannelSelectMenu\", \"MentionableSelectMenu\", \"Modal\"]\r\n\r\nexport function hookInteractionListeners(dbi: DBI<NamespaceEnums>): () => any {\r\n async function handle(inter: Discord.Interaction<\"cached\">) {\r\n const dbiInter =\r\n (inter as any).dbiChatInput ?? dbi.data.interactions.find(i => {\r\n let isUsesCustomId = (inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit());\r\n let parsedId = isUsesCustomId ? parseCustomId(dbi, (inter as any).customId) : null;\r\n return (\r\n (\r\n i.type == \"ChatInput\"\r\n && (inter.isChatInputCommand() || inter.isAutocomplete())\r\n && i.name == [inter.commandName, inter.options.getSubcommandGroup(false), inter.options.getSubcommand(false)].filter(i => !!i).join(\" \")\r\n )\r\n ||\r\n (\r\n (i.type == \"MessageContextMenu\" || i.type == \"UserContextMenu\")\r\n && (inter.isMessageContextMenuCommand() || inter.isUserContextMenuCommand())\r\n && inter.commandName == i.name\r\n )\r\n ||\r\n (\r\n componentTypes.includes(i.type)\r\n && isUsesCustomId\r\n && parsedId?.name == i.name\r\n )\r\n )\r\n });\r\n \r\n if (!dbiInter) return;\r\n\r\n let userLocaleName = inter.locale.split(\"-\")[0];\r\n let userLocale = dbi.data.locales.has(userLocaleName) ? dbi.data.locales.get(userLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale);\r\n\r\n let guildLocaleName = inter.guild ? inter.guild.preferredLocale.split(\"-\")[0] : null;\r\n let guildLocale = guildLocaleName ? (dbi.data.locales.has(guildLocaleName) ? dbi.data.locales.get(guildLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale)) : null;\r\n\r\n let locale = {\r\n user: userLocale,\r\n guild: guildLocale\r\n };\r\n\r\n let data = (inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit()) ? parseCustomId(dbi, inter.customId).data : undefined;\r\n\r\n let other = {};\r\n\r\n if (!(await dbi.events.trigger(\"beforeInteraction\", { dbi, interaction: inter, locale, setRateLimit, data, other, dbiInteraction: dbiInter }))) return;\r\n \r\n if (inter.isAutocomplete()) {\r\n let focussed = inter.options.getFocused(true);\r\n let option = (dbiInter.options as any[]).find(i => i.name == focussed.name);\r\n if (option?.onComplete) {\r\n let response = await option.onComplete({\r\n value: focussed.value,\r\n interaction: inter,\r\n dbiInteraction: dbiInter,\r\n dbi,\r\n data,\r\n other,\r\n locale\r\n });\r\n await inter.respond(response);\r\n }\r\n return;\r\n }\r\n\r\n let rateLimitKeyMap = {\r\n \"User\": `${dbiInter.name}_${inter.user.id}`,\r\n \"Channel\": `${dbiInter.name}_${inter.channelId || \"Channel\"}`,\r\n \"Guild\": `${dbiInter.name}_${inter.guildId || \"Guild\"}`,\r\n \"Member\": `${dbiInter.name}_${inter.user.id}_${inter.guildId || \"Guild\"}`,\r\n \"Message\": `${dbiInter.name}_${(inter as any)?.message?.id}`\r\n }\r\n\r\n for (const type in rateLimitKeyMap) {\r\n // @ts-ignore\r\n let key = `RateLimit[\"${rateLimitKeyMap[type]}\"]`;\r\n let val = await dbi.config.store.get(key);\r\n if (val && Date.now() > val.at + val.duration) {\r\n await dbi.config.store.delete(key);\r\n val = null;\r\n }\r\n if (val) {\r\n if ((await dbi.events.trigger(\"interactionRateLimit\", {\r\n dbi,\r\n interaction: inter,\r\n dbiInteraction: dbiInter,\r\n locale,\r\n data,\r\n rateLimit: {\r\n type: key,\r\n ...val\r\n }\r\n })) === true) return;\r\n }\r\n }\r\n\r\n async function setRateLimit(type: string, duration: number) {\r\n // @ts-ignore\r\n await dbi.config.store.set(`RateLimit[\"${rateLimitKeyMap[type]}\"]`, { at: Date.now(), duration });\r\n }\r\n\r\n for (const rateLimit of dbiInter.rateLimits) {\r\n await setRateLimit(rateLimit.type, rateLimit.duration);\r\n }\r\n\r\n let arg = {\r\n // @ts-ignore\r\n dbi,\r\n // @ts-ignore\r\n interaction: inter as any,\r\n // @ts-ignore\r\n dbiInteraction: dbiInter,\r\n // @ts-ignore\r\n locale,\r\n // @ts-ignore\r\n setRateLimit,\r\n // @ts-ignore\r\n data,\r\n // @ts-ignore\r\n other\r\n };\r\n\r\n if (dbi.config.strict) {\r\n // @ts-ignore\r\n await dbiInter.onExecute(arg);\r\n } else {\r\n try {\r\n // @ts-ignore\r\n await dbiInter.onExecute(arg);\r\n } catch (error) {\r\n // @ts-ignore\r\n await dbi.events.trigger(\"interactionError\", Object.assign(arg, { error }));\r\n }\r\n }\r\n \r\n // @ts-ignore\r\n dbi.events.trigger(\"afterInteraction\", { dbi, interaction: inter, dbiInteraction: dbiInter, locale, setRateLimit, data, other });\r\n }\r\n\r\n dbi.data.clients.forEach(d=>{\r\n d.client.on(\"interactionCreate\", handle);\r\n });\r\n\r\n return () => { \r\n dbi.data.clients.forEach(d=>{\r\n d.client.off(\"interactionCreate\", handle);\r\n });\r\n };\r\n}"]}
1
+ {"version":3,"file":"hookInteractionListeners.js","sourceRoot":"","sources":["../../src/methods/hookInteractionListeners.ts"],"names":[],"mappings":"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","sourcesContent":["import { DBI } from \"../DBI\";\r\nimport Discord, { CommandInteractionOption } from \"discord.js\";\r\nimport { parseCustomId } from \"../utils/customId\";\r\nimport { NamespaceEnums } from \"../../generated/namespaceData\";\r\n\r\nconst componentTypes = [\r\n \"Button\",\r\n \"StringSelectMenu\",\r\n \"UserSelectMenu\",\r\n \"RoleSelectMenu\",\r\n \"ChannelSelectMenu\",\r\n \"MentionableSelectMenu\",\r\n \"Modal\",\r\n];\r\n\r\nexport function hookInteractionListeners(dbi: DBI<NamespaceEnums>): () => any {\r\n async function handle(inter: Discord.Interaction<\"cached\">) {\r\n const dbiInter =\r\n (inter as any).dbiChatInput ??\r\n dbi.data.interactions.find((i) => {\r\n let isUsesCustomId =\r\n inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit();\r\n let parsedId = isUsesCustomId\r\n ? parseCustomId(dbi, (inter as any).customId)\r\n : null;\r\n return (\r\n (i.type == \"ChatInput\" &&\r\n (inter.isChatInputCommand() || inter.isAutocomplete()) &&\r\n i.name ==\r\n [\r\n inter.commandName,\r\n inter.options.getSubcommandGroup(false),\r\n inter.options.getSubcommand(false),\r\n ]\r\n .filter((i) => !!i)\r\n .join(\" \")) ||\r\n ((i.type == \"MessageContextMenu\" || i.type == \"UserContextMenu\") &&\r\n (inter.isMessageContextMenuCommand() ||\r\n inter.isUserContextMenuCommand()) &&\r\n inter.commandName == i.name) ||\r\n (componentTypes.includes(i.type) &&\r\n isUsesCustomId &&\r\n parsedId?.name == i.name)\r\n );\r\n });\r\n\r\n if (!dbiInter) return;\r\n\r\n let userLocaleName = inter.locale.split(\"-\")[0];\r\n let userLocale = dbi.data.locales.has(userLocaleName)\r\n ? dbi.data.locales.get(userLocaleName)\r\n : dbi.data.locales.get(dbi.config.defaults.locale);\r\n\r\n let guildLocaleName = inter.guild\r\n ? inter.guild.preferredLocale.split(\"-\")[0]\r\n : null;\r\n let guildLocale = guildLocaleName\r\n ? dbi.data.locales.has(guildLocaleName)\r\n ? dbi.data.locales.get(guildLocaleName)\r\n : dbi.data.locales.get(dbi.config.defaults.locale)\r\n : null;\r\n\r\n let locale = {\r\n user: userLocale,\r\n guild: guildLocale,\r\n };\r\n\r\n let data =\r\n inter.isButton() || inter.isAnySelectMenu() || inter.isModalSubmit()\r\n ? parseCustomId(dbi, inter.customId).data\r\n : undefined;\r\n\r\n let other = {};\r\n\r\n if (\r\n !(await dbi.events.trigger(\"beforeInteraction\", {\r\n dbi,\r\n interaction: inter,\r\n locale,\r\n setRateLimit,\r\n data,\r\n other,\r\n dbiInteraction: dbiInter,\r\n }))\r\n )\r\n return;\r\n\r\n if (inter.isAutocomplete()) {\r\n let focussed = inter.options.getFocused(true);\r\n let option = (dbiInter.options as any[]).find(\r\n (i) => i.name == focussed.name\r\n );\r\n if (option?.validate) {\r\n const res = await option.validate({\r\n value: focussed.value,\r\n interaction: inter,\r\n dbiInteraction: dbiInter,\r\n dbi,\r\n data,\r\n other,\r\n locale,\r\n step: \"Autocomplete\",\r\n });\r\n\r\n if (Array.isArray(res) && res.length > 0) {\r\n await inter.respond(res);\r\n return;\r\n }\r\n\r\n if (res !== true) return;\r\n }\r\n\r\n if (option?.onComplete) {\r\n let response = await option.onComplete({\r\n value: focussed.value,\r\n interaction: inter,\r\n dbiInteraction: dbiInter,\r\n dbi,\r\n data,\r\n other,\r\n locale,\r\n });\r\n await inter.respond(response);\r\n }\r\n return;\r\n }\r\n\r\n let rateLimitKeyMap = {\r\n User: `${dbiInter.name}_${inter.user.id}`,\r\n Channel: `${dbiInter.name}_${inter.channelId || \"Channel\"}`,\r\n Guild: `${dbiInter.name}_${inter.guildId || \"Guild\"}`,\r\n Member: `${dbiInter.name}_${inter.user.id}_${inter.guildId || \"Guild\"}`,\r\n Message: `${dbiInter.name}_${(inter as any)?.message?.id}`,\r\n };\r\n\r\n for (const type in rateLimitKeyMap) {\r\n // @ts-ignore\r\n let key = `RateLimit[\"${rateLimitKeyMap[type]}\"]`;\r\n let val = await dbi.config.store.get(key);\r\n if (val && Date.now() > val.at + val.duration) {\r\n await dbi.config.store.delete(key);\r\n val = null;\r\n }\r\n if (val) {\r\n if (\r\n (await dbi.events.trigger(\"interactionRateLimit\", {\r\n dbi,\r\n interaction: inter,\r\n dbiInteraction: dbiInter,\r\n locale,\r\n data,\r\n rateLimit: {\r\n type: key,\r\n ...val,\r\n },\r\n })) === true\r\n )\r\n return;\r\n }\r\n }\r\n\r\n async function setRateLimit(type: string, duration: number) {\r\n // @ts-ignore\r\n await dbi.config.store.set(`RateLimit[\"${rateLimitKeyMap[type]}\"]`, {\r\n at: Date.now(),\r\n duration,\r\n });\r\n }\r\n\r\n for (const rateLimit of dbiInter.rateLimits) {\r\n await setRateLimit(rateLimit.type, rateLimit.duration);\r\n }\r\n\r\n if (inter.isChatInputCommand()) {\r\n let dcOptions = (inter.options as any)\r\n ._hoistedOptions as CommandInteractionOption[];\r\n let dbiOptions = dbiInter.options as any[];\r\n for (const dcOption of dcOptions) {\r\n const dbiOption = dbiOptions.find((i) => i.name == dcOption.name);\r\n if (dbiOption?.validate) {\r\n const res = await dbiOption.validate({\r\n value: dcOption.value,\r\n interaction: inter,\r\n dbiInteraction: dbiInter,\r\n dbi,\r\n data,\r\n other,\r\n locale,\r\n step: \"Result\",\r\n });\r\n if (res !== true) return;\r\n }\r\n }\r\n }\r\n\r\n let arg = {\r\n // @ts-ignore\r\n dbi,\r\n // @ts-ignore\r\n interaction: inter as any,\r\n // @ts-ignore\r\n dbiInteraction: dbiInter,\r\n // @ts-ignore\r\n locale,\r\n // @ts-ignore\r\n setRateLimit,\r\n // @ts-ignore\r\n data,\r\n // @ts-ignore\r\n other,\r\n };\r\n\r\n if (dbi.config.strict) {\r\n // @ts-ignore\r\n await dbiInter.onExecute(arg);\r\n } else {\r\n try {\r\n // @ts-ignore\r\n await dbiInter.onExecute(arg);\r\n } catch (error) {\r\n // @ts-ignore\r\n await dbi.events.trigger(\r\n \"interactionError\",\r\n Object.assign(arg, { error })\r\n );\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n dbi.events.trigger(\"afterInteraction\", {\r\n dbi,\r\n interaction: inter,\r\n dbiInteraction: dbiInter,\r\n locale,\r\n setRateLimit,\r\n data,\r\n other,\r\n });\r\n }\r\n\r\n dbi.data.clients.forEach((d) => {\r\n d.client.on(\"interactionCreate\", handle);\r\n });\r\n\r\n return () => {\r\n dbi.data.clients.forEach((d) => {\r\n d.client.off(\"interactionCreate\", handle);\r\n });\r\n };\r\n}\r\n"]}
@@ -19,36 +19,50 @@ export type TDBIMinMaxValue = {
19
19
  maxValue?: number;
20
20
  minValue?: number;
21
21
  };
22
- export interface IDBICompleteCtx<TNamespace extends NamespaceEnums, TValueType = string | number> extends IDBIBaseExecuteCtx<TNamespace> {
23
- interaction: Discord.AutocompleteInteraction;
22
+ export type TDBIValidator<TExtends, TValue, TStep extends string, TExpectedResponse = boolean> = {
23
+ validate?: (cfg: TExtends & {
24
+ value: TValue;
25
+ step: TStep;
26
+ }) => Promise<TExpectedResponse> | TExpectedResponse;
27
+ };
28
+ export interface IDBIValuedInteraction<TNamespace extends NamespaceEnums, TInteractionType extends Discord.Interaction, TValueType = string | number> extends IDBIBaseExecuteCtx<TNamespace> {
24
29
  value: TValueType;
30
+ interaction: TInteractionType;
25
31
  }
32
+ export type TDBICompleteCtx<TNamespace extends NamespaceEnums, TValueType = string | number> = IDBIValuedInteraction<TNamespace, Discord.AutocompleteInteraction, TValueType>;
33
+ export type TDBIValidateCtx<TNamespace extends NamespaceEnums, TValueType = string | number> = IDBIValuedInteraction<TNamespace, Discord.Interaction, TValueType>;
34
+ export type TDBICompleter<TNamespace extends NamespaceEnums, TValueType extends number | string> = {
35
+ onComplete(ctx: TDBICompleteCtx<TNamespace, string>): Promise<TDBIValueName<TValueType>[]> | TDBIValueName<TValueType>[];
36
+ };
26
37
  export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
27
38
  dbi: DBI<TNamespace>;
28
39
  constructor(dbi: DBI<TNamespace>);
29
40
  stringAutocomplete(cfg: TDBIBaseOption & TDBIMinMaxLength & {
30
- onComplete(ctx: IDBICompleteCtx<TNamespace, string>): Promise<TDBIValueName<string>[]> | TDBIValueName<string>[];
31
41
  messageCommands?: {
32
42
  rest?: boolean;
33
43
  };
34
- }): {
44
+ } & TDBIValidator<TDBIValidateCtx<TNamespace, string>, string, "Autocomplete" | "Result", boolean | TDBIValueName<string>> & TDBICompleter<TNamespace, string>): {
35
45
  type: Discord.ApplicationCommandOptionType;
36
46
  name: string;
37
47
  autocomplete: boolean;
38
- onComplete: (ctx: IDBICompleteCtx<TNamespace, string>) => Promise<TDBIValueName<string>[]> | TDBIValueName<string>[];
48
+ onComplete: (ctx: TDBICompleteCtx<TNamespace, string>) => TDBIValueName<string>[] | Promise<TDBIValueName<string>[]>;
39
49
  description: string;
40
50
  maxLength: number;
41
51
  max_length: number;
42
52
  minLength: number;
43
53
  min_length: number;
44
54
  required: boolean;
55
+ validate: (cfg: TDBIValidateCtx<TNamespace, string> & {
56
+ value: string;
57
+ step: "Autocomplete" | "Result";
58
+ }) => boolean | TDBIValueName<string> | Promise<boolean | TDBIValueName<string>>;
45
59
  };
46
60
  stringChoices(cfg: TDBIBaseOption & TDBIMinMaxLength & {
47
61
  choices: TDBIValueName<string>[];
48
62
  messageCommands?: {
49
63
  rest?: boolean;
50
64
  };
51
- }): {
65
+ } & TDBIValidator<TDBIValidateCtx<TNamespace, string>, string, "Result", boolean>): {
52
66
  type: Discord.ApplicationCommandOptionType;
53
67
  name: string;
54
68
  choices: TDBIValueName<string>[];
@@ -58,12 +72,16 @@ export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
58
72
  minLength: number;
59
73
  min_length: number;
60
74
  required: boolean;
75
+ validate: (cfg: TDBIValidateCtx<TNamespace, string> & {
76
+ value: string;
77
+ step: "Result";
78
+ }) => boolean | Promise<boolean>;
61
79
  };
62
80
  string(cfg: TDBIBaseOption & TDBIMinMaxLength & {
63
81
  messageCommands?: {
64
82
  rest?: boolean;
65
83
  };
66
- }): {
84
+ } & TDBIValidator<TDBIValidateCtx<TNamespace, string>, string, "Result", boolean>): {
67
85
  type: Discord.ApplicationCommandOptionType;
68
86
  name: string;
69
87
  description: string;
@@ -75,24 +93,30 @@ export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
75
93
  messageCommands: {
76
94
  rest?: boolean;
77
95
  };
96
+ validate: (cfg: TDBIValidateCtx<TNamespace, string> & {
97
+ value: string;
98
+ step: "Result";
99
+ }) => boolean | Promise<boolean>;
78
100
  };
79
- numberAutocomplete(cfg: TDBIBaseOption & TDBIMinMaxValue & {
80
- onComplete(ctx: IDBICompleteCtx<TNamespace, string>): Promise<TDBIValueName<number>[]> | TDBIValueName<number>[];
81
- }): {
101
+ numberAutocomplete(cfg: TDBIBaseOption & TDBIMinMaxValue & TDBIValidator<TDBIValidateCtx<TNamespace, number>, number, "Autocomplete" | "Result", boolean | TDBIValueName<number>> & TDBICompleter<TNamespace, number>): {
82
102
  type: Discord.ApplicationCommandOptionType;
83
103
  name: string;
84
104
  autocomplete: boolean;
85
- onComplete: (ctx: IDBICompleteCtx<TNamespace, string>) => Promise<TDBIValueName<number>[]> | TDBIValueName<number>[];
105
+ onComplete: (ctx: TDBICompleteCtx<TNamespace, string>) => TDBIValueName<number>[] | Promise<TDBIValueName<number>[]>;
86
106
  description: string;
87
107
  maxValue: number;
88
108
  max_value: number;
89
109
  minValue: number;
90
110
  min_value: number;
91
111
  required: boolean;
112
+ validate: (cfg: TDBIValidateCtx<TNamespace, number> & {
113
+ value: number;
114
+ step: "Autocomplete" | "Result";
115
+ }) => boolean | TDBIValueName<number> | Promise<boolean | TDBIValueName<number>>;
92
116
  };
93
117
  numberChoices(cfg: TDBIBaseOption & TDBIMinMaxValue & {
94
118
  choices: TDBIValueName<number>[];
95
- }): {
119
+ } & TDBIValidator<TDBIValidateCtx<TNamespace, number>, number, "Result", boolean>): {
96
120
  type: Discord.ApplicationCommandOptionType;
97
121
  name: string;
98
122
  choices: TDBIValueName<number>[];
@@ -102,8 +126,12 @@ export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
102
126
  minValue: number;
103
127
  min_value: number;
104
128
  required: boolean;
129
+ validate: (cfg: TDBIValidateCtx<TNamespace, number> & {
130
+ value: number;
131
+ step: "Result";
132
+ }) => boolean | Promise<boolean>;
105
133
  };
106
- number(cfg: TDBIBaseOption & TDBIMinMaxValue): {
134
+ number(cfg: TDBIBaseOption & TDBIMinMaxValue & TDBIValidator<TDBIValidateCtx<TNamespace, number>, number, "Result", boolean>): {
107
135
  type: Discord.ApplicationCommandOptionType;
108
136
  name: string;
109
137
  description: string;
@@ -112,24 +140,30 @@ export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
112
140
  minValue: number;
113
141
  min_value: number;
114
142
  required: boolean;
143
+ validate: (cfg: TDBIValidateCtx<TNamespace, number> & {
144
+ value: number;
145
+ step: "Result";
146
+ }) => boolean | Promise<boolean>;
115
147
  };
116
- integerAutocomplete(cfg: TDBIBaseOption & TDBIMinMaxValue & {
117
- onComplete(ctx: IDBICompleteCtx<TNamespace, string>): Promise<TDBIValueName<number>[]> | TDBIValueName<number>[];
118
- }): {
148
+ integerAutocomplete(cfg: TDBIBaseOption & TDBIMinMaxValue & TDBIValidator<TDBIValidateCtx<TNamespace, number>, number, "Autocomplete" | "Result", boolean | TDBIValueName<number>> & TDBICompleter<TNamespace, number>): {
119
149
  type: Discord.ApplicationCommandOptionType;
120
150
  name: string;
121
151
  autocomplete: boolean;
122
- onComplete: (ctx: IDBICompleteCtx<TNamespace, string>) => Promise<TDBIValueName<number>[]> | TDBIValueName<number>[];
152
+ onComplete: (ctx: TDBICompleteCtx<TNamespace, string>) => TDBIValueName<number>[] | Promise<TDBIValueName<number>[]>;
123
153
  description: string;
124
154
  maxValue: number;
125
155
  max_value: number;
126
156
  minValue: number;
127
157
  min_value: number;
128
158
  required: boolean;
159
+ validate: (cfg: TDBIValidateCtx<TNamespace, number> & {
160
+ value: number;
161
+ step: "Autocomplete" | "Result";
162
+ }) => boolean | TDBIValueName<number> | Promise<boolean | TDBIValueName<number>>;
129
163
  };
130
164
  integerChoices(cfg: TDBIBaseOption & TDBIMinMaxValue & {
131
165
  choices: TDBIValueName<number>[];
132
- }): {
166
+ } & TDBIValidator<TDBIValidateCtx<TNamespace, number>, number, "Result", boolean>): {
133
167
  type: Discord.ApplicationCommandOptionType;
134
168
  name: string;
135
169
  choices: TDBIValueName<number>[];
@@ -139,8 +173,12 @@ export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
139
173
  minValue: number;
140
174
  min_value: number;
141
175
  required: boolean;
176
+ validate: (cfg: TDBIValidateCtx<TNamespace, number> & {
177
+ value: number;
178
+ step: "Result";
179
+ }) => boolean | Promise<boolean>;
142
180
  };
143
- integer(cfg: TDBIBaseOption & TDBIMinMaxValue): {
181
+ integer(cfg: TDBIBaseOption & TDBIMinMaxValue & TDBIValidator<TDBIValidateCtx<TNamespace, number>, number, "Result", boolean>): {
144
182
  type: Discord.ApplicationCommandOptionType;
145
183
  name: string;
146
184
  description: string;
@@ -149,6 +187,10 @@ export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
149
187
  minValue: number;
150
188
  min_value: number;
151
189
  required: boolean;
190
+ validate: (cfg: TDBIValidateCtx<TNamespace, number> & {
191
+ value: number;
192
+ step: "Result";
193
+ }) => boolean | Promise<boolean>;
152
194
  };
153
195
  boolean(cfg: TDBIBaseOption): {
154
196
  type: Discord.ApplicationCommandOptionType;
@@ -164,31 +206,47 @@ export declare class DBIChatInputOptions<TNamespace extends NamespaceEnums> {
164
206
  };
165
207
  channel(cfg: TDBIBaseOption & {
166
208
  channelTypes: Discord.ChannelType[];
167
- }): {
209
+ } & TDBIValidator<TDBIValidateCtx<TNamespace, Discord.Channel>, Discord.Channel, "Result", boolean>): {
168
210
  type: Discord.ApplicationCommandOptionType;
169
211
  name: string;
170
212
  description: string;
171
213
  channelTypes: Discord.ChannelType[];
172
214
  channel_types: Discord.ChannelType[];
173
215
  required: boolean;
216
+ validate: (cfg: TDBIValidateCtx<TNamespace, Discord.Channel> & {
217
+ value: Discord.Channel;
218
+ step: "Result";
219
+ }) => boolean | Promise<boolean>;
174
220
  };
175
- role(cfg: TDBIBaseOption): {
221
+ role(cfg: TDBIBaseOption & TDBIValidator<TDBIValidateCtx<TNamespace, Discord.Role>, Discord.Role, "Result", boolean>): {
176
222
  type: Discord.ApplicationCommandOptionType;
177
223
  name: string;
178
224
  description: string;
179
225
  required: boolean;
226
+ validate: (cfg: TDBIValidateCtx<TNamespace, Discord.Role> & {
227
+ value: Discord.Role;
228
+ step: "Result";
229
+ }) => boolean | Promise<boolean>;
180
230
  };
181
- mentionable(cfg: TDBIBaseOption): {
231
+ mentionable(cfg: TDBIBaseOption & TDBIValidator<TDBIValidateCtx<TNamespace, Discord.Role | Discord.Channel | Discord.User>, Discord.Role | Discord.Channel | Discord.User, "Result", boolean>): {
182
232
  type: Discord.ApplicationCommandOptionType;
183
233
  name: string;
184
234
  description: string;
185
235
  required: boolean;
236
+ validate: (cfg: TDBIValidateCtx<TNamespace, Discord.User | Discord.Channel | Discord.Role> & {
237
+ value: Discord.User | Discord.Channel | Discord.Role;
238
+ step: "Result";
239
+ }) => boolean | Promise<boolean>;
186
240
  };
187
- user(cfg: TDBIBaseOption): {
241
+ user(cfg: TDBIBaseOption & TDBIValidator<TDBIValidateCtx<TNamespace, Discord.User>, Discord.User, "Result", boolean>): {
188
242
  type: Discord.ApplicationCommandOptionType;
189
243
  name: string;
190
244
  description: string;
191
245
  required: boolean;
246
+ validate: (cfg: TDBIValidateCtx<TNamespace, Discord.User> & {
247
+ value: Discord.User;
248
+ step: "Result";
249
+ }) => boolean | Promise<boolean>;
192
250
  };
193
251
  }
194
252
  //# sourceMappingURL=ChatInputOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInputOptions.d.ts","sourceRoot":"","sources":["../../../src/types/ChatInput/ChatInputOptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatInputOptions.d.ts","sourceRoot":"","sources":["../../../src/types/ChatInput/ChatInputOptions.ts"],"names":[],"mappings":"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"}