@pikokr/command.ts 3.2.4 → 4.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 (101) hide show
  1. package/dist/applicationCommand/AppCommand.d.ts +18 -0
  2. package/dist/applicationCommand/AppCommand.js +22 -0
  3. package/dist/applicationCommand/AppCommand.js.map +1 -0
  4. package/dist/applicationCommand/decorator.d.ts +10 -0
  5. package/dist/applicationCommand/decorator.js +39 -0
  6. package/dist/applicationCommand/decorator.js.map +1 -0
  7. package/dist/applicationCommand/index.d.ts +2 -0
  8. package/dist/applicationCommand/index.js +15 -0
  9. package/dist/applicationCommand/index.js.map +1 -0
  10. package/dist/builtinModules/BuiltinApplicationCommandConverters.d.ts +8 -0
  11. package/dist/builtinModules/BuiltinApplicationCommandConverters.js +13 -0
  12. package/dist/builtinModules/BuiltinApplicationCommandConverters.js.map +1 -0
  13. package/dist/builtinModules/BuiltinCommandConverters.d.ts +1 -1
  14. package/dist/builtinModules/BuiltinSlashCommandConverters.d.ts +1 -1
  15. package/dist/builtinModules/BuiltinSlashCommandConverters.js.map +1 -1
  16. package/dist/builtinModules/CommandHandler.d.ts +4 -1
  17. package/dist/builtinModules/CommandHandler.js +146 -19
  18. package/dist/builtinModules/CommandHandler.js.map +1 -1
  19. package/dist/builtinModules/index.d.ts +1 -1
  20. package/dist/builtinModules/index.js +1 -1
  21. package/dist/builtinModules/index.js.map +1 -1
  22. package/dist/command/ArgumentConverter.d.ts +3 -3
  23. package/dist/command/ArgumentConverter.js +3 -3
  24. package/dist/command/ArgumentConverter.js.map +1 -1
  25. package/dist/command/Command.d.ts +2 -2
  26. package/dist/command/decorator.d.ts +2 -1
  27. package/dist/command/decorator.js +6 -5
  28. package/dist/command/decorator.js.map +1 -1
  29. package/dist/command/utils.d.ts +2 -2
  30. package/dist/command/utils.js +6 -6
  31. package/dist/command/utils.js.map +1 -1
  32. package/dist/constants.d.ts +3 -2
  33. package/dist/constants.js +4 -3
  34. package/dist/constants.js.map +1 -1
  35. package/dist/error/ArgumentConverterNotFound.d.ts +6 -6
  36. package/dist/error/ArgumentConverterNotFound.js +3 -3
  37. package/dist/error/ArgumentConverterNotFound.js.map +1 -1
  38. package/dist/error/CommandCheckFailed.d.ts +6 -6
  39. package/dist/error/CommandCheckFailed.js +3 -3
  40. package/dist/error/CommandCheckFailed.js.map +1 -1
  41. package/dist/error/checks/SlashCommandGlobalCheckError.d.ts +5 -0
  42. package/dist/error/checks/SlashCommandGlobalCheckError.js +11 -0
  43. package/dist/error/checks/SlashCommandGlobalCheckError.js.map +1 -0
  44. package/dist/index.d.ts +2 -1
  45. package/dist/index.js +2 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/messageComponents/base.d.ts +10 -0
  48. package/dist/messageComponents/base.js +15 -0
  49. package/dist/messageComponents/base.js.map +1 -0
  50. package/dist/messageComponents/button.d.ts +5 -0
  51. package/dist/messageComponents/button.js +28 -0
  52. package/dist/messageComponents/button.js.map +1 -0
  53. package/dist/messageComponents/index.d.ts +2 -0
  54. package/dist/messageComponents/index.js +15 -0
  55. package/dist/messageComponents/index.js.map +1 -0
  56. package/dist/messageComponents/selectMenu.d.ts +5 -0
  57. package/dist/messageComponents/selectMenu.js +28 -0
  58. package/dist/messageComponents/selectMenu.js.map +1 -0
  59. package/dist/slashCommand/decorator.d.ts +1 -0
  60. package/dist/slashCommand/decorator.js +2 -1
  61. package/dist/slashCommand/decorator.js.map +1 -1
  62. package/dist/structures/CommandClient.d.ts +8 -3
  63. package/dist/structures/CommandClient.js +8 -8
  64. package/dist/structures/CommandClient.js.map +1 -1
  65. package/dist/structures/Module.d.ts +6 -4
  66. package/dist/structures/Module.js +6 -3
  67. package/dist/structures/Module.js.map +1 -1
  68. package/dist/structures/Registry.d.ts +6 -4
  69. package/dist/structures/Registry.js +18 -15
  70. package/dist/structures/Registry.js.map +1 -1
  71. package/dist/typings.d.ts +14 -2
  72. package/package.json +2 -4
  73. package/src/applicationCommand/AppCommand.ts +28 -0
  74. package/src/{slashCommand → applicationCommand}/decorator.ts +10 -10
  75. package/src/applicationCommand/index.ts +2 -0
  76. package/src/builtinModules/BuiltinApplicationCommandConverters.ts +12 -0
  77. package/src/builtinModules/CommandHandler.ts +174 -22
  78. package/src/builtinModules/index.ts +1 -1
  79. package/src/command/ArgumentConverter.ts +3 -3
  80. package/src/command/Command.ts +2 -2
  81. package/src/command/decorator.ts +6 -5
  82. package/src/command/utils.ts +9 -9
  83. package/src/constants.ts +4 -2
  84. package/src/error/ArgumentConverterNotFound.ts +4 -4
  85. package/src/error/CommandCheckFailed.ts +4 -4
  86. package/src/error/checks/SlashCommandGlobalCheckError.ts +7 -0
  87. package/src/index.ts +2 -1
  88. package/src/messageComponents/base.ts +12 -0
  89. package/src/messageComponents/button.ts +26 -0
  90. package/src/messageComponents/index.ts +2 -0
  91. package/src/messageComponents/selectMenu.ts +26 -0
  92. package/src/structures/CommandClient.ts +18 -10
  93. package/src/structures/Module.ts +11 -6
  94. package/src/structures/Registry.ts +25 -19
  95. package/src/typings.ts +14 -2
  96. package/test/index.ts +2 -2
  97. package/test/modules/dev.ts +9 -5
  98. package/test/modules/test.ts +88 -15
  99. package/src/builtinModules/BuiltinSlashCommandConverters.ts +0 -23
  100. package/src/slashCommand/SlashCommand.ts +0 -29
  101. package/src/slashCommand/index.ts +0 -2
@@ -1,9 +1,10 @@
1
1
  import { CommandClient } from './CommandClient';
2
2
  import { Module } from './Module';
3
- import { Command, SlashArgumentConverter } from '../command';
3
+ import { Command, ApplicationCommandArgumentConverter } from '../command';
4
4
  import { Collection } from 'discord.js';
5
5
  import { ArgumentConverter } from '../command';
6
- import { SlashCommand } from '../slashCommand';
6
+ import { AppCommand } from '../applicationCommand';
7
+ import { MessageComponentHandler } from '../messageComponents/base';
7
8
  export declare class Registry {
8
9
  client: CommandClient;
9
10
  constructor(client: CommandClient);
@@ -11,8 +12,9 @@ export declare class Registry {
11
12
  private get logger();
12
13
  get commands(): Command[];
13
14
  get argumentConverters(): ArgumentConverter[];
14
- get slashArgumentConverters(): SlashArgumentConverter[];
15
- get slashCommands(): SlashCommand[];
15
+ get applicationCommandArgumentConverters(): ApplicationCommandArgumentConverter[];
16
+ get applicationCommands(): AppCommand[];
17
+ get messageComponentHandlers(): MessageComponentHandler[];
16
18
  registerModule(module: Module): Module;
17
19
  loadModulesIn(dir: string, absolute?: boolean): Promise<void>;
18
20
  loadModule(file: string, absolute?: boolean): Promise<Module>;
@@ -38,7 +38,6 @@ const path_1 = __importDefault(require("path"));
38
38
  const error_1 = require("../error");
39
39
  const discord_js_1 = require("discord.js");
40
40
  const walk_sync_1 = __importDefault(require("walk-sync"));
41
- const v9_1 = require("discord-api-types/v9");
42
41
  const fs = __importStar(require("fs"));
43
42
  class Registry {
44
43
  constructor(client) {
@@ -64,17 +63,24 @@ class Registry {
64
63
  }
65
64
  return result;
66
65
  }
67
- get slashArgumentConverters() {
66
+ get applicationCommandArgumentConverters() {
68
67
  const result = [];
69
68
  for (const [, module] of this.modules) {
70
- result.push(...module.slashArgumentConverters);
69
+ result.push(...module.applicationCommandArgumentConverters);
71
70
  }
72
71
  return result;
73
72
  }
74
- get slashCommands() {
73
+ get applicationCommands() {
75
74
  const result = [];
76
75
  for (const [, module] of this.modules) {
77
- result.push(...module.slashCommands);
76
+ result.push(...module.applicationCommands);
77
+ }
78
+ return result;
79
+ }
80
+ get messageComponentHandlers() {
81
+ const result = [];
82
+ for (const [, module] of this.modules) {
83
+ result.push(...module.messageComponentHandlers);
78
84
  }
79
85
  return result;
80
86
  }
@@ -127,21 +133,20 @@ class Registry {
127
133
  });
128
134
  }
129
135
  syncCommands() {
136
+ var _a;
130
137
  return __awaiter(this, void 0, void 0, function* () {
131
138
  this.logger.debug(`Syncing commands...`);
132
- const commands = this.slashCommands.filter((x) => !x.guild);
133
- const guild = this.client.options.slashCommands.guild;
139
+ const commands = this.applicationCommands.filter((x) => !x.guild);
140
+ const guild = this.client.options.applicationCommands.guild;
134
141
  if (guild) {
135
142
  const syncForGuild = (g) => __awaiter(this, void 0, void 0, function* () {
136
143
  this.logger.debug(`Syncing for guild ${g.name}(${g.id})`);
137
144
  const commandsToRegister = [
138
- ...commands.map((x) => x.commandBuilder),
139
- ...this.slashCommands.filter((y) => { var _a; return y.guild === g.id || ((_a = y.guild) === null || _a === void 0 ? void 0 : _a.includes(g.id)) || false; }).map((x) => x.commandBuilder),
145
+ ...commands.map((x) => x.command),
146
+ ...this.applicationCommands.filter((y) => { var _a; return y.guild === g.id || ((_a = y.guild) === null || _a === void 0 ? void 0 : _a.includes(g.id)) || false; }).map((x) => x.command),
140
147
  ];
141
148
  this.logger.debug(`Command List: ${commandsToRegister.map((x) => x.name).join(', ')}`);
142
- yield this.client.rest.put(v9_1.Routes.applicationGuildCommands(this.client.client.application.id, g.id), {
143
- body: commandsToRegister.map((x) => x.toJSON()),
144
- });
149
+ yield g.commands.set(commandsToRegister);
145
150
  });
146
151
  if (typeof guild === 'string') {
147
152
  yield syncForGuild(yield this.client.client.guilds.fetch(guild));
@@ -154,9 +159,7 @@ class Registry {
154
159
  }
155
160
  else {
156
161
  this.logger.debug('Syncing global...');
157
- yield this.client.rest.put(v9_1.Routes.applicationCommands(this.client.client.application.id), {
158
- body: commands.map((x) => x.commandBuilder.toJSON()),
159
- });
162
+ yield ((_a = this.client.client.application) === null || _a === void 0 ? void 0 : _a.commands.set(commands.map((x) => x.command)));
160
163
  }
161
164
  this.logger.debug('Syncing ended.');
162
165
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../src/structures/Registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../src/structures/Registry.ts"],"names":[],"mappings":"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"}
package/dist/typings.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Command } from './command';
2
2
  import { CommandClient } from './structures';
3
- import { SlashCommand } from './slashCommand';
3
+ import { AppCommand } from './applicationCommand';
4
4
  declare module 'discord.js' {
5
5
  interface Message {
6
6
  data: {
@@ -11,7 +11,19 @@ declare module 'discord.js' {
11
11
  }
12
12
  interface CommandInteraction {
13
13
  data: {
14
- command: SlashCommand;
14
+ command: AppCommand;
15
+ cts: CommandClient;
16
+ };
17
+ }
18
+ interface MessageComponentInteraction {
19
+ data: {
20
+ command: AppCommand;
21
+ cts: CommandClient;
22
+ };
23
+ }
24
+ interface ContextMenuInteraction {
25
+ data: {
26
+ command: AppCommand;
15
27
  cts: CommandClient;
16
28
  };
17
29
  }
package/package.json CHANGED
@@ -1,16 +1,14 @@
1
1
  {
2
2
  "name": "@pikokr/command.ts",
3
3
  "description": "Discord.js command framework for typescript.",
4
- "version": "3.2.4",
4
+ "version": "4.0.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
8
8
  "devDependencies": {
9
- "@discordjs/builders": "^0.6.0",
10
- "@discordjs/rest": "^0.1.0-canary.0",
11
9
  "@types/lodash": "^4.14.172",
12
10
  "all-contributors-cli": "^6.20.0",
13
- "discord.js": "^13.1.0",
11
+ "discord.js": "^13.6.0",
14
12
  "prettier": "^2.2.1",
15
13
  "ts-node": "^10.1.0",
16
14
  "typedoc": "^0.20.35"
@@ -0,0 +1,28 @@
1
+ import { Module } from '../structures'
2
+ import { ApplicationCommandDataResolvable, Snowflake } from 'discord.js'
3
+ import { KApplicationCommandChecks } from '../constants'
4
+ import { ApplicationCommandCheckFunction } from '../command'
5
+
6
+ export type AppCommandArgument = {
7
+ type: any
8
+ name?: string
9
+ }
10
+
11
+ export class AppCommand {
12
+ get checks(): ApplicationCommandCheckFunction[] {
13
+ return Reflect.getMetadata(KApplicationCommandChecks, this.module, this.key) || []
14
+ }
15
+
16
+ execute(module: Module, args: any[]) {
17
+ return this.run.apply(module, args)
18
+ }
19
+
20
+ constructor(
21
+ public command: ApplicationCommandDataResolvable,
22
+ private run: Function,
23
+ public module: Module,
24
+ public params: AppCommandArgument[],
25
+ public guild: Snowflake | Snowflake[] | undefined,
26
+ private key: string | symbol,
27
+ ) {}
28
+ }
@@ -1,15 +1,15 @@
1
- import { Collection, Snowflake } from 'discord.js'
1
+ import { ApplicationCommandDataResolvable, Collection, Snowflake } from 'discord.js'
2
2
  import { checkTarget } from '../utils'
3
- import { KSlashCommandOptions, KSlashCommands } from '../constants'
3
+ import { KSlashCommandOptions, KApplicationCommands } from '../constants'
4
4
  import { Module } from '../structures'
5
- import { SlashCommand } from './SlashCommand'
6
- import { SlashCommandBuilder } from '@discordjs/builders'
5
+ import { AppCommand } from './AppCommand'
7
6
 
8
- type SlashOptions = {
7
+ type ApplicationCommandOptions = {
9
8
  guild: Snowflake | Snowflake[]
9
+ optionTypes?: any[]
10
10
  }
11
11
 
12
- export const slashCommand = (opt: Partial<SlashOptions> & { command: SlashCommandBuilder | Omit<SlashCommandBuilder, 'addSubcommand' | 'addSubcommandGroup'> }) => {
12
+ export const applicationCommand = (opt: Partial<ApplicationCommandOptions> & { command: ApplicationCommandDataResolvable }) => {
13
13
  return (
14
14
  target: Object,
15
15
  propertyKey: string,
@@ -17,13 +17,13 @@ export const slashCommand = (opt: Partial<SlashOptions> & { command: SlashComman
17
17
  ) => {
18
18
  checkTarget(target)
19
19
 
20
- let properties: SlashCommand[] = Reflect.getMetadata(KSlashCommands, target)
20
+ let properties: AppCommand[] = Reflect.getMetadata(KApplicationCommands, target)
21
21
 
22
- const params: any[] = Reflect.getMetadata('design:paramtypes', target, propertyKey)
22
+ const params: any[] = opt.optionTypes ?? Reflect.getMetadata('design:paramtypes', target, propertyKey)
23
23
 
24
24
  const options: Collection<number, string> = Reflect.getMetadata(KSlashCommandOptions, target, propertyKey) || new Collection<number, string>()
25
25
 
26
- const command = new SlashCommand(
26
+ const command = new AppCommand(
27
27
  opt.command,
28
28
  Reflect.get(target, propertyKey),
29
29
  target as Module,
@@ -39,7 +39,7 @@ export const slashCommand = (opt: Partial<SlashOptions> & { command: SlashComman
39
39
  properties.push(command)
40
40
  } else {
41
41
  properties = [command]
42
- Reflect.defineMetadata(KSlashCommands, properties, target)
42
+ Reflect.defineMetadata(KApplicationCommands, properties, target)
43
43
  }
44
44
  }
45
45
  }
@@ -0,0 +1,2 @@
1
+ export * from './decorator'
2
+ export * from './AppCommand'
@@ -0,0 +1,12 @@
1
+ import { BuiltInModule } from './BuiltInModule'
2
+ import { Client } from 'discord.js'
3
+ import { CommandClient } from '../structures'
4
+
5
+ export class BuiltinApplicationCommandConverters extends BuiltInModule {
6
+ client: Client
7
+
8
+ constructor(private cts: CommandClient) {
9
+ super()
10
+ this.client = cts.client
11
+ }
12
+ }
@@ -1,11 +1,24 @@
1
1
  import { BuiltInModule } from './BuiltInModule'
2
2
  import { Registry } from '../structures'
3
3
  import { listener } from '../listener'
4
- import { CommandInteraction, GuildMember, Interaction, Message, Role, User } from 'discord.js'
4
+ import {
5
+ CommandInteraction,
6
+ CommandInteractionOptionResolver,
7
+ GuildMember,
8
+ Interaction,
9
+ Message,
10
+ MessageComponentInteraction,
11
+ MessageContextMenuInteraction,
12
+ Role,
13
+ User,
14
+ UserContextMenuInteraction,
15
+ } from 'discord.js'
5
16
  import { CommandClient } from '../structures'
6
17
  import { Command } from '../command'
7
- import { ArgumentConverterNotFound, ArgumentNotProvided, CommandCheckFailed, SlashArgumentConverterNotFound, SlashCommandCheckFailed } from '../error'
18
+ import { ArgumentConverterNotFound, ArgumentNotProvided, CommandCheckFailed, ApplicationCommandArgumentConverterNotFound, ApplicationCommandCheckFailed } from '../error'
8
19
  import { CommandNotFound } from '../error/CommandNotFound'
20
+ import { SlashCommandGlobalCheckError } from '../error/checks/SlashCommandGlobalCheckError'
21
+ import { MessageComponentHandler } from '../messageComponents/base'
9
22
 
10
23
  export class CommandHandler extends BuiltInModule {
11
24
  private readonly client: CommandClient
@@ -15,6 +28,7 @@ export class CommandHandler extends BuiltInModule {
15
28
  this.client = registry.client
16
29
  }
17
30
 
31
+ // region message command handler
18
32
  @listener('messageCreate')
19
33
  async message(msg: Message) {
20
34
  const error = (error: Error) => this.client.client.emit('commandError', error, msg)
@@ -48,12 +62,16 @@ export class CommandHandler extends BuiltInModule {
48
62
 
49
63
  let cmd: Command | null = null
50
64
 
65
+ const globalAliases = await this.client.options.command.globalAliases(command, msg)
66
+
51
67
  for (const c of this.registry.commands) {
52
- if (c.name === command) {
68
+ const globalAliases2 = await this.client.options.command.globalAliases(c.name, msg)
69
+ const aliases = typeof c.aliases === 'function' ? await c.aliases(msg) : c.aliases
70
+ if ([...aliases, c.name].some((x) => x === command)) {
53
71
  cmd = c
54
72
  break
55
73
  }
56
- if ((typeof c.aliases === 'function' ? await c.aliases(msg) : c.aliases).includes(command)) {
74
+ if (globalAliases.every((x, i) => globalAliases2[i] === x)) {
57
75
  cmd = c
58
76
  break
59
77
  }
@@ -125,36 +143,47 @@ export class CommandHandler extends BuiltInModule {
125
143
  return error(e)
126
144
  }
127
145
  }
146
+ // endregion
128
147
 
148
+ // region slash command handler
129
149
  private async command(i: CommandInteraction) {
130
- const error = (error: Error) => this.client.client.emit('slashCommandError', error, i)
150
+ const error = (error: Error) => this.client.client.emit('applicationCommandError', error, i)
131
151
  try {
132
- const cmd = this.registry.slashCommands.find((x) => x.commandBuilder.name === i.commandName)
152
+ const cmd = this.registry.applicationCommands.find((x) => x.command.type === 'CHAT_INPUT' && x.command.name === i.commandName)
153
+
154
+ if (!cmd) return
133
155
 
134
- const module = this.registry.modules.find((x) => x.slashCommands.includes(cmd!))
156
+ const module = this.registry.modules.find((x) => x.applicationCommands.includes(cmd))
135
157
 
136
158
  if (!module) return
137
159
 
138
160
  const argList: any[] = []
139
161
 
140
- if (!cmd)
141
- return i.reply({
142
- content: 'Unknown command.',
143
- ephemeral: true,
144
- })
145
-
146
162
  i.data = {
147
163
  cts: this.client,
148
164
  command: cmd,
149
165
  }
150
166
 
167
+ if (!(await this.client.options.slashCommands.check(i))) {
168
+ return error(new SlashCommandGlobalCheckError(i))
169
+ }
151
170
  for (const check of cmd.checks) {
152
- if (!(await check(i))) return error(new SlashCommandCheckFailed(i, cmd))
171
+ if (!(await check(i))) return error(new ApplicationCommandCheckFailed(i, cmd))
153
172
  }
154
173
 
155
174
  for (let j = 0; j < cmd.params.length; j++) {
156
175
  const argType = cmd.params[j]
157
- const converter = this.registry.slashArgumentConverters.find((x) => x.type === argType.type)
176
+ const converter = this.registry.applicationCommandArgumentConverters.find((x) => x.type === argType.type)
177
+
178
+ if (argType.type === CommandInteraction) {
179
+ argList.push(i)
180
+ continue
181
+ }
182
+
183
+ if (argType.type === CommandInteractionOptionResolver) {
184
+ argList.push(i.options)
185
+ continue
186
+ }
158
187
 
159
188
  if (argType.name) {
160
189
  switch (argType.type) {
@@ -191,16 +220,119 @@ export class CommandHandler extends BuiltInModule {
191
220
  continue
192
221
  }
193
222
 
194
- if (!converter) return error(new SlashArgumentConverterNotFound(argType, i))
223
+ if (!converter) return error(new ApplicationCommandArgumentConverterNotFound(argType, i))
195
224
 
196
225
  argList.push(await converter.execute(module, i))
197
226
  }
198
227
 
199
- try {
200
- await cmd.execute(module, argList)
201
- } catch (e: any) {
202
- return error(e)
228
+ await cmd.execute(module, argList)
229
+ } catch (e) {
230
+ return error(e)
231
+ }
232
+ }
233
+ // endregion
234
+
235
+ private async messageComponent(i: MessageComponentInteraction) {
236
+ const error = (e: any) => this.client.client.emit('messageComponentError', e)
237
+
238
+ try {
239
+ const handlers: MessageComponentHandler[] = []
240
+
241
+ for (const handler of this.registry.messageComponentHandlers) {
242
+ if (handler.componentId === handler.componentId && handler.componentType === i.componentType) {
243
+ handlers.push(handler)
244
+ }
245
+ }
246
+
247
+ for (const handler of handlers) {
248
+ const module = this.registry.modules.find((x) => x.messageComponentHandlers.includes(handler))
249
+ if (!module) continue
250
+ await handler.run(module, i)
203
251
  }
252
+ } catch (e) {
253
+ error(e)
254
+ }
255
+ }
256
+
257
+ private async userContextMenu(i: UserContextMenuInteraction) {
258
+ const error = (error: Error) => this.client.client.emit('applicationCommandError', error, i)
259
+ try {
260
+ const cmd = this.registry.applicationCommands.find((x) => x.command.type === 'USER' && x.command.name === i.commandName)
261
+
262
+ if (!cmd) return
263
+
264
+ const module = this.registry.modules.find((x) => x.applicationCommands.includes(cmd))
265
+
266
+ if (!module) return
267
+
268
+ i.data = {
269
+ cts: this.client,
270
+ command: cmd,
271
+ }
272
+
273
+ for (const check of cmd.checks) {
274
+ if (!(await check(i))) return error(new ApplicationCommandCheckFailed(i, cmd))
275
+ }
276
+
277
+ let argList: any[] = []
278
+
279
+ for (let j = 0; j < cmd.params.length; j++) {
280
+ const argType = cmd.params[j]
281
+ const converter = this.registry.applicationCommandArgumentConverters.find((x) => x.type === argType.type)
282
+
283
+ if (argType.type === UserContextMenuInteraction) {
284
+ argList.push(i)
285
+ continue
286
+ }
287
+
288
+ if (!converter) return error(new ApplicationCommandArgumentConverterNotFound(argType, i))
289
+
290
+ argList.push(await converter.execute(module, i))
291
+ }
292
+
293
+ await cmd.execute(module, argList)
294
+ } catch (e) {
295
+ return error(e)
296
+ }
297
+ }
298
+
299
+ private async messageContextMenu(i: MessageContextMenuInteraction) {
300
+ const error = (error: Error) => this.client.client.emit('applicationCommandError', error, i)
301
+ try {
302
+ const cmd = this.registry.applicationCommands.find((x) => x.command.type === 'MESSAGE' && x.command.name === i.commandName)
303
+
304
+ if (!cmd) return
305
+
306
+ const module = this.registry.modules.find((x) => x.applicationCommands.includes(cmd))
307
+
308
+ if (!module) return
309
+
310
+ i.data = {
311
+ cts: this.client,
312
+ command: cmd,
313
+ }
314
+
315
+ for (const check of cmd.checks) {
316
+ if (!(await check(i))) return error(new ApplicationCommandCheckFailed(i, cmd))
317
+ }
318
+
319
+ let argList: any[] = []
320
+
321
+ for (let j = 0; j < cmd.params.length; j++) {
322
+ const argType = cmd.params[j]
323
+ const converter = this.registry.applicationCommandArgumentConverters.find((x) => x.type === argType.type)
324
+
325
+ if (argType.type === MessageContextMenuInteraction) {
326
+ argList.push(i)
327
+ continue
328
+ }
329
+
330
+ if (!converter) return error(new ApplicationCommandArgumentConverterNotFound(argType, i))
331
+
332
+ argList.push(await converter.execute(module, i))
333
+ }
334
+
335
+ await cmd.execute(module, argList)
204
336
  } catch (e) {
205
337
  return error(e)
206
338
  }
@@ -208,8 +340,28 @@ export class CommandHandler extends BuiltInModule {
208
340
 
209
341
  @listener('interactionCreate')
210
342
  async interaction(i: Interaction) {
211
- if (i.isCommand()) {
212
- await this.command(i)
343
+ const error = (e: any) => this.client.client.emit('interactionError', e, i)
344
+
345
+ try {
346
+ await this.client.options.applicationCommands.beforeRunCheck(i)
347
+ if (i.isCommand()) {
348
+ await this.command(i)
349
+ return
350
+ }
351
+ if (i.isMessageComponent()) {
352
+ await this.messageComponent(i)
353
+ return
354
+ }
355
+ if (i.isMessageContextMenu()) {
356
+ await this.messageContextMenu(i)
357
+ return
358
+ }
359
+ if (i.isUserContextMenu()) {
360
+ await this.userContextMenu(i)
361
+ return
362
+ }
363
+ } catch (e) {
364
+ return error(e)
213
365
  }
214
366
  }
215
367
  }
@@ -1,3 +1,3 @@
1
1
  export * from './CommandHandler'
2
2
  export * from './BuiltinCommandConverters'
3
- export * from './BuiltinSlashCommandConverters'
3
+ export * from './BuiltinApplicationCommandConverters'
@@ -1,5 +1,5 @@
1
1
  import { Module } from '../structures'
2
- import { CommandInteraction, Message } from 'discord.js'
2
+ import { CommandInteraction, ContextMenuInteraction, Message } from 'discord.js'
3
3
 
4
4
  export class ArgumentConverter {
5
5
  execute(module: Module, msg: Message, arg?: string) {
@@ -9,8 +9,8 @@ export class ArgumentConverter {
9
9
  constructor(public type: object, private run: Function, public withoutParameter: boolean) {}
10
10
  }
11
11
 
12
- export class SlashArgumentConverter {
13
- execute(module: Module, interaction: CommandInteraction) {
12
+ export class ApplicationCommandArgumentConverter {
13
+ execute(module: Module, interaction: CommandInteraction | ContextMenuInteraction) {
14
14
  return this.run.apply(module, [interaction])
15
15
  }
16
16
 
@@ -1,5 +1,5 @@
1
1
  import { Module } from '../structures'
2
- import { CommandInteraction, Message } from 'discord.js'
2
+ import { CommandInteraction, ContextMenuInteraction, Message, MessageComponentInteraction } from 'discord.js'
3
3
  import { KCommandChecks } from '../constants'
4
4
 
5
5
  export type Argument = {
@@ -9,7 +9,7 @@ export type Argument = {
9
9
  }
10
10
 
11
11
  export type CheckFunction = (msg: Message) => boolean | Promise<boolean>
12
- export type SlashCheckFunction = (i: CommandInteraction) => boolean | Promise<boolean>
12
+ export type ApplicationCommandCheckFunction = (i: CommandInteraction | MessageComponentInteraction | ContextMenuInteraction) => boolean | Promise<boolean>
13
13
 
14
14
  export class Command {
15
15
  execute(module: Module, args: any[]) {
@@ -1,7 +1,7 @@
1
1
  import { KArgumentConverters, KCommands, KOptionals, KRest, KSlashArgumentConverters } from '../constants'
2
2
  import { Command } from './Command'
3
3
  import { checkTarget } from '../utils'
4
- import { ArgumentConverter, SlashArgumentConverter } from './ArgumentConverter'
4
+ import { ArgumentConverter, ApplicationCommandArgumentConverter } from './ArgumentConverter'
5
5
  import { Module } from '../structures'
6
6
  import { createCheckDecorator } from './utils'
7
7
  import { GuildMember, Message, PermissionResolvable, Permissions, TextChannel } from 'discord.js'
@@ -10,6 +10,7 @@ import { ClientPermissionRequired, DMOnlyCommandError, GuildOnlyCommandError, Ow
10
10
  type CommandOptions = {
11
11
  name: string
12
12
  aliases: string[] | ((msg: Message) => string[])
13
+ optionTypes?: any[]
13
14
  }
14
15
 
15
16
  export const command = (options: Partial<CommandOptions> = {}) => {
@@ -22,7 +23,7 @@ export const command = (options: Partial<CommandOptions> = {}) => {
22
23
 
23
24
  let properties: Command[] = Reflect.getMetadata(KCommands, target)
24
25
 
25
- const params: any[] = Reflect.getMetadata('design:paramtypes', target, propertyKey)
26
+ const params: any[] = options.optionTypes ?? Reflect.getMetadata('design:paramtypes', target, propertyKey)
26
27
 
27
28
  const optionals: number = Reflect.getMetadata(KOptionals, target, propertyKey) || -1
28
29
 
@@ -71,7 +72,7 @@ export const argumentConverter = (type: object, requireParameter = true) => {
71
72
  }
72
73
  }
73
74
 
74
- export const slashArgumentConverter = (type: object) => {
75
+ export const applicationCommandArgumentConverter = (type: object) => {
75
76
  return (
76
77
  target: Object,
77
78
  propertyKey: string,
@@ -79,9 +80,9 @@ export const slashArgumentConverter = (type: object) => {
79
80
  ) => {
80
81
  checkTarget(target)
81
82
 
82
- let properties: SlashArgumentConverter[] = Reflect.getMetadata(KSlashArgumentConverters, target)
83
+ let properties: ApplicationCommandArgumentConverter[] = Reflect.getMetadata(KSlashArgumentConverters, target)
83
84
 
84
- const converter = new SlashArgumentConverter(type, Reflect.get(target, propertyKey))
85
+ const converter = new ApplicationCommandArgumentConverter(type, Reflect.get(target, propertyKey))
85
86
 
86
87
  if (properties) {
87
88
  properties.push(converter)