From 8f82e7f116f421f731d2939ee1287b02c37bbeae Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 9 Oct 2025 22:36:53 -0700 Subject: feat(gateway:listeners): Add webhook cleanup routine to uma personas --- .../messageCreate/dailyConversationStarter.ts | 31 ++++++++++++++++++++++ .../messageCreate/personaRandomMessage.ts | 30 +++++++++++++++++++++ 2 files changed, 61 insertions(+) (limited to 'packages/gateway') diff --git a/packages/gateway/src/listeners/messageCreate/dailyConversationStarter.ts b/packages/gateway/src/listeners/messageCreate/dailyConversationStarter.ts index 3acabd5..3c620ac 100644 --- a/packages/gateway/src/listeners/messageCreate/dailyConversationStarter.ts +++ b/packages/gateway/src/listeners/messageCreate/dailyConversationStarter.ts @@ -33,6 +33,8 @@ class DailyConversationStarterSystem { isActive: false, }; private webhookClient: WebhookClient | null = null; + private webhookId: string | null = null; + private webhookToken: string | null = null; private client: Client | null = null; constructor() { @@ -58,6 +60,8 @@ class DailyConversationStarterSystem { }); this.webhookClient = new WebhookClient({ url: webhook.url }); + this.webhookId = webhook.id; + this.webhookToken = webhook.token; } } catch (error) { console.error("Failed to create conversation starter webhook:", error); @@ -94,6 +98,8 @@ class DailyConversationStarterSystem { await this.webhookClient.send(formattedMessage); this.tracker.lastMessageTime = Date.now(); + + await this.cleanupWebhook(); } catch (error) { console.error( "Failed to send conversation starter primer message:", @@ -146,11 +152,36 @@ class DailyConversationStarterSystem { await this.webhookClient?.send(formattedMessage); this.tracker.lastMessageTime = Date.now(); + + await this.cleanupWebhook(); } catch (error) { console.error("Failed to send conversation starter message:", error); } } + private async cleanupWebhook() { + try { + if (this.webhookId && this.webhookToken && this.client) { + const channel = this.client.channels.cache.get(TARGET_CHANNEL_ID); + + if (channel && "fetchWebhooks" in channel) { + const webhooks = await channel.fetchWebhooks(); + const webhook = webhooks.get(this.webhookId); + + if (webhook) await webhook.delete(); + } + } + } catch (error) { + console.error("Failed to cleanup conversation starter webhook:", error); + } finally { + this.webhookClient?.destroy(); + + this.webhookClient = null; + this.webhookId = null; + this.webhookToken = null; + } + } + public destroy(): void { this.webhookClient?.destroy(); } diff --git a/packages/gateway/src/listeners/messageCreate/personaRandomMessage.ts b/packages/gateway/src/listeners/messageCreate/personaRandomMessage.ts index 1c7fe75..cb9e9e4 100644 --- a/packages/gateway/src/listeners/messageCreate/personaRandomMessage.ts +++ b/packages/gateway/src/listeners/messageCreate/personaRandomMessage.ts @@ -30,6 +30,8 @@ class PersonaRandomMessageSystem { isActive: false, }; private webhookClient: WebhookClient | null = null; + private webhookId: string | null = null; + private webhookToken: string | null = null; private client: Client | null = null; constructor() { @@ -55,6 +57,8 @@ class PersonaRandomMessageSystem { }); this.webhookClient = new WebhookClient({ url: webhook.url }); + this.webhookId = webhook.id; + this.webhookToken = webhook.token; } } catch (error) { console.error("Failed to create persona webhook:", error); @@ -85,6 +89,7 @@ class PersonaRandomMessageSystem { avatar: randomPersona.avatar, }); await this.webhookClient.send(formattedMessage); + await this.cleanupWebhook(); } catch (error) { console.error("Failed to send primer persona message:", error); } @@ -137,11 +142,36 @@ class PersonaRandomMessageSystem { this.tracker.messageCount = 0; this.tracker.lastRandomMessageTime = Date.now(); + + await this.cleanupWebhook(); } catch (error) { console.error("Failed to send persona message:", error); } } + private async cleanupWebhook() { + try { + if (this.webhookId && this.webhookToken && this.client) { + const channel = this.client.channels.cache.get(TARGET_CHANNEL_ID); + + if (channel && "fetchWebhooks" in channel) { + const webhooks = await channel.fetchWebhooks(); + const webhook = webhooks.get(this.webhookId); + + if (webhook) await webhook.delete(); + } + } + } catch (error) { + console.error("Failed to cleanup persona webhook:", error); + } finally { + this.webhookClient?.destroy(); + + this.webhookClient = null; + this.webhookId = null; + this.webhookToken = null; + } + } + public destroy(): void { this.webhookClient?.destroy(); } -- cgit v1.2.3