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';
import { NewMessageReactionAdd } from '../structures/message-reaction';
import { Util, PartialMessage } from '../utils/util';
export type RawHandler<T> = (...args: [Session, number, T]) => void;
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));
};
export const MESSAGE_UPDATE: RawHandler<DiscordMessage> = (
export const MESSAGE_UPDATE: RawHandler<PartialMessage> = (
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<Message>;
// 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<DiscordMessage> = (
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> = (
@ -714,7 +719,7 @@ export type AllEvents = keyof Events;
export interface Events {
ready: Handler<[Ready, number]>;
messageCreate: Handler<[Message]>;
messageUpdate: Handler<[Partial<Message>]>;
messageUpdate: Handler<[Partial<Message> & { fields: PartialMessage }]>;
messageDelete: Handler<
[{ id: Snowflake; channelId: Snowflake; guildId?: Snowflake }]
>;

View File

@ -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> | 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">;