summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-10-09 22:36:53 -0700
committerFuwn <[email protected]>2025-10-09 22:36:53 -0700
commit8f82e7f116f421f731d2939ee1287b02c37bbeae (patch)
tree694ee61e20af457734de4aece58dac4a09cee3c6
parentrefactor(gateway:personaRandomMessages): Replace magic number (diff)
downloadumabotdiscord-8f82e7f116f421f731d2939ee1287b02c37bbeae.tar.xz
umabotdiscord-8f82e7f116f421f731d2939ee1287b02c37bbeae.zip
feat(gateway:listeners): Add webhook cleanup routine to uma personas
-rw-r--r--packages/gateway/src/listeners/messageCreate/dailyConversationStarter.ts31
-rw-r--r--packages/gateway/src/listeners/messageCreate/personaRandomMessage.ts30
2 files changed, 61 insertions, 0 deletions
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();
}