From 950482c50315e01ac19f6ea18f64c50ce9fb8bd8 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 13 Jun 2021 20:45:47 +0000 Subject: [PATCH] more thread fixes --- src/cache.ts | 2 +- src/handlers/channels/THREAD_CREATE.ts | 2 +- src/handlers/channels/THREAD_LIST_SYNC.ts | 5 +++-- src/handlers/channels/THREAD_MEMBERS_UPDATE.ts | 4 ++-- src/handlers/channels/THREAD_MEMBER_UPDATE.ts | 14 +++++++++----- src/types/channels/threads/thread_member.ts | 18 +++++++++++++++--- src/types/discordeno/event_handlers.ts | 8 ++++---- src/util/mod.ts | 1 + .../{ => transformers}/channel_to_thread.ts | 4 ++-- src/util/transformers/mod.ts | 2 ++ .../transformers/thread_member_modified.ts | 11 +++++++++++ 11 files changed, 51 insertions(+), 20 deletions(-) rename src/util/{ => transformers}/channel_to_thread.ts (87%) create mode 100644 src/util/transformers/mod.ts create mode 100644 src/util/transformers/thread_member_modified.ts diff --git a/src/cache.ts b/src/cache.ts index 535c4cd0b..38cf42995 100644 --- a/src/cache.ts +++ b/src/cache.ts @@ -6,7 +6,7 @@ import type { DiscordenoMember } from "./structures/member.ts"; import type { DiscordenoMessage } from "./structures/message.ts"; import type { PresenceUpdate } from "./types/activity/presence_update.ts"; import type { Emoji } from "./types/emojis/emoji.ts"; -import { Thread } from "./util/channel_to_thread.ts"; +import { Thread } from "./util/transformers/channel_to_thread.ts"; import { Collection } from "./util/collection.ts"; export const cache = { diff --git a/src/handlers/channels/THREAD_CREATE.ts b/src/handlers/channels/THREAD_CREATE.ts index 7221d6030..7c6c26a70 100644 --- a/src/handlers/channels/THREAD_CREATE.ts +++ b/src/handlers/channels/THREAD_CREATE.ts @@ -2,7 +2,7 @@ import { eventHandlers } from "../../bot.ts"; import { cacheHandlers } from "../../cache.ts"; import { Channel } from "../../types/channels/channel.ts"; import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts"; -import { channelToThread } from "../../util/channel_to_thread.ts"; +import { channelToThread } from "../../util/transformers/channel_to_thread.ts"; export async function handleThreadCreate(data: DiscordGatewayPayload) { const payload = data.d as Channel; diff --git a/src/handlers/channels/THREAD_LIST_SYNC.ts b/src/handlers/channels/THREAD_LIST_SYNC.ts index 9baf6e6cc..4adc5d695 100644 --- a/src/handlers/channels/THREAD_LIST_SYNC.ts +++ b/src/handlers/channels/THREAD_LIST_SYNC.ts @@ -3,8 +3,9 @@ import { cacheHandlers } from "../../cache.ts"; import { ThreadListSync } from "../../types/channels/threads/thread_list_sync.ts"; import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts"; import { snowflakeToBigint } from "../../util/bigint.ts"; -import { channelToThread } from "../../util/channel_to_thread.ts"; +import { channelToThread } from "../../util/transformers/channel_to_thread.ts"; import { Collection } from "../../util/collection.ts"; +import { threadMemberModified } from "../../util/transformers/thread_member_modified.ts"; export async function handleThreadListSync(data: DiscordGatewayPayload) { const payload = data.d as ThreadListSync; @@ -20,7 +21,7 @@ export async function handleThreadListSync(data: DiscordGatewayPayload) { eventHandlers.threadListSync?.( new Collection(threads.map((t) => [t.id, t])), - payload.members, + payload.members.map((member) => threadMemberModified(member)), snowflakeToBigint(payload.guildId) ); } diff --git a/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts b/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts index f779c8faa..f7be4c810 100644 --- a/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts +++ b/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts @@ -6,11 +6,11 @@ import { snowflakeToBigint } from "../../util/bigint.ts"; export async function handleThreadMembersUpdate(data: DiscordGatewayPayload) { const payload = data.d as ThreadMembersUpdate; - const thread = await cacheHandlers.get("channels", snowflakeToBigint(payload.id)); + const thread = await cacheHandlers.get("threads", snowflakeToBigint(payload.id)); if (!thread) return; thread.memberCount = payload.memberCount; - await cacheHandlers.set("channels", thread.id, thread); + await cacheHandlers.set("threads", thread.id, thread); eventHandlers.threadMembersUpdate?.(payload); } diff --git a/src/handlers/channels/THREAD_MEMBER_UPDATE.ts b/src/handlers/channels/THREAD_MEMBER_UPDATE.ts index 70c5f1c75..73e319edb 100644 --- a/src/handlers/channels/THREAD_MEMBER_UPDATE.ts +++ b/src/handlers/channels/THREAD_MEMBER_UPDATE.ts @@ -6,12 +6,16 @@ import { snowflakeToBigint } from "../../util/bigint.ts"; export async function handleThreadMemberUpdate(data: DiscordGatewayPayload) { const payload = data.d as ThreadMember; - const thread = await cacheHandlers.get("channels", snowflakeToBigint(payload.id)); + const thread = await cacheHandlers.get("threads", snowflakeToBigint(payload.id)); if (!thread) return; - thread.member = payload; + const member = { + ...payload, + id: snowflakeToBigint(payload.id), + userId: snowflakeToBigint(payload.userId), + joinTimestamp: Date.parse(payload.joinTimestamp), + + }; - await cacheHandlers.set("channels", thread.id, thread); - - eventHandlers.threadMemberUpdate?.(payload); + eventHandlers.threadMemberUpdate?.(member, thread); } diff --git a/src/types/channels/threads/thread_member.ts b/src/types/channels/threads/thread_member.ts index 2b3d1b54a..38805786c 100644 --- a/src/types/channels/threads/thread_member.ts +++ b/src/types/channels/threads/thread_member.ts @@ -1,10 +1,22 @@ -export interface ThreadMember { +export interface ThreadMemberBase { + /** Any user-thread settings, currently only used for notifications */ + flags: number; +} + +export interface ThreadMember extends ThreadMemberBase { /** The id of the thread */ id: string; /** The id of the user */ userId: string; /** The time the current user last joined the thread */ joinTimestamp: string; - /** Any user-thread settings, currently only used for notifications */ - flags: number; +} + +export interface ThreadMemberModified extends ThreadMemberBase { + /** The id of the thread */ + id: bigint; + /** The id of the user */ + userId: bigint; + /** The time the current user last joined the thread */ + joinTimestamp: number; } diff --git a/src/types/discordeno/event_handlers.ts b/src/types/discordeno/event_handlers.ts index 9c6d8abb7..2549fc4df 100644 --- a/src/types/discordeno/event_handlers.ts +++ b/src/types/discordeno/event_handlers.ts @@ -3,11 +3,11 @@ import type { DiscordenoGuild } from "../../structures/guild.ts"; import type { DiscordenoMember } from "../../structures/member.ts"; import type { DiscordenoMessage } from "../../structures/message.ts"; import type { DiscordenoRole } from "../../structures/role.ts"; -import { Thread } from "../../util/channel_to_thread.ts"; +import { Thread } from "../../util/transformers/channel_to_thread.ts"; import type { Collection } from "../../util/collection.ts"; import type { PresenceUpdate } from "../activity/presence_update.ts"; import type { StageInstance } from "../channels/stage_instance.ts"; -import type { ThreadMember } from "../channels/threads/thread_member.ts"; +import type { ThreadMemberModified } from "../channels/threads/thread_member.ts"; import type { ThreadMembersUpdate } from "../channels/threads/thread_members_update.ts"; import type { Emoji } from "../emojis/emoji.ts"; import type { GatewayPayload } from "../gateway/gateway_payload.ts"; @@ -133,9 +133,9 @@ export type EventHandlersDefinitions = { /** Sent when a thread is updated */ threadUpdate: [thread: Thread, oldThread: Thread]; /** Sent when the bot gains access to threads */ - threadListSync: [threads: Collection, members: ThreadMember[], guildId: bigint]; + threadListSync: [threads: Collection, members: ThreadMemberModified[], guildId: bigint]; /** Sent when the current users thread member is updated */ - threadMemberUpdate: [threadMember: ThreadMember]; + threadMemberUpdate: [threadMember: ThreadMemberModified, thread: Thread]; /** Sent when anyone is added to or removed from a thread */ threadMembersUpdate: [update: ThreadMembersUpdate]; /** Sent when a thread is deleted */ diff --git a/src/util/mod.ts b/src/util/mod.ts index b2d22ebce..1d7138fbf 100644 --- a/src/util/mod.ts +++ b/src/util/mod.ts @@ -1,3 +1,4 @@ +export * from "./transformers/mod.ts"; export * from "./bigint.ts"; export * from "./cache_members.ts"; export * from "./collection.ts"; diff --git a/src/util/channel_to_thread.ts b/src/util/transformers/channel_to_thread.ts similarity index 87% rename from src/util/channel_to_thread.ts rename to src/util/transformers/channel_to_thread.ts index d70f3e0af..5b6dbc8f6 100644 --- a/src/util/channel_to_thread.ts +++ b/src/util/transformers/channel_to_thread.ts @@ -1,5 +1,5 @@ -import { Channel } from "../types/channels/channel.ts"; -import { snowflakeToBigint } from "./bigint.ts"; +import { Channel } from "../../types/channels/channel.ts"; +import { snowflakeToBigint } from "../bigint.ts"; export function channelToThread(channel: Channel) { return { diff --git a/src/util/transformers/mod.ts b/src/util/transformers/mod.ts new file mode 100644 index 000000000..12032f619 --- /dev/null +++ b/src/util/transformers/mod.ts @@ -0,0 +1,2 @@ +export * from "./channel_to_thread.ts"; +export * from "./thread_member_modified.ts"; diff --git a/src/util/transformers/thread_member_modified.ts b/src/util/transformers/thread_member_modified.ts new file mode 100644 index 000000000..f6a3e00a9 --- /dev/null +++ b/src/util/transformers/thread_member_modified.ts @@ -0,0 +1,11 @@ +import { ThreadMember, ThreadMemberModified } from "../../types/channels/threads/thread_member.ts"; +import { snowflakeToBigint } from "../bigint.ts"; + +export function threadMemberModified(member: ThreadMember) { + return { + ...member, + id: snowflakeToBigint(member.id), + userId: snowflakeToBigint(member.userId), + joinTimestamp: Date.parse(member.joinTimestamp), + } as ThreadMemberModified; +}