From 4f67351dfb5d641332afaf2fb65532374af97507 Mon Sep 17 00:00:00 2001 From: Helloyunho Date: Sun, 19 May 2024 01:52:50 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=B7=EF=B8=8F=20feat(framework/types):?= =?UTF-8?q?=20add=20EveryChannelPayloads=20for=20easy=20life(seriously)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/gateway/handlers/channelCreate.ts | 3 +- framework/src/managers/channels.ts | 17 ++++--- framework/src/utils/channel.ts | 21 +++++---- framework/types/channel.ts | 45 ++++++++++++++++++- 4 files changed, 67 insertions(+), 19 deletions(-) diff --git a/framework/src/gateway/handlers/channelCreate.ts b/framework/src/gateway/handlers/channelCreate.ts index f3ac9a97..40a14ab6 100644 --- a/framework/src/gateway/handlers/channelCreate.ts +++ b/framework/src/gateway/handlers/channelCreate.ts @@ -1,10 +1,11 @@ +import { EveryChannelPayloads } from "../../../types/channel.ts"; import { GatewayHandler } from "../../../types/mod.ts"; const channelCreate: GatewayHandler<"CHANNEL_CREATE"> = ( client, [_, channel], ) => { - client.channels.set(channel.id, channel); + client.channels.set(channel.id, channel as EveryChannelPayloads); const channelObj = client.channels.get(channel.id)!; client.emit("channelCreate", channelObj); }; diff --git a/framework/src/managers/channels.ts b/framework/src/managers/channels.ts index 02292b04..17307d95 100644 --- a/framework/src/managers/channels.ts +++ b/framework/src/managers/channels.ts @@ -1,14 +1,19 @@ -import { type ChannelPayload } from "../../../types/mod.ts"; -import { Channel } from "../structures/channels/channel.ts"; +import type { + EveryChannelPayloads, + EveryChannels, +} from "../../types/channel.ts"; import { createChannel } from "../utils/channel.ts"; import { BaseManager } from "./base.ts"; -export class ChannelsManager extends BaseManager { - _get

(id: string): P | undefined { +export class ChannelsManager + extends BaseManager { + _get

(id: string): P | undefined { return this.cache.get(id) as P | undefined; } - async _fetch

(id: string): Promise

{ + async _fetch

( + id: string, + ): Promise

{ try { const resp: P | undefined = await this.client.rest.get( `/channels/${id}`, @@ -28,7 +33,7 @@ export class ChannelsManager extends BaseManager { if (!cached) return; return createChannel(this.client, cached); } - async fetch

( + async fetch

( id: string, ) { try { diff --git a/framework/src/utils/channel.ts b/framework/src/utils/channel.ts index a7402ea1..4d0e4ede 100644 --- a/framework/src/utils/channel.ts +++ b/framework/src/utils/channel.ts @@ -1,6 +1,5 @@ import { ChannelType } from "../../../types/mod.ts"; import type { - ChannelPayload, DMChannelPayload, GroupDMChannelPayload, GuildAnnouncementChannelPayload, @@ -11,7 +10,7 @@ import type { GuildVoiceChannelPayload, } from "../../../types/mod.ts"; import type { Client } from "../client/mod.ts"; -import { EveryChannels } from "../../types/channel.ts"; +import { EveryChannelPayloads, EveryChannels } from "../../types/channel.ts"; import { DMChannel, GroupDMChannel, @@ -23,7 +22,7 @@ import { GuildVoiceChannel, } from "../structures/channels/mod.ts"; -export const createChannel =

( +export const createChannel =

( client: Client, payload: P, ): EveryChannels => { @@ -31,32 +30,32 @@ export const createChannel =

( case ChannelType.GUILD_TEXT: return new GuildTextChannel( client, - payload as unknown as GuildTextChannelPayload, + payload as GuildTextChannelPayload, ); case ChannelType.DM: return new DMChannel( client, - payload as unknown as DMChannelPayload, + payload as DMChannelPayload, ); case ChannelType.GUILD_VOICE: return new GuildVoiceChannel( client, - payload as unknown as GuildVoiceChannelPayload, + payload as GuildVoiceChannelPayload, ); case ChannelType.GROUP_DM: return new GroupDMChannel( client, - payload as unknown as GroupDMChannelPayload, + payload as GroupDMChannelPayload, ); case ChannelType.GUILD_CATEGORY: return new GuildCategory( client, - payload as unknown as GuildCategoryPayload, + payload as GuildCategoryPayload, ); case ChannelType.GUILD_ANNOUNCEMENT: return new GuildAnnouncementChannel( client, - payload as unknown as GuildAnnouncementChannelPayload, + payload as GuildAnnouncementChannelPayload, ); // case ChannelType.ANNOUNCEMENT_THREAD: // case ChannelType.GUILD_PUBLIC_THREAD: @@ -64,13 +63,13 @@ export const createChannel =

( case ChannelType.GUILD_STAGE_VOICE: return new GuildStageChannel( client, - payload as unknown as GuildStageChannelPayload, + payload as GuildStageChannelPayload, ); // case ChannelType.GUILD_DIRECTORY: case ChannelType.GUILD_FORUM: return new GuildForumChannel( client, - payload as unknown as GuildForumChannelPayload, + payload as GuildForumChannelPayload, ); // case ChannelType.GUILD_MEDIA: default: diff --git a/framework/types/channel.ts b/framework/types/channel.ts index a5b1d130..fa2348eb 100644 --- a/framework/types/channel.ts +++ b/framework/types/channel.ts @@ -1,4 +1,14 @@ -import { ChannelType } from "../../mod.ts"; +import { + ChannelType, + DMChannelPayload, + GroupDMChannelPayload, + GuildAnnouncementChannelPayload, + GuildCategoryPayload, + GuildForumChannelPayload, + GuildStageChannelPayload, + GuildTextChannelPayload, + GuildVoiceChannelPayload, +} from "../../types/mod.ts"; import type { DMChannel, GroupDMChannel, @@ -10,6 +20,39 @@ import type { GuildVoiceChannel, } from "../src/structures/channels/mod.ts"; +export type GuildTextBasedChannelPayloads = + | GuildAnnouncementChannelPayload + | GuildForumChannelPayload + | GuildTextChannelPayload + | GuildVoiceChannelPayload; + +export type GuildThreadAvailableChannelPayloads = + | GuildAnnouncementChannelPayload + | GuildForumChannelPayload + | GuildTextChannelPayload; + +export type GuildVoiceBasedChannelPayloads = + | GuildStageChannelPayload + | GuildVoiceChannelPayload; + +export type GuildChannelPayloads = + | GuildTextBasedChannelPayloads + | GuildVoiceBasedChannelPayloads + | GuildThreadAvailableChannelPayloads + | GuildCategoryPayload; + +export type DMChannelPayloads = DMChannelPayload | GroupDMChannelPayload; + +export type VoiceChannelPayloads = + | GuildVoiceBasedChannelPayloads + | DMChannelPayloads; + +export type TextChannelPayloads = + | GuildTextBasedChannelPayloads + | DMChannelPayloads; + +export type EveryChannelPayloads = GuildChannelPayloads | DMChannelPayloads; + export type GuildTextBasedChannels = | GuildAnnouncementChannel | GuildForumChannel