feat(threadchannel): add createdTimestamp field (#7306)

Co-authored-by: Rodry <38259440+ImRodry@users.noreply.github.com>
Co-authored-by: Almeida <almeidx@pm.me>
This commit is contained in:
Suneet Tipirneni
2022-01-25 02:34:26 -05:00
committed by GitHub
parent c05b38873b
commit 9a1623425a
2 changed files with 39 additions and 3 deletions

View File

@@ -101,6 +101,15 @@ class ThreadChannel extends Channel {
* @type {?number}
*/
this.archiveTimestamp = Date.parse(data.thread_metadata.archive_timestamp);
if ('create_timestamp' in data.thread_metadata) {
/**
* The timestamp when this thread was created. This isn't available for threads
* created before 2022-01-09
* @type {?number}
*/
this.createdTimestamp = Date.parse(data.thread_metadata.create_timestamp);
}
} else {
this.locked ??= null;
this.archived ??= null;
@@ -109,6 +118,8 @@ class ThreadChannel extends Channel {
this.invitable ??= null;
}
this.createdTimestamp ??= this.type === ChannelType.GuildPrivateThread ? super.createdTimestamp : null;
if ('owner_id' in data) {
/**
* The id of the member who created this thread
@@ -196,6 +207,15 @@ class ThreadChannel extends Channel {
return this.archiveTimestamp && new Date(this.archiveTimestamp);
}
/**
* The time the thread was created at
* @type {?Date}
* @readonly
*/
get createdAt() {
return this.createdTimestamp && new Date(this.createdTimestamp);
}
/**
* The parent channel of this thread
* @type {?(NewsChannel|TextChannel)}
@@ -495,6 +515,14 @@ class ThreadChannel extends Channel {
return this.archived && (this.locked ? this.manageable : this.sendable);
}
/**
* Whether this thread is a private thread
* @returns {boolean}
*/
isPrivate() {
return this.type === ChannelType.GuildPrivateThread;
}
/**
* Deletes this thread.
* @param {string} [reason] Reason for deleting this thread

View File

@@ -512,8 +512,8 @@ export type CategoryChannelResolvable = Snowflake | CategoryChannel;
export abstract class Channel extends Base {
public constructor(client: Client, data?: RawChannelData, immediatePatch?: boolean);
public readonly createdAt: Date;
public readonly createdTimestamp: number;
public readonly createdAt: Date | null;
public readonly createdTimestamp: number | null;
public id: Snowflake;
public readonly partial: false;
public type: ChannelType;
@@ -1042,7 +1042,8 @@ export abstract class GuildChannel extends Channel {
public constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean);
private memberPermissions(member: GuildMember, checkAdmin: boolean): Readonly<Permissions>;
private rolePermissions(role: Role, checkAdmin: boolean): Readonly<Permissions>;
public readonly createdAt: Date;
public readonly createdTimestamp: number;
public readonly calculatedPosition: number;
public readonly deletable: boolean;
public guild: Guild;
@@ -2169,6 +2170,8 @@ export class ThreadChannel extends TextBasedChannelMixin(Channel) {
public archived: boolean | null;
public readonly archivedAt: Date | null;
public archiveTimestamp: number | null;
public readonly createdAt: Date | null;
public createdTimestamp: number | null;
public autoArchiveDuration: ThreadAutoArchiveDuration | null;
public readonly editable: boolean;
public guild: Guild;
@@ -2192,6 +2195,11 @@ export class ThreadChannel extends TextBasedChannelMixin(Channel) {
public rateLimitPerUser: number | null;
public type: ThreadChannelType;
public readonly unarchivable: boolean;
public isPrivate(): this is this & {
readonly createdTimestamp: number;
readonly createdAt: Date;
type: ChannelType.GuildPrivateThread;
};
public delete(reason?: string): Promise<this>;
public edit(data: ThreadEditData, reason?: string): Promise<ThreadChannel>;
public join(): Promise<ThreadChannel>;