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,
updated: channel,
};
} else {
client.channels.add(data);
}
return {};

View File

@@ -6,7 +6,7 @@ const ThreadMember = require('../structures/ThreadMember');
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}
*/
class ThreadMemberManager extends BaseManager {

View File

@@ -297,13 +297,22 @@ class ThreadChannel extends Channel {
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)
* @type {boolean}
* @readonly
*/
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() {
return (
!this.archived &&
!this.joined &&
this.permissionsFor(this.client.user)?.has(
this.type === 'private_thread' ? Permissions.FLAGS.MANAGE_THREADS : Permissions.FLAGS.VIEW_CHANNEL,
false,
@@ -338,6 +348,7 @@ 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,

1
typings/index.d.ts vendored
View File

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