mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-03 17:30:07 +00:00
fix: refactor to DDThreads
This commit is contained in:
@@ -1,20 +1,80 @@
|
||||
import { Channel } from "../../types/channels/channel.ts";
|
||||
import { snowflakeToBigint } from "../bigint.ts";
|
||||
import { createNewProp } from "../utils.ts";
|
||||
|
||||
export const threadToggles = {
|
||||
/** Whether this thread is archived. */
|
||||
archived: 1n,
|
||||
/** Whether this thread is locked. */
|
||||
locked: 2n,
|
||||
};
|
||||
|
||||
const baseThread: Partial<DiscordenoThread> = {
|
||||
get archived() {
|
||||
return Boolean(this.bitfield! & threadToggles.archived);
|
||||
},
|
||||
get locked() {
|
||||
return Boolean(this.bitfield! & threadToggles.locked);
|
||||
},
|
||||
toJSON() {
|
||||
return {
|
||||
id: this.id?.toString(),
|
||||
channelId: this.channelId?.toString(),
|
||||
memberCount: this.memberCount,
|
||||
messageCount: this.messageCount,
|
||||
archiveTimestamp: new Date(this.archiveTimestamp!).toISOString(),
|
||||
archiverId: this.archiverId?.toString(),
|
||||
autoArchiveDuration: this.autoArchiveDuration,
|
||||
archived: this.archived,
|
||||
locked: this.locked,
|
||||
} as Thread;
|
||||
},
|
||||
};
|
||||
|
||||
export function channelToThread(channel: Channel) {
|
||||
return {
|
||||
id: snowflakeToBigint(channel.id),
|
||||
channelId: snowflakeToBigint(channel.parentId!),
|
||||
memberCount: channel.memberCount,
|
||||
messageCount: channel.messageCount,
|
||||
archived: channel.threadMetadata?.archived || false,
|
||||
archiveTimestamp: channel.threadMetadata?.archiveTimestamp
|
||||
? Date.parse(channel.threadMetadata.archiveTimestamp)
|
||||
: undefined,
|
||||
archiverId: channel.threadMetadata?.archiverId ? snowflakeToBigint(channel.threadMetadata.archiverId) : undefined,
|
||||
autoArchiveDuration: channel.threadMetadata?.autoArchiveDuration || 0,
|
||||
locked: channel.threadMetadata?.locked || false,
|
||||
};
|
||||
let bitfield = 0n;
|
||||
|
||||
if (channel.threadMetadata?.archived) bitfield |= threadToggles.archived;
|
||||
if (channel.threadMetadata?.locked) bitfield |= threadToggles.locked;
|
||||
|
||||
return Object.create(baseThread, {
|
||||
id: createNewProp(snowflakeToBigint(channel.id)),
|
||||
channelId: createNewProp(snowflakeToBigint(channel.parentId!)),
|
||||
memberCount: createNewProp(channel.memberCount),
|
||||
messageCount: createNewProp(channel.messageCount),
|
||||
archiveTimestamp: createNewProp(
|
||||
channel.threadMetadata?.archiveTimestamp ? Date.parse(channel.threadMetadata.archiveTimestamp) : undefined
|
||||
),
|
||||
archiverId: createNewProp(
|
||||
channel.threadMetadata?.archiverId ? snowflakeToBigint(channel.threadMetadata.archiverId) : undefined
|
||||
),
|
||||
autoArchiveDuration: createNewProp(channel.threadMetadata?.autoArchiveDuration || 0),
|
||||
bitfield: createNewProp(bitfield),
|
||||
});
|
||||
}
|
||||
|
||||
export type Thread = ReturnType<typeof channelToThread>;
|
||||
export interface Thread {
|
||||
id: string;
|
||||
channelId: string;
|
||||
memberCount: number;
|
||||
messageCount: number;
|
||||
archiveTimestamp: string;
|
||||
archiverId?: string;
|
||||
autoArchiveDuration: number;
|
||||
archived: boolean;
|
||||
locked: boolean;
|
||||
}
|
||||
|
||||
export interface DiscordenoThread {
|
||||
id: bigint;
|
||||
channelId: bigint;
|
||||
memberCount: number;
|
||||
messageCount: number;
|
||||
archiveTimestamp: number;
|
||||
archiverId?: bigint;
|
||||
autoArchiveDuration: number;
|
||||
archived: boolean;
|
||||
locked: boolean;
|
||||
bitfield: bigint;
|
||||
toJSON(): Thread;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user