@hardlydifficult/chat 1.1.161 → 1.1.163

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/Channel.d.ts +8 -1
  2. package/dist/Channel.d.ts.map +1 -1
  3. package/dist/Channel.js +17 -2
  4. package/dist/Channel.js.map +1 -1
  5. package/dist/Thread.d.ts +8 -2
  6. package/dist/Thread.d.ts.map +1 -1
  7. package/dist/Thread.js +14 -1
  8. package/dist/Thread.js.map +1 -1
  9. package/dist/discord/DiscordChatClient.d.ts +2 -111
  10. package/dist/discord/DiscordChatClient.d.ts.map +1 -1
  11. package/dist/discord/DiscordChatClient.js +20 -251
  12. package/dist/discord/DiscordChatClient.js.map +1 -1
  13. package/dist/discord/eventHandlers.d.ts +16 -0
  14. package/dist/discord/eventHandlers.d.ts.map +1 -0
  15. package/dist/discord/eventHandlers.js +113 -0
  16. package/dist/discord/eventHandlers.js.map +1 -0
  17. package/dist/discord/messageOperations.d.ts +19 -0
  18. package/dist/discord/messageOperations.d.ts.map +1 -0
  19. package/dist/discord/messageOperations.js +43 -0
  20. package/dist/discord/messageOperations.js.map +1 -0
  21. package/dist/duplicateCounter.d.ts +27 -0
  22. package/dist/duplicateCounter.d.ts.map +1 -0
  23. package/dist/duplicateCounter.js +53 -0
  24. package/dist/duplicateCounter.js.map +1 -0
  25. package/dist/slack/SlackChatClient.d.ts +1 -0
  26. package/dist/slack/SlackChatClient.d.ts.map +1 -1
  27. package/dist/slack/SlackChatClient.js +6 -0
  28. package/dist/slack/SlackChatClient.js.map +1 -1
  29. package/dist/slack/getMessages.d.ts +5 -0
  30. package/dist/slack/getMessages.d.ts.map +1 -1
  31. package/dist/slack/getMessages.js +59 -0
  32. package/dist/slack/getMessages.js.map +1 -1
  33. package/dist/types.d.ts +1 -0
  34. package/dist/types.d.ts.map +1 -1
  35. package/package.json +1 -1
@@ -4,17 +4,13 @@ exports.DiscordChatClient = void 0;
4
4
  const discord_js_1 = require("discord.js");
5
5
  const Channel_js_1 = require("../Channel.js");
6
6
  const ChatClient_js_1 = require("../ChatClient.js");
7
- const constants_js_1 = require("../constants.js");
8
- const discord_js_2 = require("../outputters/discord.js");
9
- const utils_js_1 = require("../utils.js");
10
- const buildMessagePayload_js_1 = require("./buildMessagePayload.js");
7
+ const eventHandlers_js_1 = require("./eventHandlers.js");
11
8
  const fetchChannelMembers_js_1 = require("./fetchChannelMembers.js");
12
9
  const getMessages_js_1 = require("./getMessages.js");
10
+ const messageOperations_js_1 = require("./messageOperations.js");
13
11
  const reactionOperations_js_1 = require("./reactionOperations.js");
14
12
  const threadOperations_js_1 = require("./threadOperations.js");
15
- /**
16
- * Discord chat client implementation using discord.js
17
- */
13
+ /** Discord chat client implementation using discord.js. */
18
14
  class DiscordChatClient extends ChatClient_js_1.ChatClient {
19
15
  client;
20
16
  reactionListeners = new Map();
@@ -27,134 +23,18 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
27
23
  super(config);
28
24
  this.token = config.token ?? process.env.DISCORD_TOKEN ?? "";
29
25
  this.guildId = config.guildId ?? process.env.DISCORD_GUILD_ID ?? "";
30
- const intents = [
31
- discord_js_1.GatewayIntentBits.Guilds,
32
- discord_js_1.GatewayIntentBits.GuildMembers,
33
- discord_js_1.GatewayIntentBits.GuildMessages,
34
- discord_js_1.GatewayIntentBits.GuildMessageReactions,
35
- discord_js_1.GatewayIntentBits.MessageContent,
36
- ];
37
- this.client = new discord_js_1.Client({ intents });
38
- this.setupReactionListener();
39
- this.setupMessageListener();
40
- this.setupConnectionResilience();
41
- }
42
- /**
43
- * Set up the global reaction listener that routes events to channel-specific callbacks
44
- */
45
- setupReactionListener() {
46
- this.client.on("messageReactionAdd", (reaction, user) => {
47
- void (async () => {
48
- // Handle partial reactions
49
- if (reaction.partial) {
50
- try {
51
- await reaction.fetch();
52
- }
53
- catch (error) {
54
- console.error("Failed to fetch partial reaction:", error);
55
- return;
56
- }
57
- }
58
- const { channelId } = reaction.message;
59
- const callbacks = this.reactionListeners.get(channelId);
60
- if (!callbacks || callbacks.size === 0) {
61
- return;
62
- }
63
- const reactionUser = {
64
- id: user.id,
65
- username: user.username ?? undefined,
66
- };
67
- const event = {
68
- emoji: reaction.emoji.name ?? reaction.emoji.id ?? "",
69
- user: reactionUser,
70
- messageId: reaction.message.id,
71
- channelId,
72
- timestamp: new Date(),
73
- };
74
- for (const callback of callbacks) {
75
- try {
76
- await callback(event);
77
- }
78
- catch (error) {
79
- console.error("Reaction callback error:", error);
80
- }
81
- }
82
- })();
83
- });
84
- }
85
- /**
86
- * Set up the global message listener that routes events to channel-specific callbacks
87
- */
88
- setupMessageListener() {
89
- this.client.on("messageCreate", (message) => {
90
- void (async () => {
91
- // Ignore messages from the bot itself
92
- if (message.author?.id === this.client.user?.id) {
93
- return;
94
- }
95
- const { channelId } = message;
96
- const callbacks = this.messageListeners.get(channelId);
97
- if (!callbacks || callbacks.size === 0) {
98
- return;
99
- }
100
- const author = {
101
- id: message.author?.id ?? "",
102
- username: message.author?.username ?? undefined,
103
- };
104
- const attachments = [];
105
- for (const [, attachment] of message.attachments) {
106
- attachments.push({
107
- url: attachment.url,
108
- name: attachment.name,
109
- contentType: attachment.contentType ?? undefined,
110
- size: attachment.size,
111
- });
112
- }
113
- const event = {
114
- id: message.id,
115
- // Use cleanContent to resolve Discord mentions (e.g. <@170624100316741632>)
116
- // to human-readable names (e.g. @hardlydifficult) before forwarding to
117
- // command handlers and AI prompts.
118
- content: message.cleanContent ?? message.content ?? "",
119
- author,
120
- channelId,
121
- timestamp: message.createdAt,
122
- attachments,
123
- };
124
- for (const callback of callbacks) {
125
- try {
126
- await callback(event);
127
- }
128
- catch (error) {
129
- console.error("Message callback error:", error);
130
- }
131
- }
132
- })();
133
- });
134
- }
135
- /**
136
- * Set up connection event forwarding.
137
- * discord.js handles reconnection internally — these callbacks are for observability.
138
- */
139
- setupConnectionResilience() {
140
- this.client.on("shardDisconnect", (_event, shardId) => {
141
- const reason = `Shard ${String(shardId)} disconnected`;
142
- for (const callback of this.disconnectCallbacks) {
143
- void Promise.resolve(callback(reason)).catch((err) => {
144
- console.error("Disconnect callback error:", err);
145
- });
146
- }
147
- });
148
- this.client.on("shardError", (error, shardId) => {
149
- const wrappedError = error instanceof Error
150
- ? error
151
- : new Error(`Shard ${String(shardId)} error: ${String(error)}`);
152
- for (const callback of this.errorCallbacks) {
153
- void Promise.resolve(callback(wrappedError)).catch((err) => {
154
- console.error("Error callback error:", err);
155
- });
156
- }
26
+ this.client = new discord_js_1.Client({
27
+ intents: [
28
+ discord_js_1.GatewayIntentBits.Guilds,
29
+ discord_js_1.GatewayIntentBits.GuildMembers,
30
+ discord_js_1.GatewayIntentBits.GuildMessages,
31
+ discord_js_1.GatewayIntentBits.GuildMessageReactions,
32
+ discord_js_1.GatewayIntentBits.MessageContent,
33
+ ],
157
34
  });
35
+ (0, eventHandlers_js_1.setupReactionListener)(this.client, this.reactionListeners);
36
+ (0, eventHandlers_js_1.setupMessageListener)(this.client, this.messageListeners);
37
+ (0, eventHandlers_js_1.setupConnectionResilience)(this.client, this.disconnectCallbacks, this.errorCallbacks);
158
38
  }
159
39
  async fetchTextChannel(channelId) {
160
40
  const channel = await this.client.channels.fetch(channelId);
@@ -183,9 +63,6 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
183
63
  operations: this,
184
64
  });
185
65
  }
186
- /**
187
- * Disconnect from Discord
188
- */
189
66
  async disconnect() {
190
67
  this.reactionListeners.clear();
191
68
  this.messageListeners.clear();
@@ -194,90 +71,30 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
194
71
  this.meValue = null;
195
72
  await this.client.destroy();
196
73
  }
197
- /**
198
- * Post a message to a Discord channel
199
- * @param channelId - Channel to post to
200
- * @param content - Message content (string or Document)
201
- * @param options - Optional options including threadTs for replies
202
- * @returns Message data with ID
203
- */
204
74
  async postMessage(channelId, content, options) {
205
75
  const channel = await this.fetchTextChannel(channelId);
206
- const payload = (0, buildMessagePayload_js_1.buildMessagePayload)(content, options);
207
- const message = await channel.send(payload);
208
- return { id: message.id, channelId, platform: "discord" };
76
+ return (0, messageOperations_js_1.postMessage)(channel, channelId, content, options);
209
77
  }
210
- /**
211
- * Update a message in a Discord channel
212
- * @param messageId - ID of the message to update
213
- * @param channelId - Channel containing the message
214
- * @param content - New message content (string or Document)
215
- */
216
78
  async updateMessage(messageId, channelId, content) {
217
79
  const channel = await this.fetchTextChannel(channelId);
218
- const message = await channel.messages.fetch(messageId);
219
- if ((0, utils_js_1.isDocument)(content)) {
220
- const embed = (0, discord_js_2.toDiscordEmbed)(content.getBlocks());
221
- await message.edit({ embeds: [embed] });
222
- }
223
- else {
224
- // Clear embeds when switching to text; truncate if over limit
225
- const limit = constants_js_1.MESSAGE_LIMITS.discord;
226
- const text = content.length > limit
227
- ? `${content.slice(0, limit - 1)}\u2026`
228
- : content;
229
- await message.edit({ content: text, embeds: [] });
230
- }
80
+ return (0, messageOperations_js_1.updateMessage)(channel, messageId, content);
231
81
  }
232
- /**
233
- * Delete a message and its thread replies from a Discord channel
234
- * @param messageId - ID of the message to delete
235
- * @param channelId - Channel containing the message
236
- */
237
82
  async deleteMessage(messageId, channelId, options) {
238
83
  const channel = await this.fetchTextChannel(channelId);
239
- const message = await channel.messages.fetch(messageId);
240
- // Delete the thread (and all its messages) if one exists
241
- if (options?.cascadeReplies !== false && message.thread) {
242
- await message.thread.delete();
243
- }
244
- await message.delete();
84
+ return (0, messageOperations_js_1.deleteMessage)(channel, messageId, options);
245
85
  }
246
- /**
247
- * Add a reaction to a message
248
- * @param messageId - Message to react to
249
- * @param channelId - Channel containing the message
250
- * @param emoji - Emoji to add
251
- */
252
86
  async addReaction(messageId, channelId, emoji) {
253
87
  const channel = await this.fetchTextChannel(channelId);
254
88
  await (0, reactionOperations_js_1.addReaction)(channel, messageId, emoji);
255
89
  }
256
- /**
257
- * Remove the bot's own reaction from a message
258
- * @param messageId - Message to remove reaction from
259
- * @param channelId - Channel containing the message
260
- * @param emoji - Emoji to remove
261
- */
262
90
  async removeReaction(messageId, channelId, emoji) {
263
91
  const channel = await this.fetchTextChannel(channelId);
264
92
  await (0, reactionOperations_js_1.removeReaction)(channel, messageId, emoji);
265
93
  }
266
- /**
267
- * Remove all reactions from a message
268
- * @param messageId - Message to clear reactions from
269
- * @param channelId - Channel containing the message
270
- */
271
94
  async removeAllReactions(messageId, channelId) {
272
95
  const channel = await this.fetchTextChannel(channelId);
273
96
  await (0, reactionOperations_js_1.removeAllReactions)(channel, messageId);
274
97
  }
275
- /**
276
- * Subscribe to reaction events on a channel
277
- * @param channelId - Channel to monitor
278
- * @param callback - Function to call when reactions are added
279
- * @returns Unsubscribe function
280
- */
281
98
  subscribeToReactions(channelId, callback) {
282
99
  let callbacks = this.reactionListeners.get(channelId);
283
100
  if (!callbacks) {
@@ -292,12 +109,6 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
292
109
  }
293
110
  };
294
111
  }
295
- /**
296
- * Subscribe to incoming message events on a channel
297
- * @param channelId - Channel to monitor
298
- * @param callback - Function to call when messages are received
299
- * @returns Unsubscribe function
300
- */
301
112
  subscribeToMessages(channelId, callback) {
302
113
  let callbacks = this.messageListeners.get(channelId);
303
114
  if (!callbacks) {
@@ -312,32 +123,14 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
312
123
  }
313
124
  };
314
125
  }
315
- /**
316
- * Send a typing indicator in a Discord channel
317
- * @param channelId - Channel to send typing indicator in
318
- */
319
126
  async sendTyping(channelId) {
320
127
  const channel = await this.fetchTextChannel(channelId);
321
128
  await channel.sendTyping();
322
129
  }
323
- /**
324
- * Create a thread from a message
325
- * @param messageId - Message to create thread from
326
- * @param channelId - Channel containing the message
327
- * @param name - Thread name
328
- * @param autoArchiveDuration - Auto-archive duration in minutes (60, 1440, 4320, 10080)
329
- * @returns Thread data
330
- */
331
130
  async startThread(messageId, channelId, name, autoArchiveDuration) {
332
131
  const channel = await this.fetchTextChannel(channelId);
333
132
  return (0, threadOperations_js_1.startThread)(channel, messageId, channelId, name, autoArchiveDuration);
334
133
  }
335
- /**
336
- * Bulk delete messages in a Discord channel
337
- * @param channelId - Channel to delete messages from
338
- * @param count - Number of recent messages to delete (max 100)
339
- * @returns Number of messages actually deleted
340
- */
341
134
  async bulkDelete(channelId, count) {
342
135
  const channel = await this.fetchTextChannel(channelId);
343
136
  if (!(channel instanceof discord_js_1.TextChannel)) {
@@ -350,11 +143,6 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
350
143
  const channel = await this.fetchTextChannel(channelId);
351
144
  return (0, getMessages_js_1.getMessages)(channel, channelId, options, this.me?.id);
352
145
  }
353
- /**
354
- * Get all threads (active and archived) in a Discord channel
355
- * @param channelId - Channel to get threads from
356
- * @returns Array of thread data
357
- */
358
146
  async getThreads(channelId) {
359
147
  const channel = await this.fetchTextChannel(channelId);
360
148
  if (!(channel instanceof discord_js_1.TextChannel)) {
@@ -362,24 +150,15 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
362
150
  }
363
151
  return (0, threadOperations_js_1.getThreads)(channel, channelId);
364
152
  }
365
- /**
366
- * Delete a thread in a Discord channel
367
- * @param threadId - ID of the thread to delete
368
- */
369
153
  async deleteThread(threadId, _channelId) {
370
154
  await (0, threadOperations_js_1.deleteThread)(this.client, threadId);
371
155
  }
372
- /**
373
- * Post a message to a thread channel
374
- * In Discord, the threadId IS the channel to post in (threads are channels)
375
- */
156
+ async getThreadMessages(threadId, _channelId, options = {}) {
157
+ return this.getMessages(threadId, options);
158
+ }
376
159
  async postToThread(threadId, _channelId, content, options) {
377
160
  return this.postMessage(threadId, content, { files: options?.files });
378
161
  }
379
- /**
380
- * Subscribe to messages in a specific thread
381
- * In Discord, threadId IS the thread channel — reuse message subscription
382
- */
383
162
  subscribeToThread(threadId, _channelId, callback) {
384
163
  return this.subscribeToMessages(threadId, callback);
385
164
  }
@@ -390,22 +169,12 @@ class DiscordChatClient extends ChatClient_js_1.ChatClient {
390
169
  }
391
170
  return (0, fetchChannelMembers_js_1.fetchChannelMembers)(channel);
392
171
  }
393
- /**
394
- * Register a callback for disconnect events
395
- * @param callback - Function to call when disconnected
396
- * @returns Unsubscribe function
397
- */
398
172
  onDisconnect(callback) {
399
173
  this.disconnectCallbacks.add(callback);
400
174
  return () => {
401
175
  this.disconnectCallbacks.delete(callback);
402
176
  };
403
177
  }
404
- /**
405
- * Register a callback for error events
406
- * @param callback - Function to call when an error occurs
407
- * @returns Unsubscribe function
408
- */
409
178
  onError(callback) {
410
179
  this.errorCallbacks.add(callback);
411
180
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"DiscordChatClient.js","sourceRoot":"","sources":["../../src/discord/DiscordChatClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiscordChatClient.js","sourceRoot":"","sources":["../../src/discord/DiscordChatClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Client } from "discord.js";
2
+ import type { DisconnectCallback, ErrorCallback, MessageCallback, ReactionCallback } from "../types.js";
3
+ /**
4
+ * Wire the discord.js `messageReactionAdd` event to per-channel callbacks.
5
+ */
6
+ export declare function setupReactionListener(client: Client, listeners: Map<string, Set<ReactionCallback>>): void;
7
+ /**
8
+ * Wire the discord.js `messageCreate` event to per-channel callbacks.
9
+ * Messages from the bot itself are ignored.
10
+ */
11
+ export declare function setupMessageListener(client: Client, listeners: Map<string, Set<MessageCallback>>): void;
12
+ /**
13
+ * Forward discord.js shard disconnect / error events to the provided callbacks.
14
+ */
15
+ export declare function setupConnectionResilience(client: Client, disconnectCallbacks: Set<DisconnectCallback>, errorCallbacks: Set<ErrorCallback>): void;
16
+ //# sourceMappingURL=eventHandlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventHandlers.d.ts","sourceRoot":"","sources":["../../src/discord/eventHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAOP,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAEV,kBAAkB,EAClB,aAAa,EACb,eAAe,EAEf,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAC5C,IAAI,CAyCN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,GAC3C,IAAI,CA+CN;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAC5C,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,GACjC,IAAI,CAqBN"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupReactionListener = setupReactionListener;
4
+ exports.setupMessageListener = setupMessageListener;
5
+ exports.setupConnectionResilience = setupConnectionResilience;
6
+ /**
7
+ * Wire the discord.js `messageReactionAdd` event to per-channel callbacks.
8
+ */
9
+ function setupReactionListener(client, listeners) {
10
+ client.on("messageReactionAdd", (reaction, user) => {
11
+ void (async () => {
12
+ if (reaction.partial) {
13
+ try {
14
+ await reaction.fetch();
15
+ }
16
+ catch (error) {
17
+ console.error("Failed to fetch partial reaction:", error);
18
+ return;
19
+ }
20
+ }
21
+ const { channelId } = reaction.message;
22
+ const callbacks = listeners.get(channelId);
23
+ if (!callbacks || callbacks.size === 0) {
24
+ return;
25
+ }
26
+ const event = {
27
+ emoji: reaction.emoji.name ?? reaction.emoji.id ?? "",
28
+ user: { id: user.id, username: user.username ?? undefined },
29
+ messageId: reaction.message.id,
30
+ channelId,
31
+ timestamp: new Date(),
32
+ };
33
+ for (const callback of callbacks) {
34
+ try {
35
+ await callback(event);
36
+ }
37
+ catch (error) {
38
+ console.error("Reaction callback error:", error);
39
+ }
40
+ }
41
+ })();
42
+ });
43
+ }
44
+ /**
45
+ * Wire the discord.js `messageCreate` event to per-channel callbacks.
46
+ * Messages from the bot itself are ignored.
47
+ */
48
+ function setupMessageListener(client, listeners) {
49
+ client.on("messageCreate", (message) => {
50
+ void (async () => {
51
+ if (message.author?.id === client.user?.id) {
52
+ return;
53
+ }
54
+ const { channelId } = message;
55
+ const callbacks = listeners.get(channelId);
56
+ if (!callbacks || callbacks.size === 0) {
57
+ return;
58
+ }
59
+ const attachments = [];
60
+ for (const [, attachment] of message.attachments) {
61
+ attachments.push({
62
+ url: attachment.url,
63
+ name: attachment.name,
64
+ contentType: attachment.contentType ?? undefined,
65
+ size: attachment.size,
66
+ });
67
+ }
68
+ const event = {
69
+ id: message.id,
70
+ content: message.cleanContent ?? message.content ?? "",
71
+ author: {
72
+ id: message.author?.id ?? "",
73
+ username: message.author?.username ?? undefined,
74
+ },
75
+ channelId,
76
+ timestamp: message.createdAt,
77
+ attachments,
78
+ };
79
+ for (const callback of callbacks) {
80
+ try {
81
+ await callback(event);
82
+ }
83
+ catch (error) {
84
+ console.error("Message callback error:", error);
85
+ }
86
+ }
87
+ })();
88
+ });
89
+ }
90
+ /**
91
+ * Forward discord.js shard disconnect / error events to the provided callbacks.
92
+ */
93
+ function setupConnectionResilience(client, disconnectCallbacks, errorCallbacks) {
94
+ client.on("shardDisconnect", (_event, shardId) => {
95
+ const reason = `Shard ${String(shardId)} disconnected`;
96
+ for (const callback of disconnectCallbacks) {
97
+ void Promise.resolve(callback(reason)).catch((err) => {
98
+ console.error("Disconnect callback error:", err);
99
+ });
100
+ }
101
+ });
102
+ client.on("shardError", (error, shardId) => {
103
+ const wrappedError = error instanceof Error
104
+ ? error
105
+ : new Error(`Shard ${String(shardId)} error: ${String(error)}`);
106
+ for (const callback of errorCallbacks) {
107
+ void Promise.resolve(callback(wrappedError)).catch((err) => {
108
+ console.error("Error callback error:", err);
109
+ });
110
+ }
111
+ });
112
+ }
113
+ //# sourceMappingURL=eventHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventHandlers.js","sourceRoot":"","sources":["../../src/discord/eventHandlers.ts"],"names":[],"mappings":";;AAuBA,sDA4CC;AAMD,oDAkDC;AAKD,8DAyBC;AArID;;GAEG;AACH,SAAgB,qBAAqB,CACnC,MAAc,EACd,SAA6C;IAE7C,MAAM,CAAC,EAAE,CACP,oBAAoB,EACpB,CACE,QAAkD,EAClD,IAA+B,EACzB,EAAE;QACR,KAAK,CAAC,KAAK,IAAmB,EAAE;YAC9B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACzB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;oBAC1D,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;YACvC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAkB;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;gBACrD,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;gBAC3D,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC9B,SAAS;gBACT,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAClC,MAAc,EACd,SAA4C;IAE5C,MAAM,CAAC,EAAE,CACP,eAAe,EACf,CAAC,OAAwC,EAAQ,EAAE;QACjD,KAAK,CAAC,KAAK,IAAmB,EAAE;YAC9B,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;YAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAiB,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACjD,WAAW,CAAC,IAAI,CAAC;oBACf,GAAG,EAAE,UAAU,CAAC,GAAG;oBACnB,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,SAAS;oBAChD,IAAI,EAAE,UAAU,CAAC,IAAI;iBACtB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAiB;gBAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE;gBACtD,MAAM,EAAE;oBACN,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;oBAC5B,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,IAAI,SAAS;iBAChD;gBACD,SAAS;gBACT,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW;aACZ,CAAC;YAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,MAAc,EACd,mBAA4C,EAC5C,cAAkC;IAElC,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,SAAS,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;QACvD,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YAC3C,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBAC5D,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpE,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBAClE,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { TextChannel, ThreadChannel } from "discord.js";
2
+ import type { DeleteMessageOptions, FileAttachment, MessageContent, MessageData } from "../types.js";
3
+ /**
4
+ * Post a message to a Discord channel or thread.
5
+ */
6
+ export declare function postMessage(channel: TextChannel | ThreadChannel, channelId: string, content: MessageContent, options?: {
7
+ threadTs?: string;
8
+ files?: FileAttachment[];
9
+ linkPreviews?: boolean;
10
+ }): Promise<MessageData>;
11
+ /**
12
+ * Edit an existing message's content.
13
+ */
14
+ export declare function updateMessage(channel: TextChannel | ThreadChannel, messageId: string, content: MessageContent): Promise<void>;
15
+ /**
16
+ * Delete a message and optionally its thread replies.
17
+ */
18
+ export declare function deleteMessage(channel: TextChannel | ThreadChannel, messageId: string, options?: DeleteMessageOptions): Promise<void>;
19
+ //# sourceMappingURL=messageOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/discord/messageOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI7D,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,aAAa,CAAC;AAKrB;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,GAAG,aAAa,EACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GACA,OAAO,CAAC,WAAW,CAAC,CAItB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,WAAW,GAAG,aAAa,EACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,WAAW,GAAG,aAAa,EACpC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postMessage = postMessage;
4
+ exports.updateMessage = updateMessage;
5
+ exports.deleteMessage = deleteMessage;
6
+ const constants_js_1 = require("../constants.js");
7
+ const discord_js_1 = require("../outputters/discord.js");
8
+ const utils_js_1 = require("../utils.js");
9
+ const buildMessagePayload_js_1 = require("./buildMessagePayload.js");
10
+ /**
11
+ * Post a message to a Discord channel or thread.
12
+ */
13
+ async function postMessage(channel, channelId, content, options) {
14
+ const payload = (0, buildMessagePayload_js_1.buildMessagePayload)(content, options);
15
+ const message = await channel.send(payload);
16
+ return { id: message.id, channelId, platform: "discord" };
17
+ }
18
+ /**
19
+ * Edit an existing message's content.
20
+ */
21
+ async function updateMessage(channel, messageId, content) {
22
+ const message = await channel.messages.fetch(messageId);
23
+ if ((0, utils_js_1.isDocument)(content)) {
24
+ const embed = (0, discord_js_1.toDiscordEmbed)(content.getBlocks());
25
+ await message.edit({ embeds: [embed] });
26
+ }
27
+ else {
28
+ const limit = constants_js_1.MESSAGE_LIMITS.discord;
29
+ const text = content.length > limit ? `${content.slice(0, limit - 1)}\u2026` : content;
30
+ await message.edit({ content: text, embeds: [] });
31
+ }
32
+ }
33
+ /**
34
+ * Delete a message and optionally its thread replies.
35
+ */
36
+ async function deleteMessage(channel, messageId, options) {
37
+ const message = await channel.messages.fetch(messageId);
38
+ if (options?.cascadeReplies !== false && message.thread) {
39
+ await message.thread.delete();
40
+ }
41
+ await message.delete();
42
+ }
43
+ //# sourceMappingURL=messageOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageOperations.js","sourceRoot":"","sources":["../../src/discord/messageOperations.ts"],"names":[],"mappings":";;AAiBA,kCAaC;AAKD,sCAgBC;AAKD,sCAUC;AAhED,kDAAiD;AACjD,yDAA0D;AAO1D,0CAAyC;AAEzC,qEAA+D;AAE/D;;GAEG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAoC,EACpC,SAAiB,EACjB,OAAuB,EACvB,OAIC;IAED,MAAM,OAAO,GAAG,IAAA,4CAAmB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,OAAoC,EACpC,SAAiB,EACjB,OAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAExD,IAAI,IAAA,qBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAA,2BAAc,EAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,6BAAc,CAAC,OAAO,CAAC;QACrC,MAAM,IAAI,GACR,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5E,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,OAAoC,EACpC,SAAiB,EACjB,OAA8B;IAE9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,OAAO,EAAE,cAAc,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACxD,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { MessageContent, MessageData, MessageQueryOptions } from "./types.js";
2
+ /**
3
+ * Parse a message's content to extract the base text and duplicate count.
4
+ * "hello" → { baseContent: "hello", count: 1 }
5
+ * "hello x2" → { baseContent: "hello", count: 2 }
6
+ * "hello x5" → { baseContent: "hello", count: 5 }
7
+ */
8
+ export declare function parseDuplicateCount(content: string): {
9
+ baseContent: string;
10
+ count: number;
11
+ };
12
+ /**
13
+ * Try to deduplicate a message against the most recent bot message.
14
+ *
15
+ * If the last bot message has the same base content, edits it to increment
16
+ * the counter (e.g. "hello" → "hello x2" → "hello x3") and returns
17
+ * the original message data so that threading still points at the right place.
18
+ *
19
+ * Returns null when no dedup occurred and the caller should post normally.
20
+ */
21
+ export declare function tryDeduplicateMessage(content: MessageContent, getLastBotMessage: (options: MessageQueryOptions) => Promise<MessageData[]>, updateMessage: (messageId: string, channelId: string, content: MessageContent) => Promise<void>, options?: {
22
+ files?: {
23
+ content: Buffer | string;
24
+ name: string;
25
+ }[];
26
+ }): Promise<MessageData | null>;
27
+ //# sourceMappingURL=duplicateCounter.d.ts.map