@framers/agentos 0.1.27 → 0.1.29

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 (60) hide show
  1. package/dist/channels/adapters/BaseChannelAdapter.d.ts +130 -0
  2. package/dist/channels/adapters/BaseChannelAdapter.d.ts.map +1 -0
  3. package/dist/channels/adapters/BaseChannelAdapter.js +257 -0
  4. package/dist/channels/adapters/BaseChannelAdapter.js.map +1 -0
  5. package/dist/channels/adapters/DiscordChannelAdapter.d.ts +86 -0
  6. package/dist/channels/adapters/DiscordChannelAdapter.d.ts.map +1 -0
  7. package/dist/channels/adapters/DiscordChannelAdapter.js +550 -0
  8. package/dist/channels/adapters/DiscordChannelAdapter.js.map +1 -0
  9. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts +117 -0
  10. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts.map +1 -0
  11. package/dist/channels/adapters/GoogleChatChannelAdapter.js +632 -0
  12. package/dist/channels/adapters/GoogleChatChannelAdapter.js.map +1 -0
  13. package/dist/channels/adapters/IRCChannelAdapter.d.ts +86 -0
  14. package/dist/channels/adapters/IRCChannelAdapter.d.ts.map +1 -0
  15. package/dist/channels/adapters/IRCChannelAdapter.js +253 -0
  16. package/dist/channels/adapters/IRCChannelAdapter.js.map +1 -0
  17. package/dist/channels/adapters/RedditChannelAdapter.d.ts +123 -0
  18. package/dist/channels/adapters/RedditChannelAdapter.d.ts.map +1 -0
  19. package/dist/channels/adapters/RedditChannelAdapter.js +516 -0
  20. package/dist/channels/adapters/RedditChannelAdapter.js.map +1 -0
  21. package/dist/channels/adapters/SignalChannelAdapter.d.ts +120 -0
  22. package/dist/channels/adapters/SignalChannelAdapter.d.ts.map +1 -0
  23. package/dist/channels/adapters/SignalChannelAdapter.js +521 -0
  24. package/dist/channels/adapters/SignalChannelAdapter.js.map +1 -0
  25. package/dist/channels/adapters/SlackChannelAdapter.d.ts +96 -0
  26. package/dist/channels/adapters/SlackChannelAdapter.d.ts.map +1 -0
  27. package/dist/channels/adapters/SlackChannelAdapter.js +535 -0
  28. package/dist/channels/adapters/SlackChannelAdapter.js.map +1 -0
  29. package/dist/channels/adapters/TeamsChannelAdapter.d.ts +138 -0
  30. package/dist/channels/adapters/TeamsChannelAdapter.d.ts.map +1 -0
  31. package/dist/channels/adapters/TeamsChannelAdapter.js +639 -0
  32. package/dist/channels/adapters/TeamsChannelAdapter.js.map +1 -0
  33. package/dist/channels/adapters/TelegramChannelAdapter.d.ts +83 -0
  34. package/dist/channels/adapters/TelegramChannelAdapter.d.ts.map +1 -0
  35. package/dist/channels/adapters/TelegramChannelAdapter.js +463 -0
  36. package/dist/channels/adapters/TelegramChannelAdapter.js.map +1 -0
  37. package/dist/channels/adapters/TwitterChannelAdapter.d.ts +117 -0
  38. package/dist/channels/adapters/TwitterChannelAdapter.d.ts.map +1 -0
  39. package/dist/channels/adapters/TwitterChannelAdapter.js +489 -0
  40. package/dist/channels/adapters/TwitterChannelAdapter.js.map +1 -0
  41. package/dist/channels/adapters/WebChatChannelAdapter.d.ts +141 -0
  42. package/dist/channels/adapters/WebChatChannelAdapter.d.ts.map +1 -0
  43. package/dist/channels/adapters/WebChatChannelAdapter.js +539 -0
  44. package/dist/channels/adapters/WebChatChannelAdapter.js.map +1 -0
  45. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts +122 -0
  46. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts.map +1 -0
  47. package/dist/channels/adapters/WhatsAppChannelAdapter.js +643 -0
  48. package/dist/channels/adapters/WhatsAppChannelAdapter.js.map +1 -0
  49. package/dist/channels/adapters/index.d.ts +34 -0
  50. package/dist/channels/adapters/index.d.ts.map +1 -0
  51. package/dist/channels/adapters/index.js +25 -0
  52. package/dist/channels/adapters/index.js.map +1 -0
  53. package/dist/channels/index.d.ts +24 -0
  54. package/dist/channels/index.d.ts.map +1 -1
  55. package/dist/channels/index.js +16 -0
  56. package/dist/channels/index.js.map +1 -1
  57. package/dist/cognitive_substrate/GMIManager.d.ts.map +1 -1
  58. package/dist/cognitive_substrate/GMIManager.js +0 -2
  59. package/dist/cognitive_substrate/GMIManager.js.map +1 -1
  60. package/package.json +1 -1
@@ -0,0 +1,550 @@
1
+ /**
2
+ * @fileoverview Discord Channel Adapter for AgentOS.
3
+ *
4
+ * Wraps the `discord.js` npm package to connect agents to Discord servers.
5
+ * Supports rich messaging including text, embeds, images, video, audio,
6
+ * reactions, threads, mentions, buttons, and message management.
7
+ *
8
+ * **Dependencies**: Requires `discord.js` to be installed. The adapter
9
+ * uses a dynamic import so the package is only loaded at connection time,
10
+ * avoiding hard failures if it is not present.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const discord = new DiscordChannelAdapter();
15
+ * await discord.initialize({
16
+ * platform: 'discord',
17
+ * credential: 'DISCORD_BOT_TOKEN',
18
+ * params: {
19
+ * botToken: 'DISCORD_BOT_TOKEN',
20
+ * applicationId: 'APP_ID',
21
+ * guildId: 'OPTIONAL_GUILD_ID',
22
+ * },
23
+ * });
24
+ * ```
25
+ *
26
+ * @module @framers/agentos/channels/adapters/DiscordChannelAdapter
27
+ */
28
+ import { BaseChannelAdapter } from './BaseChannelAdapter.js';
29
+ // ============================================================================
30
+ // DiscordChannelAdapter
31
+ // ============================================================================
32
+ /**
33
+ * Channel adapter for Discord using the discord.js SDK.
34
+ *
35
+ * Uses dynamic import so `discord.js` is only required at runtime when the
36
+ * adapter is actually initialized.
37
+ *
38
+ * Capabilities: text, rich_text, images, video, audio, embeds, reactions,
39
+ * threads, mentions, buttons, group_chat, channels, editing, deletion.
40
+ */
41
+ export class DiscordChannelAdapter extends BaseChannelAdapter {
42
+ constructor() {
43
+ super(...arguments);
44
+ this.platform = 'discord';
45
+ this.displayName = 'Discord';
46
+ this.capabilities = [
47
+ 'text',
48
+ 'rich_text',
49
+ 'images',
50
+ 'video',
51
+ 'audio',
52
+ 'embeds',
53
+ 'reactions',
54
+ 'threads',
55
+ 'mentions',
56
+ 'buttons',
57
+ 'group_chat',
58
+ 'channels',
59
+ 'editing',
60
+ 'deletion',
61
+ ];
62
+ }
63
+ // ── Abstract hook implementations ──
64
+ async doConnect(auth) {
65
+ const botToken = auth.params?.botToken ?? auth.credential;
66
+ if (!botToken) {
67
+ throw new Error('Discord bot token is required. Provide it as credential or params.botToken.');
68
+ }
69
+ // Dynamic import
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ let discordJs;
72
+ try {
73
+ discordJs = await import('discord.js');
74
+ }
75
+ catch {
76
+ throw new Error('The "discord.js" package is required for the Discord adapter. ' +
77
+ 'Install it with: npm install discord.js');
78
+ }
79
+ this.djs = discordJs;
80
+ // Build intents — we need at minimum Guilds, GuildMessages, MessageContent, DirectMessages
81
+ const { GatewayIntentBits, Client, Partials, } = discordJs;
82
+ const intentFlags = [
83
+ GatewayIntentBits.Guilds,
84
+ GatewayIntentBits.GuildMessages,
85
+ GatewayIntentBits.MessageContent,
86
+ GatewayIntentBits.DirectMessages,
87
+ GatewayIntentBits.GuildMessageReactions,
88
+ ];
89
+ // Parse any additional intents from params
90
+ if (auth.params?.intents) {
91
+ const extraIntents = auth.params.intents.split(',').map((i) => i.trim());
92
+ for (const intentName of extraIntents) {
93
+ if (GatewayIntentBits[intentName] !== undefined) {
94
+ intentFlags.push(GatewayIntentBits[intentName]);
95
+ }
96
+ }
97
+ }
98
+ this.client = new Client({
99
+ intents: intentFlags,
100
+ partials: [Partials?.Channel, Partials?.Message, Partials?.Reaction].filter(Boolean),
101
+ });
102
+ // Set up event handlers before login
103
+ this.wireEventHandlers();
104
+ // Login and await the ready event
105
+ await new Promise((resolve, reject) => {
106
+ const readyTimeout = setTimeout(() => {
107
+ reject(new Error('Discord client ready timeout after 30s'));
108
+ }, 30000);
109
+ this.client.once('ready', () => {
110
+ clearTimeout(readyTimeout);
111
+ resolve();
112
+ });
113
+ this.client.once('error', (err) => {
114
+ clearTimeout(readyTimeout);
115
+ reject(err);
116
+ });
117
+ this.client.login(botToken).catch((err) => {
118
+ clearTimeout(readyTimeout);
119
+ reject(err);
120
+ });
121
+ });
122
+ // Populate platform info
123
+ const user = this.client.user;
124
+ this.platformInfo = {
125
+ botId: user?.id,
126
+ botUsername: user?.username,
127
+ botTag: user?.tag,
128
+ applicationId: auth.params?.applicationId,
129
+ guildId: auth.params?.guildId,
130
+ guildCount: this.client.guilds?.cache?.size,
131
+ };
132
+ console.log(`[Discord] Connected as ${user?.tag ?? 'unknown'} (${this.client.guilds?.cache?.size ?? 0} guilds)`);
133
+ }
134
+ async doSendMessage(conversationId, content) {
135
+ if (!this.client || !this.djs) {
136
+ throw new Error('[Discord] Client is not connected.');
137
+ }
138
+ // Resolve channel
139
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
140
+ if (!channel) {
141
+ throw new Error(`[Discord] Channel ${conversationId} not found.`);
142
+ }
143
+ if (typeof channel.send !== 'function') {
144
+ throw new Error(`[Discord] Channel ${conversationId} is not a text channel.`);
145
+ }
146
+ // Build message payload
147
+ const payload = this.buildMessagePayload(content);
148
+ // If replying to a message, set the reply reference
149
+ if (content.replyToMessageId) {
150
+ payload.reply = { messageReference: content.replyToMessageId };
151
+ }
152
+ const msg = await channel.send(payload);
153
+ return {
154
+ messageId: msg.id,
155
+ timestamp: msg.createdAt?.toISOString() ?? new Date().toISOString(),
156
+ };
157
+ }
158
+ async doShutdown() {
159
+ if (this.client) {
160
+ try {
161
+ this.client.destroy();
162
+ }
163
+ catch {
164
+ // Best effort
165
+ }
166
+ }
167
+ this.client = undefined;
168
+ this.djs = undefined;
169
+ console.log('[Discord] Adapter shut down.');
170
+ }
171
+ // ── IChannelAdapter optional methods ──
172
+ async editMessage(conversationId, messageId, content) {
173
+ if (!this.client)
174
+ throw new Error('[Discord] Client is not connected.');
175
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
176
+ if (!channel || typeof channel.messages?.fetch !== 'function') {
177
+ throw new Error(`[Discord] Channel ${conversationId} not found or not a text channel.`);
178
+ }
179
+ const msg = await channel.messages.fetch(messageId);
180
+ if (!msg)
181
+ throw new Error(`[Discord] Message ${messageId} not found.`);
182
+ const payload = this.buildMessagePayload(content);
183
+ await msg.edit(payload);
184
+ }
185
+ async deleteMessage(conversationId, messageId) {
186
+ if (!this.client)
187
+ throw new Error('[Discord] Client is not connected.');
188
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
189
+ if (!channel || typeof channel.messages?.fetch !== 'function') {
190
+ throw new Error(`[Discord] Channel ${conversationId} not found or not a text channel.`);
191
+ }
192
+ const msg = await channel.messages.fetch(messageId);
193
+ if (msg)
194
+ await msg.delete();
195
+ }
196
+ async addReaction(conversationId, messageId, emoji) {
197
+ if (!this.client)
198
+ throw new Error('[Discord] Client is not connected.');
199
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
200
+ if (!channel || typeof channel.messages?.fetch !== 'function')
201
+ return;
202
+ const msg = await channel.messages.fetch(messageId);
203
+ if (msg)
204
+ await msg.react(emoji);
205
+ }
206
+ async sendTypingIndicator(conversationId, _isTyping) {
207
+ if (!this.client)
208
+ return;
209
+ try {
210
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
211
+ if (channel && typeof channel.sendTyping === 'function') {
212
+ await channel.sendTyping();
213
+ }
214
+ }
215
+ catch {
216
+ // Non-critical
217
+ }
218
+ }
219
+ async getConversationInfo(conversationId) {
220
+ if (!this.client)
221
+ throw new Error('[Discord] Client is not connected.');
222
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
223
+ if (!channel) {
224
+ throw new Error(`[Discord] Channel ${conversationId} not found.`);
225
+ }
226
+ return {
227
+ name: channel.name ?? undefined,
228
+ memberCount: channel.members?.size ?? channel.guild?.memberCount,
229
+ isGroup: channel.type !== 1, // DM channel type is 1
230
+ metadata: {
231
+ type: channel.type,
232
+ guildId: channel.guildId ?? undefined,
233
+ guildName: channel.guild?.name ?? undefined,
234
+ topic: channel.topic ?? undefined,
235
+ },
236
+ };
237
+ }
238
+ // ── Private helpers ──
239
+ /**
240
+ * Wire up discord.js event handlers for inbound messages and interactions.
241
+ */
242
+ wireEventHandlers() {
243
+ if (!this.client)
244
+ return;
245
+ // Inbound messages
246
+ this.client.on('messageCreate', (msg) => {
247
+ // Ignore messages from self
248
+ if (msg.author?.bot && msg.author?.id === this.client?.user?.id)
249
+ return;
250
+ this.handleInboundMessage(msg);
251
+ });
252
+ // Message edits
253
+ this.client.on('messageUpdate', (_old, updated) => {
254
+ if (updated.author?.bot && updated.author?.id === this.client?.user?.id)
255
+ return;
256
+ this.emit({
257
+ type: 'message_edited',
258
+ platform: 'discord',
259
+ conversationId: updated.channelId ?? '',
260
+ timestamp: updated.editedAt?.toISOString() ?? new Date().toISOString(),
261
+ data: {
262
+ messageId: updated.id,
263
+ newContent: updated.content,
264
+ },
265
+ });
266
+ });
267
+ // Message deletions
268
+ this.client.on('messageDelete', (msg) => {
269
+ this.emit({
270
+ type: 'message_deleted',
271
+ platform: 'discord',
272
+ conversationId: msg.channelId ?? '',
273
+ timestamp: new Date().toISOString(),
274
+ data: { messageId: msg.id },
275
+ });
276
+ });
277
+ // Reaction add
278
+ this.client.on('messageReactionAdd', (reaction, user) => {
279
+ this.emit({
280
+ type: 'reaction_added',
281
+ platform: 'discord',
282
+ conversationId: reaction.message?.channelId ?? '',
283
+ timestamp: new Date().toISOString(),
284
+ data: {
285
+ messageId: reaction.message?.id,
286
+ emoji: reaction.emoji?.name ?? reaction.emoji?.toString(),
287
+ userId: user?.id,
288
+ },
289
+ });
290
+ });
291
+ // Reaction remove
292
+ this.client.on('messageReactionRemove', (reaction, user) => {
293
+ this.emit({
294
+ type: 'reaction_removed',
295
+ platform: 'discord',
296
+ conversationId: reaction.message?.channelId ?? '',
297
+ timestamp: new Date().toISOString(),
298
+ data: {
299
+ messageId: reaction.message?.id,
300
+ emoji: reaction.emoji?.name ?? reaction.emoji?.toString(),
301
+ userId: user?.id,
302
+ },
303
+ });
304
+ });
305
+ // Interaction (button clicks, etc.)
306
+ this.client.on('interactionCreate', (interaction) => {
307
+ if (interaction.isButton?.()) {
308
+ this.emit({
309
+ type: 'button_callback',
310
+ platform: 'discord',
311
+ conversationId: interaction.channelId ?? '',
312
+ timestamp: new Date().toISOString(),
313
+ data: {
314
+ callbackId: interaction.id,
315
+ buttonId: interaction.customId,
316
+ sender: {
317
+ id: interaction.user?.id ?? '',
318
+ displayName: interaction.user?.displayName ?? interaction.user?.username,
319
+ username: interaction.user?.username,
320
+ },
321
+ messageId: interaction.message?.id ?? '',
322
+ },
323
+ });
324
+ // Acknowledge the interaction
325
+ try {
326
+ interaction.deferUpdate?.();
327
+ }
328
+ catch {
329
+ // Non-critical
330
+ }
331
+ }
332
+ });
333
+ // Connection events
334
+ this.client.on('disconnect', () => {
335
+ if (this.status === 'connected') {
336
+ this.setStatus('reconnecting', 'Connection lost');
337
+ this.reconnect().catch((e) => {
338
+ console.error('[Discord] Reconnect failed:', e);
339
+ });
340
+ }
341
+ });
342
+ }
343
+ /**
344
+ * Handle an inbound discord.js Message and emit a channel event.
345
+ */
346
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
347
+ handleInboundMessage(msg) {
348
+ const contentBlocks = [];
349
+ // Text content
350
+ if (msg.content) {
351
+ contentBlocks.push({ type: 'text', text: msg.content });
352
+ }
353
+ // Attachments (images, video, audio, documents)
354
+ if (msg.attachments?.size > 0) {
355
+ for (const [, attachment] of msg.attachments) {
356
+ const contentType = attachment.contentType ?? '';
357
+ if (contentType.startsWith('image/')) {
358
+ contentBlocks.push({
359
+ type: 'image',
360
+ url: attachment.url,
361
+ caption: attachment.description ?? undefined,
362
+ mimeType: contentType,
363
+ });
364
+ }
365
+ else if (contentType.startsWith('video/')) {
366
+ contentBlocks.push({
367
+ type: 'video',
368
+ url: attachment.url,
369
+ mimeType: contentType,
370
+ });
371
+ }
372
+ else if (contentType.startsWith('audio/')) {
373
+ contentBlocks.push({
374
+ type: 'audio',
375
+ url: attachment.url,
376
+ mimeType: contentType,
377
+ });
378
+ }
379
+ else {
380
+ contentBlocks.push({
381
+ type: 'document',
382
+ url: attachment.url,
383
+ filename: attachment.name ?? 'attachment',
384
+ mimeType: contentType || undefined,
385
+ });
386
+ }
387
+ }
388
+ }
389
+ // Embeds (pass through as text summaries)
390
+ if (msg.embeds?.length > 0) {
391
+ for (const embed of msg.embeds) {
392
+ if (embed.description) {
393
+ contentBlocks.push({ type: 'text', text: embed.description });
394
+ }
395
+ }
396
+ }
397
+ // Stickers
398
+ if (msg.stickers?.size > 0) {
399
+ for (const [, sticker] of msg.stickers) {
400
+ contentBlocks.push({
401
+ type: 'sticker',
402
+ stickerId: sticker.id,
403
+ url: sticker.url,
404
+ });
405
+ }
406
+ }
407
+ if (contentBlocks.length === 0) {
408
+ contentBlocks.push({ type: 'text', text: '' });
409
+ }
410
+ // Determine conversation type
411
+ // discord.js channel types: 0=GuildText, 1=DM, 2=GuildVoice, 5=GuildAnnouncement, 11=PublicThread, etc.
412
+ const channelType = msg.channel?.type;
413
+ const isDM = channelType === 1;
414
+ const isThread = channelType === 11 || channelType === 12;
415
+ const channelMessage = {
416
+ messageId: msg.id,
417
+ platform: 'discord',
418
+ conversationId: msg.channelId ?? '',
419
+ conversationType: isDM ? 'direct' : isThread ? 'thread' : 'group',
420
+ sender: {
421
+ id: msg.author?.id ?? '',
422
+ displayName: msg.member?.displayName ?? msg.author?.displayName ?? msg.author?.username,
423
+ username: msg.author?.username,
424
+ avatarUrl: msg.author?.displayAvatarURL?.() ?? undefined,
425
+ },
426
+ content: contentBlocks,
427
+ text: msg.content ?? '',
428
+ timestamp: msg.createdAt?.toISOString() ?? new Date().toISOString(),
429
+ replyToMessageId: msg.reference?.messageId ?? undefined,
430
+ rawEvent: msg,
431
+ };
432
+ this.emit({
433
+ type: 'message',
434
+ platform: 'discord',
435
+ conversationId: msg.channelId ?? '',
436
+ timestamp: channelMessage.timestamp,
437
+ data: channelMessage,
438
+ });
439
+ }
440
+ /**
441
+ * Build a discord.js message payload from MessageContent.
442
+ */
443
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
444
+ buildMessagePayload(content) {
445
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
446
+ const payload = {};
447
+ const embeds = []; // eslint-disable-line @typescript-eslint/no-explicit-any
448
+ const files = []; // eslint-disable-line @typescript-eslint/no-explicit-any
449
+ const components = []; // eslint-disable-line @typescript-eslint/no-explicit-any
450
+ for (const block of content.blocks) {
451
+ switch (block.type) {
452
+ case 'text': {
453
+ // Append to content string (discord.js uses a single `content` field)
454
+ payload.content = payload.content
455
+ ? `${payload.content}\n${block.text}`
456
+ : block.text;
457
+ break;
458
+ }
459
+ case 'embed': {
460
+ const embed = {
461
+ title: block.title,
462
+ description: block.description,
463
+ url: block.url,
464
+ };
465
+ if (block.color) {
466
+ embed.color = parseInt(block.color.replace('#', ''), 16);
467
+ }
468
+ if (block.fields) {
469
+ embed.fields = block.fields.map((f) => ({
470
+ name: f.name,
471
+ value: f.value,
472
+ inline: f.inline ?? false,
473
+ }));
474
+ }
475
+ embeds.push(embed);
476
+ break;
477
+ }
478
+ case 'image': {
479
+ if (block.url.startsWith('http')) {
480
+ embeds.push({
481
+ image: { url: block.url },
482
+ description: block.caption,
483
+ });
484
+ }
485
+ else {
486
+ files.push({ attachment: block.url, name: 'image.png' });
487
+ }
488
+ break;
489
+ }
490
+ case 'video':
491
+ case 'audio':
492
+ case 'document': {
493
+ files.push({
494
+ attachment: block.url,
495
+ name: block.type === 'document'
496
+ ? block.filename ?? 'file' // eslint-disable-line @typescript-eslint/no-explicit-any
497
+ : `${block.type}.${block.url.split('.').pop() ?? 'bin'}`,
498
+ });
499
+ break;
500
+ }
501
+ case 'button_group': {
502
+ if (this.djs) {
503
+ try {
504
+ const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = this.djs;
505
+ const row = new ActionRowBuilder();
506
+ for (const btn of block.buttons) {
507
+ const button = new ButtonBuilder()
508
+ .setLabel(btn.label);
509
+ if (btn.action === 'url') {
510
+ button.setStyle(ButtonStyle.Link).setURL(btn.value);
511
+ }
512
+ else {
513
+ button.setStyle(ButtonStyle.Primary).setCustomId(btn.id);
514
+ }
515
+ row.addComponents(button);
516
+ }
517
+ components.push(row);
518
+ }
519
+ catch {
520
+ // Fall back to text representation if button builders fail
521
+ const buttonText = block.buttons
522
+ .map((b) => `[${b.label}](${b.value})`)
523
+ .join(' | ');
524
+ payload.content = payload.content
525
+ ? `${payload.content}\n${buttonText}`
526
+ : buttonText;
527
+ }
528
+ }
529
+ break;
530
+ }
531
+ default:
532
+ // Unsupported block type
533
+ console.warn(`[Discord] Unsupported content block type: ${block.type}`); // eslint-disable-line @typescript-eslint/no-explicit-any
534
+ break;
535
+ }
536
+ }
537
+ if (embeds.length > 0)
538
+ payload.embeds = embeds;
539
+ if (files.length > 0)
540
+ payload.files = files;
541
+ if (components.length > 0)
542
+ payload.components = components;
543
+ // Apply any platform-specific options
544
+ if (content.platformOptions) {
545
+ Object.assign(payload, content.platformOptions);
546
+ }
547
+ return payload;
548
+ }
549
+ }
550
+ //# sourceMappingURL=DiscordChannelAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscordChannelAdapter.js","sourceRoot":"","sources":["../../../src/channels/adapters/DiscordChannelAdapter.ts"],"names":[],"mappings":"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"}