Compare commits

...

22 Commits

Author SHA1 Message Date
Jiralite
a03661844f chore(discord.js): release discord.js@14.24.2 2025-10-30 21:20:01 +00:00
Jiralite
fb2b7281e0 fix(GuildMember): joinedAt possibly being NaN
Co-Authored-By: TÆMBØØ <69138346+TAEMBO@users.noreply.github.com>
2025-10-30 21:01:17 +00:00
Jiralite
c303bf3329 chore(discord.js): release discord.js@14.24.1 2025-10-28 15:06:27 +00:00
Danial Raza
c2c8cce1d7 fix(Message): check if in voice based channel for pinnable (#11215)
* fix(Message): check if in voice based channel for `pinnable`

* chore: changes from main

---------

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
2025-10-28 14:59:42 +00:00
Jiralite
abb84ce88f docs(GuildMemberFlagsBitField): remove duplicate word 2025-10-26 10:47:53 +00:00
Jiralite
d317ca1053 types(FileUploadModalData): Correct fields (#11209)
* types(FileUploadModalData): update fields

* docs(FileUploadModalData): `Snowflake`

* types(FileUploadModalData): `Snowflake`

* docs: add more
2025-10-25 23:57:39 +01:00
Jiralite
072fbb228a types(LabelModalData): Singular ModalData (#11207)
types(LabelModalData): no array
2025-10-25 20:13:26 +01:00
Jiralite
548c25488a types(FileUploadComponentData): boolean 2025-10-25 17:17:32 +01:00
Jiralite
16a44f83e5 chore(discord.js): release discord.js@14.24.0 2025-10-24 17:12:01 +01:00
Jiralite
0dda270ea5 build: bump @discordjs/builders 2025-10-24 16:22:20 +01:00
Danial Raza
ee988e3e75 fix(Message): update pinnable to check for migrated guilds (#11189)
* fix(Message): update `pinnable` to check for migrated guilds

* refactor: requested changes

* refactor: no checkAdmin and clean up the mess
2025-10-24 16:05:12 +01:00
Naiyar
104ad754f3 feat: handle file upload component for v14 (#11179)
* feat: handle file upload component

* chore: fix import

* chore: typings

* fix: `Snowflake`

---------

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
2025-10-24 13:19:37 +01:00
Jiralite
0ff239a602 build: bump discord-api-types to 0.38.31 2025-10-23 23:04:14 +01:00
Jiralite
89fd19e08a build: upgrade @discordjs/builders to 1.12.2 2025-10-15 23:16:36 +01:00
Jiralite
6a6c7d0333 build: upgrade discord-api-types to 0.38.30 2025-10-15 23:16:03 +01:00
Jiralite
083f6abb38 chore(discord.js): release discord.js@14.23.2 2025-10-09 02:10:39 +01:00
Jiralite
5cc13b735c fix(ModalSubmitInteraction): Better resolving of components (#11162)
* fix: fix value crash

* fix: use a set

* fix: `const`
2025-10-09 02:05:29 +01:00
Jiralite
1e4d1dc04f fix: handle DM modals 2025-10-08 23:02:34 +01:00
Jiralite
177d81f596 chore(discord.js): release discord.js@14.23.1 2025-10-08 22:13:52 +01:00
Jiralite
bf4cfeb4bf build: upgrade builders to 1.12.1 2025-10-08 22:08:03 +01:00
Jiralite
11b236ff65 fix(ModalSubmitInteraction): Resolve crash on handling populated select menus (#11158)
* fix: handle receiving new selects

* fix: handle missing user object
2025-10-08 22:07:48 +01:00
Almeida
1d5b9837de fix: ending uncached polls (#11157) 2025-10-08 22:04:23 +01:00
13 changed files with 205 additions and 67 deletions

View File

@@ -70,7 +70,7 @@
"@discordjs/ws": "workspace:^",
"@sapphire/snowflake": "^3.5.3",
"@vladfrangu/async_event_emitter": "^2.4.6",
"discord-api-types": "^0.38.29"
"discord-api-types": "^0.38.31"
},
"devDependencies": {
"@discordjs/api-extractor": "workspace:^",

View File

@@ -2,6 +2,52 @@
All notable changes to this project will be documented in this file.
# [14.24.2](https://github.com/discordjs/discord.js/compare/14.24.1...14.24.2) - (2025-10-30)
## Bug Fixes
- **GuildMember:** JoinedAt possibly being NaN ([fb2b728](https://github.com/discordjs/discord.js/commit/fb2b7281e019de9dbd1eb307d9a2ed655c165187))
# [14.24.1](https://github.com/discordjs/discord.js/compare/14.24.0...14.24.1) - (2025-10-28)
## Bug Fixes
- **Message:** Check if in voice based channel for `pinnable` (#11215) ([c2c8cce](https://github.com/discordjs/discord.js/commit/c2c8cce1d77d7afb9da3b0c6a1ee5787e922ec3c))
## Documentation
- **GuildMemberFlagsBitField:** Remove duplicate word ([abb84ce](https://github.com/discordjs/discord.js/commit/abb84ce88f7b9586740855085bb5abc6f0a6282c))
## Typings
- **FileUploadModalData:** Correct fields (#11209) ([d317ca1](https://github.com/discordjs/discord.js/commit/d317ca1053734d6fed651e1e8600750e4d8d16d4))
- **LabelModalData:** Singular `ModalData` (#11207) ([072fbb2](https://github.com/discordjs/discord.js/commit/072fbb228a096e8cfb2a1f55c6170f68bc84345d))
- **FileUploadComponentData:** `boolean` ([548c254](https://github.com/discordjs/discord.js/commit/548c25488a832f8aa274e7834ac57ad9c3e23890))
# [14.24.0](https://github.com/discordjs/discord.js/compare/14.23.2...14.24.0) - (2025-10-24)
## Bug Fixes
- **Message:** Update `pinnable` to check for migrated guilds (#11189) ([ee988e3](https://github.com/discordjs/discord.js/commit/ee988e3e75d39e91a98a572e72a5981e0ef87dbc))
## Features
- Handle file upload component for v14 (#11179) ([104ad75](https://github.com/discordjs/discord.js/commit/104ad754f36933276f3acfd4164f7f19d50dfe2e))
# [14.23.2](https://github.com/discordjs/discord.js/compare/14.23.1...14.23.2) - (2025-10-09)
## Bug Fixes
- **ModalSubmitInteraction:** Better resolving of components (#11162) ([5cc13b7](https://github.com/discordjs/discord.js/commit/5cc13b735c78384a3488da527985cded92f67d41))
- Handle DM modals ([1e4d1dc](https://github.com/discordjs/discord.js/commit/1e4d1dc04f7dabfb0575441957a6278675f02871))
# [14.23.1](https://github.com/discordjs/discord.js/compare/14.23.0...14.23.1) - (2025-10-08)
## Bug Fixes
- **ModalSubmitInteraction:** Resolve crash on handling populated select menus (#11158) ([11b236f](https://github.com/discordjs/discord.js/commit/11b236ff6539f91f11caa3d5a2cc7ae23070aaec))
- Ending uncached polls (#11157) ([1d5b983](https://github.com/discordjs/discord.js/commit/1d5b9837de4036ca6f07f22f714f534463cc35ec))
# [14.23.0](https://github.com/discordjs/discord.js/compare/14.22.1...14.23.0) - (2025-10-08)
## Bug Fixes

View File

@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "discord.js",
"version": "14.23.0",
"version": "14.24.2",
"description": "A powerful library for interacting with the Discord API",
"scripts": {
"test": "pnpm run docs:test && pnpm run test:typescript",
@@ -66,14 +66,14 @@
"homepage": "https://discord.js.org",
"funding": "https://github.com/discordjs/discord.js?sponsor",
"dependencies": {
"@discordjs/builders": "^1.12.0",
"@discordjs/builders": "^1.13.0",
"@discordjs/collection": "1.5.3",
"@discordjs/formatters": "^0.6.1",
"@discordjs/rest": "workspace:^",
"@discordjs/util": "workspace:^",
"@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.10.0",

View File

@@ -85,6 +85,7 @@ class CommandInteraction extends BaseInteraction {
* @property {Collection<Snowflake, GuildMember|APIGuildMember>} [members] The resolved guild members
* @property {Collection<Snowflake, Role|APIRole>} [roles] The resolved roles
* @property {Collection<Snowflake, BaseChannel|APIChannel>} [channels] The resolved channels
* @property {Collection<Snowflake, Attachment>} [attachments] The resolved attachments
*/
/**
@@ -92,7 +93,6 @@ class CommandInteraction extends BaseInteraction {
*
* @typedef {BaseInteractionResolvedData} CommandInteractionResolvedData
* @property {Collection<Snowflake, Message|APIMessage>} [messages] The resolved messages
* @property {Collection<Snowflake, Attachment>} [attachments] The resolved attachments
*/
/**

View File

@@ -24,12 +24,6 @@ class GuildMember extends Base {
*/
this.guild = guild;
/**
* The timestamp the member joined the guild at
* @type {?number}
*/
this.joinedTimestamp = null;
/**
* The last timestamp this member started boosting the guild
* @type {?number}
@@ -95,7 +89,17 @@ class GuildMember extends Base {
this.banner ??= null;
}
if ('joined_at' in data) this.joinedTimestamp = Date.parse(data.joined_at);
if ('joined_at' in data) {
/**
* The timestamp the member joined the guild at
*
* @type {?number}
*/
this.joinedTimestamp = data.joined_at && Date.parse(data.joined_at);
} else {
this.joinedTimestamp ??= null;
}
if ('premium_since' in data) {
this.premiumSinceTimestamp = data.premium_since ? Date.parse(data.premium_since) : null;
}

View File

@@ -781,11 +781,16 @@ class Message extends Base {
*/
get pinnable() {
const { channel } = this;
return Boolean(
!this.system &&
(!this.guild ||
(channel?.viewable &&
channel?.permissionsFor(this.client.user)?.has(PermissionFlagsBits.ManageMessages, false))),
if (this.system) return false;
if (!this.guild) return true;
if (!channel || channel.isVoiceBased() || !channel.viewable) return false;
const permissions = channel?.permissionsFor(this.client.user);
if (!permissions) return false;
return (
permissions.has(PermissionFlagsBits.ReadMessageHistory | PermissionFlagsBits.PinMessages) ||
permissions.has(PermissionFlagsBits.ReadMessageHistory | PermissionFlagsBits.ManageMessages)
);
}

View File

@@ -216,6 +216,17 @@ class ModalSubmitFields {
return null;
}
/**
* Gets file upload component
*
* @param {string} customId The custom id of the component
* @param {boolean} [required=false] Whether to throw an error if the component value is not found or empty
* @returns {?Collection<Snowflake, Attachment>} The uploaded files, or null if none were uploaded and not required
*/
getUploadedFiles(customId, required = false) {
return this._getTypedComponent(customId, [ComponentType.FileUpload], ['attachments'], required).attachments ?? null;
}
}
module.exports = ModalSubmitFields;

View File

@@ -9,6 +9,7 @@ const InteractionResponses = require('./interfaces/InteractionResponses');
const { transformResolved } = require('../util/Util');
const getMessage = lazy(() => require('./Message').Message);
const getAttachment = lazy(() => require('./Attachment'));
/**
* @typedef {Object} BaseModalData
@@ -16,6 +17,13 @@ const getMessage = lazy(() => require('./Message').Message);
* @property {number} id The id of the field
*/
/**
* @typedef {BaseModalData} FileUploadModalData
* @property {string} customId The custom id of the file upload
* @property {Snowflake[]} values The values of the file upload
* @property {Collection<Snowflake, Attachment>} [attachments] The resolved attachments
*/
/**
* @typedef {BaseModalData} TextInputModalData
* @property {string} customId The custom id of the field
@@ -26,10 +34,10 @@ const getMessage = lazy(() => require('./Message').Message);
* @typedef {BaseModalData} SelectMenuModalData
* @property {string} customId The custom id of the field
* @property {string[]} values The values of the field
* @property {Collection<string, GuildMember|APIGuildMember>} [members] The resolved members
* @property {Collection<string, User|APIUser>} [users] The resolved users
* @property {Collection<string, Role|APIRole>} [roles] The resolved roles
* @property {Collection<string, BaseChannel|APIChannel>} [channels] The resolved channels
* @property {Collection<Snowflake, GuildMember|APIGuildMember>} [members] The resolved members
* @property {Collection<Snowflake, User|APIUser>} [users] The resolved users
* @property {Collection<Snowflake, Role|APIRole>} [roles] The resolved roles
* @property {Collection<Snowflake, BaseChannel|APIChannel>} [channels] The resolved channels
*/
/**
@@ -37,7 +45,7 @@ const getMessage = lazy(() => require('./Message').Message);
*/
/**
* @typedef {SelectMenuModalData|TextInputModalData} ModalData
* @typedef {SelectMenuModalData|TextInputModalData|FileUploadModalData} ModalData
*/
/**
@@ -80,7 +88,10 @@ class ModalSubmitInteraction extends BaseInteraction {
* @type {Array<ActionRowModalData | LabelModalData | TextDisplayModalData>}
*/
this.components = data.data.components?.map(component =>
ModalSubmitInteraction.transformComponent(component, data.data.resolved),
ModalSubmitInteraction.transformComponent(component, data.data.resolved, {
client: this.client,
guild: this.guild,
}),
);
/**
@@ -121,14 +132,17 @@ class ModalSubmitInteraction extends BaseInteraction {
* Transforms component data to discord.js-compatible data
* @param {*} rawComponent The data to transform
* @param {APIInteractionDataResolved} [resolved] The resolved data for the interaction
* @param {*} [extra] Extra data required for the transformation
* @returns {ModalData[]}
*/
static transformComponent(rawComponent, resolved) {
static transformComponent(rawComponent, resolved, { client, guild } = {}) {
if ('components' in rawComponent) {
return {
type: rawComponent.type,
id: rawComponent.id,
components: rawComponent.components.map(component => this.transformComponent(component, resolved)),
components: rawComponent.components.map(component =>
this.transformComponent(component, resolved, { client, guild }),
),
};
}
@@ -136,7 +150,7 @@ class ModalSubmitInteraction extends BaseInteraction {
return {
type: rawComponent.type,
id: rawComponent.id,
component: this.transformComponent(rawComponent.component, resolved),
component: this.transformComponent(rawComponent.component, resolved, { client, guild }),
};
}
@@ -152,33 +166,64 @@ class ModalSubmitInteraction extends BaseInteraction {
if (rawComponent.values) {
data.values = rawComponent.values;
/* eslint-disable max-depth */
if (resolved) {
const resolveCollection = (resolvedData, resolver) => {
const collection = new Collection();
for (const value of data.values) {
if (resolvedData?.[value]) {
collection.set(value, resolver(resolvedData[value]));
const { members, users, channels, roles, attachments } = resolved;
const valueSet = new Set(rawComponent.values);
if (users) {
data.users = new Collection();
for (const [id, user] of Object.entries(users)) {
if (valueSet.has(id)) {
data.users.set(id, client.users._add(user));
}
}
}
return collection.size ? collection : null;
};
if (channels) {
data.channels = new Collection();
const users = resolveCollection(resolved.users, user => this.client.users._add(user));
if (users) data.users = users;
for (const [id, apiChannel] of Object.entries(channels)) {
if (valueSet.has(id)) {
data.channels.set(id, client.channels._add(apiChannel, guild) ?? apiChannel);
}
}
}
const channels = resolveCollection(
resolved.channels,
channel => this.client.channels._add(channel, this.guild) ?? channel,
);
if (channels) data.channels = channels;
if (members) {
data.members = new Collection();
const members = resolveCollection(resolved.members, member => this.guild?.members._add(member) ?? member);
if (members) data.members = members;
for (const [id, member] of Object.entries(members)) {
if (valueSet.has(id)) {
const user = users?.[id];
data.members.set(id, guild?.members._add({ user, ...member }) ?? member);
}
}
}
const roles = resolveCollection(resolved.roles, role => this.guild?.roles._add(role) ?? role);
if (roles) data.roles = roles;
if (roles) {
data.roles = new Collection();
for (const [id, role] of Object.entries(roles)) {
if (valueSet.has(id)) {
data.roles.set(id, guild?.roles._add(role) ?? role);
}
}
}
if (attachments) {
data.attachments = new Collection();
for (const [id, attachment] of Object.entries(attachments)) {
if (valueSet.has(id)) {
data.attachments.set(id, new (getAttachment())(attachment));
}
}
}
}
/* eslint-enable max-depth */
}
return data;

View File

@@ -164,7 +164,7 @@ class Poll extends Base {
* @returns {Promise<Message>}
*/
async end() {
if (Date.now() > this.expiresTimestamp) {
if (this.expiresTimestamp !== null && Date.now() > this.expiresTimestamp) {
throw new DiscordjsError(ErrorCodes.PollAlreadyExpired);
}

View File

@@ -23,7 +23,8 @@ const { ComponentType } = require('discord-api-types/v10');
/**
* @typedef {StringSelectMenuComponentData|TextInputComponentData|UserSelectMenuComponentData|
* RoleSelectMenuComponentData|MentionableSelectMenuComponentData|ChannelSelectMenuComponentData} ComponentInLabelData
* RoleSelectMenuComponentData|MentionableSelectMenuComponentData|ChannelSelectMenuComponentData|
* FileUploadComponentData} ComponentInLabelData
*/
/**
@@ -43,6 +44,14 @@ const { ComponentType } = require('discord-api-types/v10');
* @property {string} [url] The URL of the button
*/
/**
* @typedef {BaseComponentData} FileUploadComponentData
* @property {string} customId The custom id of the file upload
* @property {number} [minValues] The minimum number of files that can be uploaded (0-10)
* @property {number} [maxValues] The maximum number of files that can be uploaded (1-10)
* @property {boolean} [required] Whether this component is required in modals
*/
/**
* @typedef {BaseComponentData} BaseSelectMenuComponentData
* @property {string} customId The custom id of the select menu

View File

@@ -9,7 +9,8 @@ const BitField = require('./BitField');
*/
class GuildMemberFlagsBitField extends BitField {
/**
* Numeric guild guild member flags.
* Numeric guild member flags.
*
* @type {GuildMemberFlags}
* @memberof GuildMemberFlagsBitField
*/

View File

@@ -367,7 +367,8 @@ export type ComponentInLabelData =
| UserSelectMenuComponentData
| ChannelSelectMenuComponentData
| RoleSelectMenuComponentData
| MentionableSelectMenuComponentData;
| MentionableSelectMenuComponentData
| FileUploadComponentData;
export interface LabelComponentData extends BaseComponentData {
type: ComponentType.Label;
@@ -2823,10 +2824,16 @@ export interface SelectMenuModalData<Cached extends CacheType = CacheType>
values: readonly string[];
}
export type ModalData = SelectMenuModalData | TextInputModalData;
export interface FileUploadModalData extends BaseModalData<ComponentType.FileUpload> {
customId: string;
values: readonly Snowflake[];
attachments: ReadonlyCollection<Snowflake, Attachment>;
}
export type ModalData = FileUploadModalData | SelectMenuModalData | TextInputModalData;
export interface LabelModalData extends BaseModalData<ComponentType.Label> {
component: readonly ModalData[];
component: ModalData;
}
export interface ActionRowModalData extends BaseModalData<ComponentType.ActionRow> {
components: readonly TextInputModalData[];
@@ -2900,6 +2907,8 @@ export class ModalSubmitFields<Cached extends CacheType = CacheType> {
public getSelectedMentionables(customId: string, required: true): ModalSelectedMentionables<Cached>;
public getSelectedMentionables(customId: string, required?: boolean): ModalSelectedMentionables<Cached> | null;
public getUploadedFiles(customId: string, required: true): ReadonlyCollection<Snowflake, Attachment>;
public getUploadedFiles(customId: string, required?: boolean): ReadonlyCollection<Snowflake, Attachment> | null;
}
export interface ModalMessageModalSubmitInteraction<Cached extends CacheType = CacheType>
@@ -6184,6 +6193,7 @@ export interface CommandInteractionOption<Cached extends CacheType = CacheType>
}
export interface BaseInteractionResolvedData<Cached extends CacheType = CacheType> {
attachments?: ReadonlyCollection<Snowflake, Attachment>;
channels?: ReadonlyCollection<Snowflake, CacheTypeReducer<Cached, Channel, APIInteractionDataResolvedChannel>>;
members?: ReadonlyCollection<Snowflake, CacheTypeReducer<Cached, GuildMember, APIInteractionDataResolvedGuildMember>>;
roles?: ReadonlyCollection<Snowflake, CacheTypeReducer<Cached, Role, APIRole>>;
@@ -6192,7 +6202,6 @@ export interface BaseInteractionResolvedData<Cached extends CacheType = CacheTyp
export interface CommandInteractionResolvedData<Cached extends CacheType = CacheType>
extends BaseInteractionResolvedData<Cached> {
attachments?: ReadonlyCollection<Snowflake, Attachment>;
messages?: ReadonlyCollection<Snowflake, CacheTypeReducer<Cached, Message, APIMessage>>;
}
@@ -7430,6 +7439,14 @@ export interface TextInputComponentData extends BaseComponentData {
placeholder?: string;
}
export interface FileUploadComponentData extends BaseComponentData {
customId: string;
maxValues?: number;
minValues?: number;
required?: boolean;
type: ComponentType.FileUpload;
}
export type MessageTarget =
| Interaction
| InteractionWebhook

32
pnpm-lock.yaml generated
View File

@@ -816,8 +816,8 @@ importers:
specifier: ^2.4.6
version: 2.4.6
discord-api-types:
specifier: ^0.38.29
version: 0.38.29
specifier: ^0.38.31
version: 0.38.31
devDependencies:
'@discordjs/api-extractor':
specifier: workspace:^
@@ -932,8 +932,8 @@ importers:
packages/discord.js:
dependencies:
'@discordjs/builders':
specifier: ^1.12.0
version: 1.12.0
specifier: ^1.13.0
version: 1.13.0
'@discordjs/collection':
specifier: 1.5.3
version: 1.5.3
@@ -953,8 +953,8 @@ importers:
specifier: 3.5.3
version: 3.5.3
discord-api-types:
specifier: ^0.38.29
version: 0.38.29
specifier: ^0.38.31
version: 0.38.31
fast-deep-equal:
specifier: 3.1.3
version: 3.1.3
@@ -2789,8 +2789,8 @@ packages:
resolution: {integrity: sha512-4JINx4Rttha29f50PBsJo48xZXx/He5yaIWJRwVarhYAN947+S84YciHl+AIhQNRPAFkg8+5qFngEGtKxQDWXA==}
engines: {node: '>=18.18.0'}
'@discordjs/builders@1.12.0':
resolution: {integrity: sha512-jQ0m/fVOg6j3w2Rrzrg5VfqPpkslYNnpdTAyQzQXQ7S/5y0iScBnMlVZfu/AFLP9C34shQ4I+EpTGZV1VlN7RQ==}
'@discordjs/builders@1.13.0':
resolution: {integrity: sha512-COK0uU6ZaJI+LA67H/rp8IbEkYwlZf3mAoBI5wtPh5G5cbEQGNhVpzINg2f/6+q/YipnNIKy6fJDg6kMUKUw4Q==}
engines: {node: '>=16.11.0'}
'@discordjs/collection@1.5.3':
@@ -8360,8 +8360,8 @@ packages:
discord-api-types@0.38.24:
resolution: {integrity: sha512-P7/DkcFIiIoaBogStnhhcGRX7KR+gIFp0SpmwsZUIM0bgDkYMEUx+8l+t3quYc/KSgg92wvE9w/4mabO57EMug==}
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==}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
@@ -16321,12 +16321,12 @@ snapshots:
tar-stream: 3.1.7
which: 4.0.0
'@discordjs/builders@1.12.0':
'@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
@@ -16337,7 +16337,7 @@ snapshots:
'@discordjs/formatters@0.6.1':
dependencies:
discord-api-types: 0.38.29
discord-api-types: 0.38.31
'@discordjs/rest@2.5.1':
dependencies:
@@ -16346,7 +16346,7 @@ snapshots:
'@sapphire/async-queue': 1.5.3
'@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.10.0
tslib: 2.8.1
undici: 6.21.3
@@ -16361,7 +16361,7 @@ snapshots:
'@sapphire/async-queue': 1.5.3
'@types/ws': 8.5.12
'@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.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
transitivePeerDependencies:
@@ -23716,7 +23716,7 @@ snapshots:
discord-api-types@0.38.24: {}
discord-api-types@0.38.29: {}
discord-api-types@0.38.31: {}
dlv@1.1.3: {}