mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
feat(ThreadChannel): Backport creation timestamp (#7559)
This commit is contained in:
@@ -100,6 +100,11 @@ class ThreadChannel extends Channel {
|
|||||||
* @type {?number}
|
* @type {?number}
|
||||||
*/
|
*/
|
||||||
this.archiveTimestamp = new Date(data.thread_metadata.archive_timestamp).getTime();
|
this.archiveTimestamp = new Date(data.thread_metadata.archive_timestamp).getTime();
|
||||||
|
|
||||||
|
if ('create_timestamp' in data.thread_metadata) {
|
||||||
|
// Note: this is needed because we can't assign directly to getters
|
||||||
|
this._createdTimestamp = Date.parse(data.thread_metadata.create_timestamp);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.locked ??= null;
|
this.locked ??= null;
|
||||||
this.archived ??= null;
|
this.archived ??= null;
|
||||||
@@ -108,6 +113,8 @@ class ThreadChannel extends Channel {
|
|||||||
this.invitable ??= null;
|
this.invitable ??= null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._createdTimestamp ??= this.type === 'GUILD_PRIVATE_THREAD' ? super.createdTimestamp : null;
|
||||||
|
|
||||||
if ('owner_id' in data) {
|
if ('owner_id' in data) {
|
||||||
/**
|
/**
|
||||||
* The id of the member who created this thread
|
* The id of the member who created this thread
|
||||||
@@ -176,6 +183,16 @@ class ThreadChannel extends Channel {
|
|||||||
if (data.messages) for (const message of data.messages) this.messages._add(message);
|
if (data.messages) for (const message of data.messages) this.messages._add(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The timestamp when this thread was created. This isn't available for threads
|
||||||
|
* created before 2022-01-09
|
||||||
|
* @type {?number}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get createdTimestamp() {
|
||||||
|
return this._createdTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A collection of associated guild member objects of this thread's members
|
* A collection of associated guild member objects of this thread's members
|
||||||
* @type {Collection<Snowflake, GuildMember>}
|
* @type {Collection<Snowflake, GuildMember>}
|
||||||
@@ -196,6 +213,15 @@ class ThreadChannel extends Channel {
|
|||||||
return new Date(this.archiveTimestamp);
|
return 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
|
* The parent channel of this thread
|
||||||
* @type {?(NewsChannel|TextChannel)}
|
* @type {?(NewsChannel|TextChannel)}
|
||||||
@@ -490,6 +516,14 @@ class ThreadChannel extends Channel {
|
|||||||
return this.archived && this.sendable && (!this.locked || this.manageable);
|
return this.archived && this.sendable && (!this.locked || this.manageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether this thread is a private thread
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
isPrivate() {
|
||||||
|
return this.type === 'GUILD_PRIVATE_THREAD';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes this thread.
|
* Deletes this thread.
|
||||||
* @param {string} [reason] Reason for deleting this thread
|
* @param {string} [reason] Reason for deleting this thread
|
||||||
|
|||||||
15
typings/index.d.ts
vendored
15
typings/index.d.ts
vendored
@@ -516,8 +516,8 @@ export type CategoryChannelResolvable = Snowflake | CategoryChannel;
|
|||||||
|
|
||||||
export abstract class Channel extends Base {
|
export abstract class Channel extends Base {
|
||||||
public constructor(client: Client, data?: RawChannelData, immediatePatch?: boolean);
|
public constructor(client: Client, data?: RawChannelData, immediatePatch?: boolean);
|
||||||
public readonly createdAt: Date;
|
public readonly createdAt: Date | null;
|
||||||
public readonly createdTimestamp: number;
|
public readonly createdTimestamp: number | null;
|
||||||
/** @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091 */
|
/** @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091 */
|
||||||
public deleted: boolean;
|
public deleted: boolean;
|
||||||
public id: Snowflake;
|
public id: Snowflake;
|
||||||
@@ -1042,7 +1042,8 @@ export abstract class GuildChannel extends Channel {
|
|||||||
public constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean);
|
public constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean);
|
||||||
private memberPermissions(member: GuildMember, checkAdmin: boolean): Readonly<Permissions>;
|
private memberPermissions(member: GuildMember, checkAdmin: boolean): Readonly<Permissions>;
|
||||||
private rolePermissions(role: Role, 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 calculatedPosition: number;
|
||||||
public readonly deletable: boolean;
|
public readonly deletable: boolean;
|
||||||
public guild: Guild;
|
public guild: Guild;
|
||||||
@@ -2305,6 +2306,9 @@ export class ThreadChannel extends TextBasedChannelMixin(Channel) {
|
|||||||
public archived: boolean | null;
|
public archived: boolean | null;
|
||||||
public readonly archivedAt: Date | null;
|
public readonly archivedAt: Date | null;
|
||||||
public archiveTimestamp: number | null;
|
public archiveTimestamp: number | null;
|
||||||
|
public readonly createdAt: Date | null;
|
||||||
|
private _createdTimestamp: number | null;
|
||||||
|
public readonly createdTimestamp: number | null;
|
||||||
public autoArchiveDuration: ThreadAutoArchiveDuration | null;
|
public autoArchiveDuration: ThreadAutoArchiveDuration | null;
|
||||||
public readonly editable: boolean;
|
public readonly editable: boolean;
|
||||||
public guild: Guild;
|
public guild: Guild;
|
||||||
@@ -2328,6 +2332,11 @@ export class ThreadChannel extends TextBasedChannelMixin(Channel) {
|
|||||||
public rateLimitPerUser: number | null;
|
public rateLimitPerUser: number | null;
|
||||||
public type: ThreadChannelTypes;
|
public type: ThreadChannelTypes;
|
||||||
public readonly unarchivable: boolean;
|
public readonly unarchivable: boolean;
|
||||||
|
public isPrivate(): this is this & {
|
||||||
|
readonly createdTimestamp: number;
|
||||||
|
readonly createdAt: Date;
|
||||||
|
type: 'GUILD_PRIVATE_THREAD';
|
||||||
|
};
|
||||||
public delete(reason?: string): Promise<this>;
|
public delete(reason?: string): Promise<this>;
|
||||||
public edit(data: ThreadEditData, reason?: string): Promise<ThreadChannel>;
|
public edit(data: ThreadEditData, reason?: string): Promise<ThreadChannel>;
|
||||||
public join(): Promise<ThreadChannel>;
|
public join(): Promise<ThreadChannel>;
|
||||||
|
|||||||
Reference in New Issue
Block a user