From 04cdda3ba71b9332e1c81b59a9ab0e278c939564 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 13 Jun 2021 21:00:10 +0000 Subject: [PATCH] more handler fixes for threads --- .../channels/THREAD_MEMBERS_UPDATE.ts | 3 ++- src/handlers/channels/THREAD_UPDATE.ts | 12 +++++----- .../channels/threads/thread_members_update.ts | 22 +++++++++++++++---- src/types/discordeno/event_handlers.ts | 4 ++-- src/util/transformers/mod.ts | 1 + .../thread_members_update_modified.ts | 16 ++++++++++++++ 6 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 src/util/transformers/thread_members_update_modified.ts diff --git a/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts b/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts index f7be4c810..e36d930b0 100644 --- a/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts +++ b/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts @@ -3,6 +3,7 @@ import { cacheHandlers } from "../../cache.ts"; import { ThreadMembersUpdate } from "../../types/channels/threads/thread_members_update.ts"; import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts"; import { snowflakeToBigint } from "../../util/bigint.ts"; +import { threadMembersUpdateModified } from "../../util/transformers/thread_members_update_modified.ts"; export async function handleThreadMembersUpdate(data: DiscordGatewayPayload) { const payload = data.d as ThreadMembersUpdate; @@ -12,5 +13,5 @@ export async function handleThreadMembersUpdate(data: DiscordGatewayPayload) { thread.memberCount = payload.memberCount; await cacheHandlers.set("threads", thread.id, thread); - eventHandlers.threadMembersUpdate?.(payload); + eventHandlers.threadMembersUpdate?.(threadMembersUpdateModified(payload)); } diff --git a/src/handlers/channels/THREAD_UPDATE.ts b/src/handlers/channels/THREAD_UPDATE.ts index 9c3756d02..5b11929e3 100644 --- a/src/handlers/channels/THREAD_UPDATE.ts +++ b/src/handlers/channels/THREAD_UPDATE.ts @@ -1,17 +1,17 @@ import { eventHandlers } from "../../bot.ts"; import { cacheHandlers } from "../../cache.ts"; -import { structures } from "../../structures/mod.ts"; import { Channel } from "../../types/channels/channel.ts"; import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts"; import { snowflakeToBigint } from "../../util/bigint.ts"; +import { channelToThread } from "../../util/transformers/channel_to_thread.ts"; export async function handleThreadUpdate(data: DiscordGatewayPayload) { const payload = data.d as Channel; - const oldChannel = await cacheHandlers.get("channels", snowflakeToBigint(payload.id)); - if (!oldChannel) return; + const oldThread = await cacheHandlers.get("threads", snowflakeToBigint(payload.id)); + if (!oldThread) return; - const discordenoChannel = await structures.createDiscordenoChannel(payload); - await cacheHandlers.set("channels", discordenoChannel.id, discordenoChannel); + const thread = channelToThread(payload); + await cacheHandlers.set("threads", thread.id, thread); - eventHandlers.threadUpdate?.(discordenoChannel, oldChannel); + eventHandlers.threadUpdate?.(thread, oldThread); } diff --git a/src/types/channels/threads/thread_members_update.ts b/src/types/channels/threads/thread_members_update.ts index 2190f6297..a31326c6a 100644 --- a/src/types/channels/threads/thread_members_update.ts +++ b/src/types/channels/threads/thread_members_update.ts @@ -1,15 +1,29 @@ -import { ThreadMember } from "./thread_member.ts"; +import { ThreadMember, ThreadMemberModified } from "./thread_member.ts"; + +export interface ThreadMembersUpdateBase { + /** The approximate number of members in the thread, capped at 50 */ + memberCount: number; +} // TODO: add docs link -export interface ThreadMembersUpdate { +export interface ThreadMembersUpdate extends ThreadMembersUpdateBase { /** The id of the thread */ id: string; /** The id of the guild */ guildId: string; - /** The approximate number of members in the thread, capped at 50 */ - memberCount: number; /** The users who were added to the thread */ addedMembers?: ThreadMember[]; /** The id of the users who were removed from the thread */ removedMemberIds?: string[]; } + +export interface ThreadMembersUpdateModified extends ThreadMembersUpdateBase { + /** The id of the thread */ + id: bigint; + /** The id of the guild */ + guildId: bigint; + /** The users who were added to the thread */ + addedMembers?: ThreadMemberModified[]; + /** The id of the users who were removed from the thread */ + removedMemberIds?: bigint[]; +} diff --git a/src/types/discordeno/event_handlers.ts b/src/types/discordeno/event_handlers.ts index 2549fc4df..fd152c574 100644 --- a/src/types/discordeno/event_handlers.ts +++ b/src/types/discordeno/event_handlers.ts @@ -8,7 +8,7 @@ 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 { ThreadMemberModified } from "../channels/threads/thread_member.ts"; -import type { ThreadMembersUpdate } from "../channels/threads/thread_members_update.ts"; +import type { ThreadMembersUpdateModified } from "../channels/threads/thread_members_update.ts"; import type { Emoji } from "../emojis/emoji.ts"; import type { GatewayPayload } from "../gateway/gateway_payload.ts"; import type { DiscordGatewayPayload } from "../gateway/gateway_payload.ts"; @@ -137,7 +137,7 @@ export type EventHandlersDefinitions = { /** Sent when the current users thread member is updated */ threadMemberUpdate: [threadMember: ThreadMemberModified, thread: Thread]; /** Sent when anyone is added to or removed from a thread */ - threadMembersUpdate: [update: ThreadMembersUpdate]; + threadMembersUpdate: [update: ThreadMembersUpdateModified]; /** Sent when a thread is deleted */ threadDelete: [thread: Thread]; /** Sent when a user starts typing in a channel. */ diff --git a/src/util/transformers/mod.ts b/src/util/transformers/mod.ts index 12032f619..1ee8a3238 100644 --- a/src/util/transformers/mod.ts +++ b/src/util/transformers/mod.ts @@ -1,2 +1,3 @@ export * from "./channel_to_thread.ts"; export * from "./thread_member_modified.ts"; +export * from "./thread_members_update_modified.ts" \ No newline at end of file diff --git a/src/util/transformers/thread_members_update_modified.ts b/src/util/transformers/thread_members_update_modified.ts new file mode 100644 index 000000000..b93a5bbe2 --- /dev/null +++ b/src/util/transformers/thread_members_update_modified.ts @@ -0,0 +1,16 @@ +import { + ThreadMembersUpdate, + ThreadMembersUpdateModified, +} from "../../types/channels/threads/thread_members_update.ts"; +import { snowflakeToBigint } from "../bigint.ts"; +import { threadMemberModified } from "./thread_member_modified.ts"; + +export function threadMembersUpdateModified(data: ThreadMembersUpdate) { + return { + ...data, + id: snowflakeToBigint(data.id), + guildId: snowflakeToBigint(data.guildId), + addedMembers: data.addedMembers?.map((member) => threadMemberModified(member)) || [], + removedMemberIds: data.removedMemberIds?.map((id) => snowflakeToBigint(id)) || [], + } as ThreadMembersUpdateModified; +}