From 2fb78ce8d6907405a1ced62733793bdd2f58477c Mon Sep 17 00:00:00 2001 From: Yuzu Date: Sun, 15 Jan 2023 05:26:41 -0500 Subject: [PATCH] add property 'fields' to MESSAGE_UPDATE callback --- packages/core/src/adapters/events.ts | 19 ++++++++++++------- packages/core/src/utils/util.ts | 11 +++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/core/src/adapters/events.ts b/packages/core/src/adapters/events.ts index f97b990..0e9d279 100644 --- a/packages/core/src/adapters/events.ts +++ b/packages/core/src/adapters/events.ts @@ -82,6 +82,7 @@ import type { } from '../structures/message-reaction'; import { NewMessageReactionAdd } from '../structures/message-reaction'; +import { Util, PartialMessage } from '../utils/util'; export type RawHandler = (...args: [Session, number, T]) => void; export type Handler = ( @@ -106,21 +107,20 @@ export const MESSAGE_CREATE: RawHandler = ( session.events.emit('messageCreate', new Message(session, message)); }; -export const MESSAGE_UPDATE: RawHandler = ( +export const MESSAGE_UPDATE: RawHandler = ( session, _shardId, new_message ) => { // message is partial - if (!new_message.edited_timestamp) { + if (Util.isPartialMessage(new_message)) { const message = { - // TODO: improve this - // ...new_message, session, id: new_message.id, guildId: new_message.guild_id, channelId: new_message.channel_id, - }; + fields: new_message, + }; //satisfies Partial; // all methods of Message can run on partial messages // we aknowledge people that their callback could be partial but giving them all functions of Message @@ -130,7 +130,12 @@ export const MESSAGE_UPDATE: RawHandler = ( return; } - session.events.emit('messageUpdate', new Message(session, new_message)); + if (Util.isFullMessage(new_message)) { + session.events.emit('messageUpdate', { + ...new Message(session, new_message), + fields: {} as PartialMessage + }); + } }; export const MESSAGE_DELETE: RawHandler = ( @@ -714,7 +719,7 @@ export type AllEvents = keyof Events; export interface Events { ready: Handler<[Ready, number]>; messageCreate: Handler<[Message]>; - messageUpdate: Handler<[Partial]>; + messageUpdate: Handler<[Partial & { fields: PartialMessage }]>; messageDelete: Handler< [{ id: Snowflake; channelId: Snowflake; guildId?: Snowflake }] >; diff --git a/packages/core/src/utils/util.ts b/packages/core/src/utils/util.ts index 7dcb3aa..77a23d7 100644 --- a/packages/core/src/utils/util.ts +++ b/packages/core/src/utils/util.ts @@ -1,6 +1,7 @@ import type { SelectMenuBuilder, InputTextBuilder, ButtonBuilder } from '@biscuitland/helpers'; import type { Permissions } from '../structures/special/permissions'; import type { Snowflake } from '../snowflakes'; +import type { DiscordMessage, MakeRequired } from '@biscuitland/api-types'; /* * @link https://discord.com/developers/docs/resources/channel#message-object-message-flags @@ -94,4 +95,14 @@ export abstract class Util { static getBotIdFromToken(token: string): string { return atob(token.split('.')[0]); } + + static isFullMessage(m: Partial | DiscordMessage): m is DiscordMessage { + return !!m.edited_timestamp; + } + + static isPartialMessage(m: Partial | DiscordMessage): m is PartialMessage { + return !m.edited_timestamp; + } } + +export type PartialMessage = MakeRequired;