discord.js 15.0.0-dev.1735776715-ad0d9a295 → 15.0.0-dev.1735905892-bacc08b45

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "discord.js",
4
- "version": "15.0.0-dev.1735776715-ad0d9a295",
4
+ "version": "15.0.0-dev.1735905892-bacc08b45",
5
5
  "description": "A powerful library for interacting with the Discord API",
6
6
  "main": "./src/index.js",
7
7
  "types": "./typings/index.d.ts",
@@ -61,9 +61,9 @@
61
61
  "tslib": "^2.8.1",
62
62
  "undici": "6.21.0",
63
63
  "@discordjs/formatters": "^0.5.0",
64
- "@discordjs/util": "^1.1.1",
64
+ "@discordjs/rest": "^2.4.0",
65
65
  "@discordjs/ws": "^2.0.0",
66
- "@discordjs/rest": "^2.4.0"
66
+ "@discordjs/util": "^1.1.1"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@favware/cliff-jumper": "^4.1.0",
@@ -81,8 +81,8 @@
81
81
  "turbo": "^2.3.3",
82
82
  "typescript": "~5.5.4",
83
83
  "@discordjs/api-extractor": "^7.38.1",
84
- "@discordjs/scripts": "^0.1.0",
85
- "@discordjs/docgen": "^0.12.1"
84
+ "@discordjs/docgen": "^0.12.1",
85
+ "@discordjs/scripts": "^0.1.0"
86
86
  },
87
87
  "engines": {
88
88
  "node": ">=20"
@@ -129,6 +129,9 @@
129
129
  * @property {'BulkBanUsersOptionEmpty'} BulkBanUsersOptionEmpty
130
130
 
131
131
  * @property {'PollAlreadyExpired'} PollAlreadyExpired
132
+
133
+ * @property {'PermissionOverwritesTypeMandatory'} PermissionOverwritesTypeMandatory
134
+ * @property {'PermissionOverwritesTypeMismatch'} PermissionOverwritesTypeMismatch
132
135
  */
133
136
 
134
137
  const keys = [
@@ -258,6 +261,9 @@ const keys = [
258
261
  'BulkBanUsersOptionEmpty',
259
262
 
260
263
  'PollAlreadyExpired',
264
+
265
+ 'PermissionOverwritesTypeMandatory',
266
+ 'PermissionOverwritesTypeMismatch',
261
267
  ];
262
268
 
263
269
  // JSDoc for IntelliSense purposes
@@ -144,6 +144,11 @@ const Messages = {
144
144
  [DjsErrorCodes.BulkBanUsersOptionEmpty]: 'Option "users" array or collection is empty',
145
145
 
146
146
  [DjsErrorCodes.PollAlreadyExpired]: 'This poll has already expired.',
147
+
148
+ [DjsErrorCodes.PermissionOverwritesTypeMandatory]: '"overwrite.type" is mandatory if "overwrite.id" is a Snowflake',
149
+ [DjsErrorCodes.PermissionOverwritesTypeMismatch]: expected =>
150
+ `"overwrite.id" is a ${expected.toLowerCase()} object, ` +
151
+ `but "overwrite.type" is defined and not equal to OverwriteType.${expected}`,
147
152
  };
148
153
 
149
154
  module.exports = Messages;
@@ -160,7 +160,7 @@ class PermissionOverwrites extends Base {
160
160
  * @property {GuildMemberResolvable|RoleResolvable} id Member or role this overwrite is for
161
161
  * @property {PermissionResolvable} [allow] The permissions to allow
162
162
  * @property {PermissionResolvable} [deny] The permissions to deny
163
- * @property {OverwriteType} [type] The type of this OverwriteData
163
+ * @property {OverwriteType} [type] The type of this OverwriteData (mandatory if `id` is a Snowflake)
164
164
  */
165
165
 
166
166
  /**
@@ -171,21 +171,31 @@ class PermissionOverwrites extends Base {
171
171
  */
172
172
  static resolve(overwrite, guild) {
173
173
  if (overwrite instanceof this) return overwrite.toJSON();
174
- if (typeof overwrite.id === 'string' && overwrite.type in OverwriteType) {
175
- return {
176
- id: overwrite.id,
177
- type: overwrite.type,
178
- allow: PermissionsBitField.resolve(overwrite.allow ?? PermissionsBitField.DefaultBit).toString(),
179
- deny: PermissionsBitField.resolve(overwrite.deny ?? PermissionsBitField.DefaultBit).toString(),
180
- };
174
+
175
+ const id = guild.roles.resolveId(overwrite.id) ?? guild.client.users.resolveId(overwrite.id);
176
+ if (!id) {
177
+ throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'overwrite.id', 'GuildMemberResolvable or RoleResolvable');
178
+ }
179
+
180
+ if (overwrite.type !== undefined && (typeof overwrite.type !== 'number' || !(overwrite.type in OverwriteType))) {
181
+ throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'overwrite.type', 'OverwriteType', true);
181
182
  }
182
183
 
183
- const userOrRole = guild.roles.cache.get(overwrite.id) ?? guild.client.users.cache.get(overwrite.id);
184
- if (!userOrRole) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'parameter', 'User nor a Role');
185
- const type = userOrRole instanceof Role ? OverwriteType.Role : OverwriteType.Member;
184
+ let type;
185
+ if (typeof overwrite.id === 'string') {
186
+ if (overwrite.type === undefined) {
187
+ throw new DiscordjsTypeError(ErrorCodes.PermissionOverwritesTypeMandatory);
188
+ }
189
+ type = overwrite.type;
190
+ } else {
191
+ type = overwrite.id instanceof Role ? OverwriteType.Role : OverwriteType.Member;
192
+ if (overwrite.type !== undefined && type !== overwrite.type) {
193
+ throw new DiscordjsTypeError(ErrorCodes.PermissionOverwritesTypeMismatch, OverwriteType[type]);
194
+ }
195
+ }
186
196
 
187
197
  return {
188
- id: userOrRole.id,
198
+ id,
189
199
  type,
190
200
  allow: PermissionsBitField.resolve(overwrite.allow ?? PermissionsBitField.DefaultBit).toString(),
191
201
  deny: PermissionsBitField.resolve(overwrite.deny ?? PermissionsBitField.DefaultBit).toString(),
@@ -6519,13 +6519,23 @@ export interface MultipleShardSpawnOptions {
6519
6519
  timeout?: number;
6520
6520
  }
6521
6521
 
6522
- export interface OverwriteData {
6522
+ export interface BaseOverwriteData {
6523
6523
  allow?: PermissionResolvable;
6524
6524
  deny?: PermissionResolvable;
6525
6525
  id: GuildMemberResolvable | RoleResolvable;
6526
6526
  type?: OverwriteType;
6527
6527
  }
6528
6528
 
6529
+ export interface OverwriteDataWithMandatoryType extends BaseOverwriteData {
6530
+ type: OverwriteType;
6531
+ }
6532
+
6533
+ export interface OverwriteDataWithOptionalType extends BaseOverwriteData {
6534
+ id: Exclude<GuildMemberResolvable | RoleResolvable, Snowflake>;
6535
+ }
6536
+
6537
+ export type OverwriteData = OverwriteDataWithMandatoryType | OverwriteDataWithOptionalType;
6538
+
6529
6539
  export type OverwriteResolvable = PermissionOverwrites | OverwriteData;
6530
6540
 
6531
6541
  export type PermissionFlags = Record<keyof typeof PermissionFlagsBits, bigint>;
@@ -6519,13 +6519,23 @@ export interface MultipleShardSpawnOptions {
6519
6519
  timeout?: number;
6520
6520
  }
6521
6521
 
6522
- export interface OverwriteData {
6522
+ export interface BaseOverwriteData {
6523
6523
  allow?: PermissionResolvable;
6524
6524
  deny?: PermissionResolvable;
6525
6525
  id: GuildMemberResolvable | RoleResolvable;
6526
6526
  type?: OverwriteType;
6527
6527
  }
6528
6528
 
6529
+ export interface OverwriteDataWithMandatoryType extends BaseOverwriteData {
6530
+ type: OverwriteType;
6531
+ }
6532
+
6533
+ export interface OverwriteDataWithOptionalType extends BaseOverwriteData {
6534
+ id: Exclude<GuildMemberResolvable | RoleResolvable, Snowflake>;
6535
+ }
6536
+
6537
+ export type OverwriteData = OverwriteDataWithMandatoryType | OverwriteDataWithOptionalType;
6538
+
6529
6539
  export type OverwriteResolvable = PermissionOverwrites | OverwriteData;
6530
6540
 
6531
6541
  export type PermissionFlags = Record<keyof typeof PermissionFlagsBits, bigint>;