From f353a73a9e69e26c94f4594cfe06aaaf46da5ea0 Mon Sep 17 00:00:00 2001 From: Nix Krystik Date: Thu, 27 Aug 2026 23:46:29 +0800 Subject: [PATCH] (events): added `messageCreate` & `messageUpdate`. this also removes the `shardReady` event as it isn't in use. --- src/events/guild/guildCreate.ts | 4 ++-- src/events/guild/guildDelete.ts | 4 ++-- src/events/index.ts | 8 +++++--- src/events/message/messageCreate.ts | 12 ++++++++++++ src/events/message/messageUpdate.ts | 12 ++++++++++++ src/events/shard/shardReady.ts | 9 --------- src/utils/database.ts | 20 ++++++++++++++++++++ src/utils/index.ts | 2 +- 8 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 src/events/message/messageCreate.ts create mode 100644 src/events/message/messageUpdate.ts delete mode 100644 src/events/shard/shardReady.ts diff --git a/src/events/guild/guildCreate.ts b/src/events/guild/guildCreate.ts index b59b6e5..2f990c6 100644 --- a/src/events/guild/guildCreate.ts +++ b/src/events/guild/guildCreate.ts @@ -1,5 +1,5 @@ import { CommandClient, Event, Guild } from "athena-prime"; -import { createConfiguration } from "../../utils/database"; +import { database } from "../../utils"; // ---------- @@ -7,7 +7,7 @@ class GuildCreateEvent extends Event { event: string = 'guildCreate' as const; async handle(context: CommandClient, guild: Guild) { - await createConfiguration(guild.id); + await database.createConfiguration(guild.id); } } diff --git a/src/events/guild/guildDelete.ts b/src/events/guild/guildDelete.ts index a211983..a8eeafd 100644 --- a/src/events/guild/guildDelete.ts +++ b/src/events/guild/guildDelete.ts @@ -1,5 +1,5 @@ import { CommandClient, Event, Guild } from "athena-prime"; -import { deleteConfiguration } from "../../utils/database"; +import { database } from "../../utils"; // ---------- @@ -13,7 +13,7 @@ class GuildDeleteEvent extends Event { // // For simplicity, I'm keeping it like this. In the future this will be handled by // a scheduled task. - await deleteConfiguration(guild.id); + await database.deleteConfiguration(guild.id); } } diff --git a/src/events/index.ts b/src/events/index.ts index 61ec880..080503c 100644 --- a/src/events/index.ts +++ b/src/events/index.ts @@ -1,11 +1,13 @@ import guildCreate from './guild/guildCreate'; import guildDelete from './guild/guildDelete'; +import messageCreate from './message/messageCreate'; +import messageUpdate from './message/messageUpdate'; import ready from './client/ready'; -import shardReady from './shard/shardReady'; export default [ guildCreate, guildDelete, - ready, - shardReady + messageCreate, + messageUpdate, + ready ]; diff --git a/src/events/message/messageCreate.ts b/src/events/message/messageCreate.ts new file mode 100644 index 0000000..fda4a87 --- /dev/null +++ b/src/events/message/messageCreate.ts @@ -0,0 +1,12 @@ +import { CommandClient, Event, Message } from "athena-prime"; +import { database } from "../../utils"; + +class MessageCreateEvent extends Event { + event: string = 'messageCreate' as const; + + async handle(context: CommandClient, message: Message) { + await database.createMessage(message); + } +} + +export default new MessageCreateEvent('messageCreate'); diff --git a/src/events/message/messageUpdate.ts b/src/events/message/messageUpdate.ts new file mode 100644 index 0000000..6a96b36 --- /dev/null +++ b/src/events/message/messageUpdate.ts @@ -0,0 +1,12 @@ +import { CommandClient, Event, Message } from "athena-prime"; +import { database } from "../../utils"; + +class MessageUpdateEvent extends Event { + event: string = 'messageUpdate' as const; + + async handle(context: CommandClient, message: Message, _: Message) { + await database.updateMessage(message); + } +} + +export default new MessageUpdateEvent('messageUpdate'); diff --git a/src/events/shard/shardReady.ts b/src/events/shard/shardReady.ts deleted file mode 100644 index 82bb560..0000000 --- a/src/events/shard/shardReady.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Event, CommandClient } from 'athena-prime'; - -class ShardReadyEvent extends Event { - event: string = 'shardReady' as const; - - async handle(context: CommandClient, shardId: number) {} -} - -export default new ShardReadyEvent('shardReady'); diff --git a/src/utils/database.ts b/src/utils/database.ts index 82dc9dc..cc63232 100644 --- a/src/utils/database.ts +++ b/src/utils/database.ts @@ -1,5 +1,6 @@ import postgres from "postgres"; import { Configuration } from "../types"; +import { Message } from "athena-prime"; // ---------- @@ -83,3 +84,22 @@ export async function deleteConfiguration(guildId: string): Promise { WHERE guild_id = ${guildId}; `; } + +// --- Messages --- + +export async function createMessage(message: Message) { + if (!message.guildID) return; // This shouldn't be false since this is only ever called in a guild context. + + await client` + INSERT INTO messages (message_id, channel_id, guild_id, content) + VALUES (${message.id}, ${message.channel.id}, ${message.guildID}, ${message.content}) + ON CONFLICT (message_id) DO NOTHING; + `; +} + +export async function updateMessage(message: Message) { + await client` + UPDATE messages SET content = ${message.content} + WHERE message_id = ${message.id}; + `; +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 9cd8c5a..dd502a8 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1 +1 @@ -export * from './database'; +export * as database from './database';