add property 'fields' to MESSAGE_UPDATE callback

This commit is contained in:
Yuzu 2023-01-15 05:26:41 -05:00
parent 093ca3b232
commit 2fb78ce8d6
2 changed files with 23 additions and 7 deletions

View File

@ -82,6 +82,7 @@ import type {
} from '../structures/message-reaction'; } from '../structures/message-reaction';
import { NewMessageReactionAdd } from '../structures/message-reaction'; import { NewMessageReactionAdd } from '../structures/message-reaction';
import { Util, PartialMessage } from '../utils/util';
export type RawHandler<T> = (...args: [Session, number, T]) => void; export type RawHandler<T> = (...args: [Session, number, T]) => void;
export type Handler<T extends [obj?: unknown, ddy?: unknown]> = ( export type Handler<T extends [obj?: unknown, ddy?: unknown]> = (
@ -106,21 +107,20 @@ export const MESSAGE_CREATE: RawHandler<DiscordMessage> = (
session.events.emit('messageCreate', new Message(session, message)); session.events.emit('messageCreate', new Message(session, message));
}; };
export const MESSAGE_UPDATE: RawHandler<DiscordMessage> = ( export const MESSAGE_UPDATE: RawHandler<PartialMessage> = (
session, session,
_shardId, _shardId,
new_message new_message
) => { ) => {
// message is partial // message is partial
if (!new_message.edited_timestamp) { if (Util.isPartialMessage(new_message)) {
const message = { const message = {
// TODO: improve this
// ...new_message,
session, session,
id: new_message.id, id: new_message.id,
guildId: new_message.guild_id, guildId: new_message.guild_id,
channelId: new_message.channel_id, channelId: new_message.channel_id,
}; fields: new_message,
}; //satisfies Partial<Message>;
// all methods of Message can run on partial messages // 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 // 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<DiscordMessage> = (
return; 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<DiscordMessageDelete> = ( export const MESSAGE_DELETE: RawHandler<DiscordMessageDelete> = (
@ -714,7 +719,7 @@ export type AllEvents = keyof Events;
export interface Events { export interface Events {
ready: Handler<[Ready, number]>; ready: Handler<[Ready, number]>;
messageCreate: Handler<[Message]>; messageCreate: Handler<[Message]>;
messageUpdate: Handler<[Partial<Message>]>; messageUpdate: Handler<[Partial<Message> & { fields: PartialMessage }]>;
messageDelete: Handler< messageDelete: Handler<
[{ id: Snowflake; channelId: Snowflake; guildId?: Snowflake }] [{ id: Snowflake; channelId: Snowflake; guildId?: Snowflake }]
>; >;

View File

@ -1,6 +1,7 @@
import type { SelectMenuBuilder, InputTextBuilder, ButtonBuilder } from '@biscuitland/helpers'; import type { SelectMenuBuilder, InputTextBuilder, ButtonBuilder } from '@biscuitland/helpers';
import type { Permissions } from '../structures/special/permissions'; import type { Permissions } from '../structures/special/permissions';
import type { Snowflake } from '../snowflakes'; 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 * @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 { static getBotIdFromToken(token: string): string {
return atob(token.split('.')[0]); return atob(token.split('.')[0]);
} }
static isFullMessage(m: Partial<DiscordMessage> | DiscordMessage): m is DiscordMessage {
return !!m.edited_timestamp;
} }
static isPartialMessage(m: Partial<DiscordMessage> | DiscordMessage): m is PartialMessage {
return !m.edited_timestamp;
}
}
export type PartialMessage = MakeRequired<DiscordMessage, "id" | "channel_id">;