diff --git a/package-lock.json b/package-lock.json index c480502..3ad30e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,6 @@ "eslint": "^8.8.0", "prettier": "2.6.2", "standard-version": "^9.3.2", - "typedoc": "^0.22.11", "typescript": "^4.5.5" } }, @@ -1548,21 +1547,21 @@ "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" }, "node_modules/discord.js": { - "version": "14.0.0-dev.1654776344-94bdcac", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.0.0-dev.1654776344-94bdcac.tgz", - "integrity": "sha512-NEm4xSh2ea+tEjCPwFJojkRsa5Ebf3jQP6Rgb/+XTzQfFHmD5VKpCC9Qmg9bobOEhnrS6c2yIEUOjWUFyT4AjA==", + "version": "14.0.0-dev.1656029343-5d3dd55", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.0.0-dev.1656029343-5d3dd55.tgz", + "integrity": "sha512-l4KWWQXJsnce+v4QFqn2ELtUzVQbTY6rHTN4PGB/hflQRpNehS/tXGcjTeH+Wpn4vhtfg1sC0oVYrGu4gNsDdA==", "dependencies": { "@discordjs/builders": "^0.16.0-dev", "@discordjs/collection": "^0.8.0-dev", "@discordjs/rest": "^0.6.0-dev", "@sapphire/snowflake": "^3.2.2", "@types/ws": "^8.5.3", - "discord-api-types": "^0.33.4", + "discord-api-types": "^0.33.5", "fast-deep-equal": "^3.1.3", "lodash.snakecase": "^4.1.1", "tslib": "^2.4.0", - "undici": "^5.4.0", - "ws": "^8.7.0" + "undici": "^5.5.1", + "ws": "^8.8.0" }, "engines": { "node": ">=16.9.0" @@ -2597,12 +2596,6 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -2764,12 +2757,6 @@ "node": ">=10" } }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -2789,18 +2776,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz", - "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -3587,17 +3562,6 @@ "node": ">=8" } }, - "node_modules/shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4047,68 +4011,6 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "node_modules/typedoc": { - "version": "0.22.17", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.17.tgz", - "integrity": "sha512-h6+uXHVVCPDaANzjwzdsj9aePBjZiBTpiMpBBeyh1zcN2odVsDCNajz8zyKnixF93HJeGpl34j/70yoEE5BfNg==", - "dev": true, - "dependencies": { - "glob": "^8.0.3", - "lunr": "^2.3.9", - "marked": "^4.0.16", - "minimatch": "^5.1.0", - "shiki": "^0.10.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 12.10.0" - }, - "peerDependencies": { - "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/typescript": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", @@ -4136,9 +4038,9 @@ } }, "node_modules/undici": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.4.0.tgz", - "integrity": "sha512-A1SRXysDg7J+mVP46jF+9cKANw0kptqSFZ8tGyL+HBiv0K1spjxPX8Z4EGu+Eu6pjClJUBdnUPlxrOafR668/g==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.5.1.tgz", + "integrity": "sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw==", "engines": { "node": ">=12.18" } @@ -4181,18 +4083,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vscode-oniguruma": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", - "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4303,9 +4193,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", - "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", + "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", "engines": { "node": ">=10.0.0" }, @@ -5567,21 +5457,21 @@ "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" }, "discord.js": { - "version": "14.0.0-dev.1654776344-94bdcac", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.0.0-dev.1654776344-94bdcac.tgz", - "integrity": "sha512-NEm4xSh2ea+tEjCPwFJojkRsa5Ebf3jQP6Rgb/+XTzQfFHmD5VKpCC9Qmg9bobOEhnrS6c2yIEUOjWUFyT4AjA==", + "version": "14.0.0-dev.1656029343-5d3dd55", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.0.0-dev.1656029343-5d3dd55.tgz", + "integrity": "sha512-l4KWWQXJsnce+v4QFqn2ELtUzVQbTY6rHTN4PGB/hflQRpNehS/tXGcjTeH+Wpn4vhtfg1sC0oVYrGu4gNsDdA==", "requires": { "@discordjs/builders": "^0.16.0-dev", "@discordjs/collection": "^0.8.0-dev", "@discordjs/rest": "^0.6.0-dev", "@sapphire/snowflake": "^3.2.2", "@types/ws": "^8.5.3", - "discord-api-types": "^0.33.4", + "discord-api-types": "^0.33.5", "fast-deep-equal": "^3.1.3", "lodash.snakecase": "^4.1.1", "tslib": "^2.4.0", - "undici": "^5.4.0", - "ws": "^8.7.0" + "undici": "^5.5.1", + "ws": "^8.8.0" } }, "doctrine": { @@ -6384,12 +6274,6 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -6517,12 +6401,6 @@ "yallist": "^4.0.0" } }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -6536,12 +6414,6 @@ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "marked": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz", - "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==", - "dev": true - }, "meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -7112,17 +6984,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", - "dev": true, - "requires": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -7451,52 +7312,6 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typedoc": { - "version": "0.22.17", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.17.tgz", - "integrity": "sha512-h6+uXHVVCPDaANzjwzdsj9aePBjZiBTpiMpBBeyh1zcN2odVsDCNajz8zyKnixF93HJeGpl34j/70yoEE5BfNg==", - "dev": true, - "requires": { - "glob": "^8.0.3", - "lunr": "^2.3.9", - "marked": "^4.0.16", - "minimatch": "^5.1.0", - "shiki": "^0.10.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, "typescript": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", @@ -7511,9 +7326,9 @@ "optional": true }, "undici": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.4.0.tgz", - "integrity": "sha512-A1SRXysDg7J+mVP46jF+9cKANw0kptqSFZ8tGyL+HBiv0K1spjxPX8Z4EGu+Eu6pjClJUBdnUPlxrOafR668/g==" + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.5.1.tgz", + "integrity": "sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw==" }, "uri-js": { "version": "4.4.1", @@ -7553,18 +7368,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "vscode-oniguruma": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", - "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", - "dev": true - }, - "vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7647,9 +7450,9 @@ "dev": true }, "ws": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", - "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", + "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", "requires": {} }, "xtend": { diff --git a/src/handler/events/interactionCreate.ts b/src/handler/events/interactionCreate.ts index 543db94..ac1fda4 100644 --- a/src/handler/events/interactionCreate.ts +++ b/src/handler/events/interactionCreate.ts @@ -14,9 +14,13 @@ import Context from '../structures/context'; import { controller } from '../sern'; import type { Module } from '../structures/module'; import { + isApplicationCommand, + isAutocomplete, isButton, isChatInputCommand, + isMessageComponent, isMessageCtxMenuCmd, + isModalSubmit, isPromise, isSelectMenu, isUserContextMenuCmd, @@ -179,24 +183,24 @@ export function onInteractionCreate(wrapper: Wrapper) { .pipe( /*processing plugins*/ concatMap(interaction => { - if (interaction.isCommand()) { + if (isApplicationCommand(interaction)) { const modul = Files.ApplicationCommands[interaction.commandType].get( interaction.commandName, ) ?? Files.BothCommands.get(interaction.commandName); return applicationCommandHandler(modul, interaction); } - if (interaction.isMessageComponent()) { + if (isMessageComponent(interaction)) { const modul = Files.MessageCompCommands[interaction.componentType].get( interaction.customId, ); return messageComponentInteractionHandler(modul, interaction); } - if (interaction.isModalSubmit()) { + if (isModalSubmit(interaction)) { const modul = Files.ModalSubmitCommands.get(interaction.customId); return modalHandler(modul, interaction); } - if (interaction.isAutocomplete()) { + if (isAutocomplete(interaction)) { const modul = Files.ApplicationCommands['1'].get(interaction.commandName) ?? Files.BothCommands.get(interaction.commandName); diff --git a/src/handler/events/readyEvent.ts b/src/handler/events/readyEvent.ts index d6b05c2..13b1292 100644 --- a/src/handler/events/readyEvent.ts +++ b/src/handler/events/readyEvent.ts @@ -1,19 +1,7 @@ -import { - concat, - concatMap, - from, - fromEvent, - map, - Observable, - of, - skip, - take, - throwError, -} from 'rxjs'; +import { concat, concatMap, from, fromEvent, map, Observable, of, skip, take } from 'rxjs'; import { basename } from 'path'; import * as Files from '../utilities/readFile'; import type Wrapper from '../structures/wrapper'; -import { controller } from '../sern'; import type { Result } from 'ts-results'; import { Err, Ok } from 'ts-results'; import type { Awaitable } from 'discord.js'; @@ -53,7 +41,7 @@ export function onReady(wrapper: Wrapper) { if (cmdPluginRes.err) { return cmdPluginRes.val; } - return of({ mod, cmdPluginRes: cmdPluginRes.unwrap() }); + return of({ mod, cmdPluginRes: cmdPluginRes.val }); }), ); @@ -71,6 +59,7 @@ export function onReady(wrapper: Wrapper) { .pipe( concatMap(pl => from( + //refactor, this allocates too many objects Promise.all( pl.cmdPluginsRes.map(async e => ({ ...e, execute: await e.execute })), ), @@ -78,7 +67,7 @@ export function onReady(wrapper: Wrapper) { ), ) .subscribe(({ mod, cmdPluginsRes }) => { - const loadedPluginsCorrectly = cmdPluginsRes.every(res => res.execute.ok); + const loadedPluginsCorrectly = cmdPluginsRes.every(({ execute }) => execute.ok); if (loadedPluginsCorrectly) { const res = registerModule(mod); if (res.err) { diff --git a/src/handler/utilities/predicates.ts b/src/handler/utilities/predicates.ts index 83276b3..b5d8b28 100644 --- a/src/handler/utilities/predicates.ts +++ b/src/handler/utilities/predicates.ts @@ -15,6 +15,12 @@ import type { SernEventCommand, } from '../structures/events'; import { CommandType } from '../..'; +import { + AutocompleteInteraction, + Interaction, + InteractionType, + ModalSubmitInteraction, +} from 'discord.js'; export function correctModuleType( plug: Module | undefined, @@ -49,7 +55,24 @@ export function isUserContextMenuCmd( return i.isUserContextMenuCommand(); } -export function isPromise(promiseLike: Awaitable): promiseLike is Promise { +export function isApplicationCommand(interaction: Interaction): interaction is CommandInteraction { + return interaction.type === InteractionType.ApplicationCommand; +} + +export function isModalSubmit(interaction: Interaction): interaction is ModalSubmitInteraction { + return interaction.type === InteractionType.ModalSubmit; +} +export function isAutocomplete(interaction: Interaction): interaction is AutocompleteInteraction { + return interaction.type === InteractionType.ApplicationCommandAutocomplete; +} + +export function isMessageComponent( + interaction: Interaction, +): interaction is MessageComponentInteraction { + return interaction.type === InteractionType.MessageComponent; +} + +export function isPromise(promiseLike: Awaitable): promiseLike is PromiseLike { const keys = new Set(Object.keys(promiseLike)); return keys.has('then') && keys.has('catch'); }