{
+ id?: number;
+ required?: boolean;
+}
+```
+* Extends: Omit<FileUploadComponentData, 'type' | 'required'>
+
+
+
+
+
+### id
+
+
+
+
+### required
+
+
+
+
+
+
+
diff --git a/apps/website/docs/api-reference/commandkit/interfaces/loaded-event.mdx b/apps/website/docs/api-reference/commandkit/interfaces/loaded-event.mdx
index 1db98c4d..5e5d70ca 100644
--- a/apps/website/docs/api-reference/commandkit/interfaces/loaded-event.mdx
+++ b/apps/website/docs/api-reference/commandkit/interfaces/loaded-event.mdx
@@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
## LoadedEvent
-
+
Represents a loaded event with all its listeners.
diff --git a/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx
index d7086b47..079e5369 100644
--- a/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx
+++ b/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx
@@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
## ModalProps
-
+
The properties for the modal component.
diff --git a/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx
index e23ed0cd..fc783063 100644
--- a/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx
+++ b/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx
@@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
## TextInputProps
-
+
diff --git a/apps/website/docs/api-reference/commandkit/types/event-listener.mdx b/apps/website/docs/api-reference/commandkit/types/event-listener.mdx
index c7e99a9a..6185ac77 100644
--- a/apps/website/docs/api-reference/commandkit/types/event-listener.mdx
+++ b/apps/website/docs/api-reference/commandkit/types/event-listener.mdx
@@ -21,6 +21,7 @@ Represents an event listener with its configuration.
type EventListener = {
handler: ListenerFunction;
once: boolean;
+ parallel: boolean;
}
```
@@ -36,6 +37,11 @@ type EventListener = {
+### parallel
+
+
+
+
diff --git a/examples/basic-js/package.json b/examples/basic-js/package.json
index 3595bf4f..d2272fe2 100644
--- a/examples/basic-js/package.json
+++ b/examples/basic-js/package.json
@@ -16,6 +16,6 @@
},
"dependencies": {
"commandkit": "^1.2.0-rc.12",
- "discord.js": "^14.23.2"
+ "discord.js": "^14.24.0"
}
}
diff --git a/examples/basic-ts/package.json b/examples/basic-ts/package.json
index b2d34003..46ae40f4 100644
--- a/examples/basic-ts/package.json
+++ b/examples/basic-ts/package.json
@@ -16,6 +16,6 @@
},
"dependencies": {
"commandkit": "^1.2.0-rc.12",
- "discord.js": "^14.23.2"
+ "discord.js": "^14.24.0"
}
}
diff --git a/examples/deno-ts/package.json b/examples/deno-ts/package.json
index 36dfbce2..ce2f03c8 100644
--- a/examples/deno-ts/package.json
+++ b/examples/deno-ts/package.json
@@ -16,6 +16,6 @@
},
"dependencies": {
"commandkit": "^1.2.0-rc.12",
- "discord.js": "^14.23.2"
+ "discord.js": "^14.24.0"
}
}
diff --git a/examples/with-ai/package.json b/examples/with-ai/package.json
index e0893192..d40684c2 100644
--- a/examples/with-ai/package.json
+++ b/examples/with-ai/package.json
@@ -15,7 +15,7 @@
"@commandkit/tasks": "^1.2.0-rc.12",
"@types/ms": "^2.1.0",
"commandkit": "^1.2.0-rc.12",
- "discord.js": "^14.23.2",
+ "discord.js": "^14.24.0",
"ms": "^2.1.3",
"weather-js": "^2.0.0"
},
diff --git a/examples/with-leveling-system/package.json b/examples/with-leveling-system/package.json
index 29db77d0..29642871 100644
--- a/examples/with-leveling-system/package.json
+++ b/examples/with-leveling-system/package.json
@@ -27,7 +27,7 @@
"@umami/node": "^0.4.0",
"canvacord": "^6.0.2",
"commandkit": "^1.2.0-rc.12",
- "discord.js": "^14.23.2",
+ "discord.js": "^14.24.0",
"murmurhash": "^2.0.1",
"prisma": "^6.8.2",
"sharp": "^0.34.2"
diff --git a/examples/without-cli/package.json b/examples/without-cli/package.json
index 6d556f8d..e73d0021 100644
--- a/examples/without-cli/package.json
+++ b/examples/without-cli/package.json
@@ -11,7 +11,7 @@
},
"dependencies": {
"commandkit": "^1.2.0-rc.12",
- "discord.js": "^14.23.2"
+ "discord.js": "^14.24.0"
},
"devDependencies": {
"@types/node": "^24.3.3",
diff --git a/package.json b/package.json
index a2a88cc5..e74e7762 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,8 @@
"devalue@<5.3.2": ">=5.3.2",
"vite@>=7.0.0 <=7.0.6": ">=7.0.7",
"vite@>=7.1.0 <=7.1.4": ">=7.1.5",
- "axios@<1.12.0": ">=1.12.0"
+ "axios@<1.12.0": ">=1.12.0",
+ "vite@>=7.0.0 <=7.0.7": ">=7.0.8"
},
"onlyBuiltDependencies": [
"@swc/core",
diff --git a/packages/commandkit/src/components/interactive/modal/Modal.ts b/packages/commandkit/src/components/interactive/modal/Modal.ts
index c1c6fb1b..d0d10f5b 100644
--- a/packages/commandkit/src/components/interactive/modal/Modal.ts
+++ b/packages/commandkit/src/components/interactive/modal/Modal.ts
@@ -1,4 +1,9 @@
-import { TextInputBuilder, TextInputStyle } from 'discord.js';
+import {
+ TextInputBuilder,
+ TextInputStyle,
+ FileUploadComponentData,
+ FileUploadBuilder,
+} from 'discord.js';
import { MaybeArray } from '../../common/types';
import { CommandKitElement } from '../../common/element';
import {
@@ -9,6 +14,7 @@ import {
} from './ModalKit';
import { EventInterceptorErrorHandler } from '../../common/EventInterceptor';
import { warnDeprecated } from '../../../utils/warning';
+import { applyId } from '../../display/common';
/**
* The properties for the modal component.
@@ -151,3 +157,39 @@ export function ParagraphInput(
): CommandKitElement<'text-input'> {
return TextInput({ ...props, style: TextInputStyle.Paragraph });
}
+
+export interface FileUploadProps
+ extends Omit {
+ id?: number;
+ required?: boolean;
+}
+
+/**
+ * The file upload component.
+ * @param props The file upload properties.
+ * @returns The commandkit element.
+ * @example
+ */
+export function FileUpload(props: FileUploadProps): FileUploadBuilder {
+ const file = new FileUploadBuilder();
+
+ applyId(props, file);
+
+ if (props.maxValues != null) {
+ file.setMaxValues(props.maxValues);
+ }
+
+ if (props.minValues != null) {
+ file.setMinValues(props.minValues);
+ }
+
+ if (props.customId != null) {
+ file.setCustomId(props.customId);
+ }
+
+ if (props.required != null) {
+ file.setRequired(props.required);
+ }
+
+ return file;
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 72e9acd4..3c4c8118 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -11,8 +11,8 @@ catalogs:
version: 5.9.3
discordjs:
discord.js:
- specifier: ^14.23.2
- version: 14.23.2
+ specifier: ^14.24.0
+ version: 14.24.0
overrides:
next@>=15.0.0 <15.1.2: '>=15.1.2'
@@ -43,6 +43,7 @@ overrides:
vite@>=7.0.0 <=7.0.6: '>=7.0.7'
vite@>=7.1.0 <=7.1.4: '>=7.1.5'
axios@<1.12.0: '>=1.12.0'
+ vite@>=7.0.0 <=7.0.7: '>=7.0.8'
importers:
@@ -105,7 +106,7 @@ importers:
version: link:../../packages/commandkit
discord.js:
specifier: catalog:discordjs
- version: 14.23.2
+ version: 14.24.0
dotenv:
specifier: ^16.4.7
version: 16.6.1
@@ -210,7 +211,7 @@ importers:
version: link:../commandkit
discord.js:
specifier: catalog:discordjs
- version: 14.23.2
+ version: 14.24.0
tsconfig:
specifier: workspace:*
version: link:../tsconfig
@@ -311,7 +312,7 @@ importers:
version: 17.0.33
discord.js:
specifier: catalog:discordjs
- version: 14.23.2
+ version: 14.24.0
tsconfig:
specifier: workspace:*
version: link:../tsconfig
@@ -400,7 +401,7 @@ importers:
version: link:../commandkit
discord.js:
specifier: catalog:discordjs
- version: 14.23.2
+ version: 14.24.0
tsconfig:
specifier: workspace:*
version: link:../tsconfig
@@ -594,7 +595,7 @@ importers:
version: link:../commandkit
discord.js:
specifier: catalog:discordjs
- version: 14.23.2
+ version: 14.24.0
tsconfig:
specifier: workspace:*
version: link:../tsconfig
@@ -609,7 +610,7 @@ importers:
version: link:../commandkit
discord.js:
specifier: catalog:discordjs
- version: 14.23.2
+ version: 14.24.0
tsconfig:
specifier: workspace:*
version: link:../tsconfig
@@ -1686,8 +1687,8 @@ packages:
resolution: {integrity: sha512-cZnkTnmsIlW4G4j5i+h6N/j96uWypVE6QYNckodlp/gTd4EHUZAMRrSsLGuqPra7A1ZXdGlmgf8R7UMttPCRtA==}
engines: {node: '>=20'}
- '@discordjs/builders@1.12.2':
- resolution: {integrity: sha512-AugKmrgRJOHXEyMkABH/hXpAmIBKbYokCEl9VAM4Kh6FvkdobQ+Zhv7AR6K+y5hS7+VQ7gKXPYCe1JQmV07H1g==}
+ '@discordjs/builders@1.13.0':
+ resolution: {integrity: sha512-COK0uU6ZaJI+LA67H/rp8IbEkYwlZf3mAoBI5wtPh5G5cbEQGNhVpzINg2f/6+q/YipnNIKy6fJDg6kMUKUw4Q==}
engines: {node: '>=16.11.0'}
'@discordjs/collection@1.5.3':
@@ -5372,11 +5373,11 @@ packages:
directive-to-hof@0.0.2:
resolution: {integrity: sha512-LXSafC5HhiYxMxAUMgq8TvbgL9TjGwkN5yqndVluDa5DbuuCouSuwGqpwHJadTxm+KZmwBmxJKsGVdOk1NT2uw==}
- discord-api-types@0.38.29:
- resolution: {integrity: sha512-+5BfrjLJN1hrrcK0MxDQli6NSv5lQH7Y3/qaOfk9+k7itex8RkA/UcevVMMLe8B4IKIawr4ITBTb2fBB2vDORg==}
+ discord-api-types@0.38.31:
+ resolution: {integrity: sha512-kC94ANsk8ackj8ENTuO8joTNEL0KtymVhHy9dyEC/s4QAZ7GCx40dYEzQaadyo8w+oP0X8QydE/nzAWRylTGtQ==}
- discord.js@14.23.2:
- resolution: {integrity: sha512-tU2NFr823X3TXEc8KyR/4m296KLxPai4nirN3q9kHCpY4TKj96n9lHZnyLzRNMui8EbL07jg9hgH2PWWfKMGIg==}
+ discord.js@14.24.0:
+ resolution: {integrity: sha512-KNq/ekT8bsmT3ZAfVre8cPbl+DfVYSdlLnDmGZPoz7Cw21LYeWHllRA9MivqNq5b1GPGAxGvyUN1vxbTb/PQWw==}
engines: {node: '>=18'}
dlv@1.1.3:
@@ -11560,12 +11561,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@discordjs/builders@1.12.2':
+ '@discordjs/builders@1.13.0':
dependencies:
'@discordjs/formatters': 0.6.1
'@discordjs/util': 1.1.1
'@sapphire/shapeshift': 4.0.0
- discord-api-types: 0.38.29
+ discord-api-types: 0.38.31
fast-deep-equal: 3.1.3
ts-mixer: 6.0.4
tslib: 2.8.1
@@ -11576,7 +11577,7 @@ snapshots:
'@discordjs/formatters@0.6.1':
dependencies:
- discord-api-types: 0.38.29
+ discord-api-types: 0.38.31
'@discordjs/rest@2.6.0':
dependencies:
@@ -11585,7 +11586,7 @@ snapshots:
'@sapphire/async-queue': 1.5.5
'@sapphire/snowflake': 3.5.3
'@vladfrangu/async_event_emitter': 2.4.6
- discord-api-types: 0.38.29
+ discord-api-types: 0.38.31
magic-bytes.js: 1.12.1
tslib: 2.8.1
undici: 6.21.3
@@ -11600,7 +11601,7 @@ snapshots:
'@sapphire/async-queue': 1.5.5
'@types/ws': 8.18.1
'@vladfrangu/async_event_emitter': 2.4.6
- discord-api-types: 0.38.29
+ discord-api-types: 0.38.31
tslib: 2.8.1
ws: 8.18.3
transitivePeerDependencies:
@@ -12217,7 +12218,7 @@ snapshots:
'@docusaurus/react-loadable@6.0.0(react@19.2.0)':
dependencies:
- '@types/react': 19.1.8
+ '@types/react': 19.2.1
react: 19.2.0
'@docusaurus/remark-plugin-npm2yarn@3.8.1':
@@ -15940,18 +15941,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
- discord-api-types@0.38.29: {}
+ discord-api-types@0.38.31: {}
- discord.js@14.23.2:
+ discord.js@14.24.0:
dependencies:
- '@discordjs/builders': 1.12.2
+ '@discordjs/builders': 1.13.0
'@discordjs/collection': 1.5.3
'@discordjs/formatters': 0.6.1
'@discordjs/rest': 2.6.0
'@discordjs/util': 1.1.1
'@discordjs/ws': 1.2.3
'@sapphire/snowflake': 3.5.3
- discord-api-types: 0.38.29
+ discord-api-types: 0.38.31
fast-deep-equal: 3.1.3
lodash.snakecase: 4.1.1
magic-bytes.js: 1.12.1
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 73b49782..bf013447 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -3,6 +3,6 @@ packages:
- apps/*
catalogs:
discordjs:
- discord.js: ^14.23.2
+ discord.js: ^14.24.0
build:
typescript: ^5.8.3