fix: correct permissions checks and cache on update (#6015)

This commit is contained in:
ckohen
2021-07-03 05:23:01 -07:00
committed by GitHub
parent 4adfc45b5a
commit 568691ce6a
4 changed files with 16 additions and 2 deletions

View File

@@ -24,6 +24,8 @@ class ChannelUpdateAction extends Action {
old, old,
updated: channel, updated: channel,
}; };
} else {
client.channels.add(data);
} }
return {}; return {};

View File

@@ -6,7 +6,7 @@ const ThreadMember = require('../structures/ThreadMember');
const Collection = require('../util/Collection'); const Collection = require('../util/Collection');
/** /**
* Manages API methods for GuildMembers and stores their cache. * Manages API methods for ThreadMembers and stores their cache.
* @extends {BaseManager} * @extends {BaseManager}
*/ */
class ThreadMemberManager extends BaseManager { class ThreadMemberManager extends BaseManager {

View File

@@ -297,13 +297,22 @@ class ThreadChannel extends Channel {
return this.edit({ rateLimitPerUser }, reason); return this.edit({ rateLimitPerUser }, reason);
} }
/**
* Whether the client user is a member of the thread.
* @type {boolean}
* @readonly
*/
get joined() {
return this.members.cache.has(this.client.user?.id);
}
/** /**
* Whether the thread is editable by the client user (name, archived, autoArchiveDuration) * Whether the thread is editable by the client user (name, archived, autoArchiveDuration)
* @type {boolean} * @type {boolean}
* @readonly * @readonly
*/ */
get editable() { get editable() {
return this.ownerID === this.client.user.id || this.manageable; return (this.ownerID === this.client.user.id && (this.type !== 'private_thread' || this.joined)) || this.manageable;
} }
/** /**
@@ -314,6 +323,7 @@ class ThreadChannel extends Channel {
get joinable() { get joinable() {
return ( return (
!this.archived && !this.archived &&
!this.joined &&
this.permissionsFor(this.client.user)?.has( this.permissionsFor(this.client.user)?.has(
this.type === 'private_thread' ? Permissions.FLAGS.MANAGE_THREADS : Permissions.FLAGS.VIEW_CHANNEL, this.type === 'private_thread' ? Permissions.FLAGS.MANAGE_THREADS : Permissions.FLAGS.VIEW_CHANNEL,
false, false,
@@ -338,6 +348,7 @@ class ThreadChannel extends Channel {
get sendable() { get sendable() {
return ( return (
!this.archived && !this.archived &&
(this.type !== 'private_thread' || this.joined || this.manageable) &&
this.permissionsFor(this.client.user)?.any( this.permissionsFor(this.client.user)?.any(
[ [
Permissions.FLAGS.SEND_MESSAGES, Permissions.FLAGS.SEND_MESSAGES,

1
typings/index.d.ts vendored
View File

@@ -1982,6 +1982,7 @@ declare module 'discord.js' {
public guild: Guild; public guild: Guild;
public readonly guildMembers: Collection<Snowflake, GuildMember>; public readonly guildMembers: Collection<Snowflake, GuildMember>;
public readonly joinable: boolean; public readonly joinable: boolean;
public readonly joined: boolean;
public locked: boolean; public locked: boolean;
public readonly manageable: boolean; public readonly manageable: boolean;
public readonly sendable: boolean; public readonly sendable: boolean;