diff --git a/src/structures/ThreadChannel.js b/src/structures/ThreadChannel.js index ea19d7274d0a..420a4163d54d 100644 --- a/src/structures/ThreadChannel.js +++ b/src/structures/ThreadChannel.js @@ -415,7 +415,9 @@ class ThreadChannel extends Channel { * @readonly */ get editable() { - return (this.ownerId === this.client.user.id && (this.type !== 'private_thread' || this.joined)) || this.manageable; + return ( + (this.ownerId === this.client.user.id && (this.type !== 'GUILD_PRIVATE_THREAD' || this.joined)) || this.manageable + ); } /** @@ -450,17 +452,10 @@ class ThreadChannel extends Channel { */ get sendable() { return ( - !this.archived && - (this.type !== 'private_thread' || this.joined || this.manageable) && - this.permissionsFor(this.client.user)?.any( - [ - Permissions.FLAGS.SEND_MESSAGES, - this.type === 'GUILD_PRIVATE_THREAD' - ? Permissions.FLAGS.USE_PRIVATE_THREADS - : Permissions.FLAGS.USE_PUBLIC_THREADS, - ], - false, - ) + (!(this.archived && this.locked && !this.manageable) && + (this.type !== 'GUILD_PRIVATE_THREAD' || this.joined || this.manageable) && + this.permissionsFor(this.client.user)?.has(Permissions.FLAGS.SEND_MESSAGES_IN_THREADS, false)) ?? + false ); } diff --git a/src/util/Permissions.js b/src/util/Permissions.js index 3f814c710fcc..b59497fd0ba7 100644 --- a/src/util/Permissions.js +++ b/src/util/Permissions.js @@ -91,9 +91,12 @@ class Permissions extends BitField { * * `USE_APPLICATION_COMMANDS` * * `REQUEST_TO_SPEAK` * * `MANAGE_THREADS` - * * `USE_PUBLIC_THREADS` - * * `USE_PRIVATE_THREADS` + * * `USE_PUBLIC_THREADS` (deprecated) + * * `CREATE_PUBLIC_THREADS` + * * `USE_PRIVATE_THREADS` (deprecated) + * * `CREATE_PRIVATE_THREADS` * * `USE_EXTERNAL_STICKERS` (use stickers from different guilds) + * * `SEND_MESSAGES_IN_THREADS` * * `START_EMBEDDED_ACTIVITIES` * @type {Object} * @see {@link https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags} @@ -133,9 +136,13 @@ Permissions.FLAGS = { USE_APPLICATION_COMMANDS: 1n << 31n, REQUEST_TO_SPEAK: 1n << 32n, MANAGE_THREADS: 1n << 34n, + // TODO: Remove deprecated USE_*_THREADS flags in v14 USE_PUBLIC_THREADS: 1n << 35n, + CREATE_PUBLIC_THREADS: 1n << 35n, USE_PRIVATE_THREADS: 1n << 36n, + CREATE_PRIVATE_THREADS: 1n << 36n, USE_EXTERNAL_STICKERS: 1n << 37n, + SEND_MESSAGES_IN_THREADS: 1n << 38n, START_EMBEDDED_ACTIVITIES: 1n << 39n, }; diff --git a/typings/index.d.ts b/typings/index.d.ts index bb8e8293e706..576f5c0f1999 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -4534,8 +4534,11 @@ export type PermissionString = | 'REQUEST_TO_SPEAK' | 'MANAGE_THREADS' | 'USE_PUBLIC_THREADS' + | 'CREATE_PUBLIC_THREADS' | 'USE_PRIVATE_THREADS' + | 'CREATE_PRIVATE_THREADS' | 'USE_EXTERNAL_STICKERS' + | 'SEND_MESSAGES_IN_THREADS' | 'START_EMBEDDED_ACTIVITIES'; export type RecursiveArray = ReadonlyArray>;