@opentabs-dev/opentabs-plugin-discord 0.0.74

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 (121) hide show
  1. package/README.md +138 -0
  2. package/dist/adapter.iife.js +15389 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/discord-api.d.ts +16 -0
  5. package/dist/discord-api.d.ts.map +1 -0
  6. package/dist/discord-api.js +232 -0
  7. package/dist/discord-api.js.map +1 -0
  8. package/dist/index.d.ts +14 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +78 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/tools/add-reaction.d.ts +7 -0
  13. package/dist/tools/add-reaction.d.ts.map +1 -0
  14. package/dist/tools/add-reaction.js +28 -0
  15. package/dist/tools/add-reaction.js.map +1 -0
  16. package/dist/tools/create-channel.d.ts +21 -0
  17. package/dist/tools/create-channel.d.ts.map +1 -0
  18. package/dist/tools/create-channel.js +40 -0
  19. package/dist/tools/create-channel.js.map +1 -0
  20. package/dist/tools/create-thread.d.ts +19 -0
  21. package/dist/tools/create-thread.d.ts.map +1 -0
  22. package/dist/tools/create-thread.js +47 -0
  23. package/dist/tools/create-thread.js.map +1 -0
  24. package/dist/tools/delete-channel.d.ts +16 -0
  25. package/dist/tools/delete-channel.d.ts.map +1 -0
  26. package/dist/tools/delete-channel.js +25 -0
  27. package/dist/tools/delete-channel.js.map +1 -0
  28. package/dist/tools/delete-message.d.ts +6 -0
  29. package/dist/tools/delete-message.d.ts.map +1 -0
  30. package/dist/tools/delete-message.js +23 -0
  31. package/dist/tools/delete-message.js.map +1 -0
  32. package/dist/tools/edit-channel.d.ts +20 -0
  33. package/dist/tools/edit-channel.d.ts.map +1 -0
  34. package/dist/tools/edit-channel.js +39 -0
  35. package/dist/tools/edit-channel.js.map +1 -0
  36. package/dist/tools/edit-message.d.ts +23 -0
  37. package/dist/tools/edit-message.d.ts.map +1 -0
  38. package/dist/tools/edit-message.js +25 -0
  39. package/dist/tools/edit-message.js.map +1 -0
  40. package/dist/tools/get-channel-info.d.ts +16 -0
  41. package/dist/tools/get-channel-info.d.ts.map +1 -0
  42. package/dist/tools/get-channel-info.js +23 -0
  43. package/dist/tools/get-channel-info.js.map +1 -0
  44. package/dist/tools/get-guild-info.d.ts +18 -0
  45. package/dist/tools/get-guild-info.d.ts.map +1 -0
  46. package/dist/tools/get-guild-info.js +48 -0
  47. package/dist/tools/get-guild-info.js.map +1 -0
  48. package/dist/tools/get-message.d.ts +22 -0
  49. package/dist/tools/get-message.d.ts.map +1 -0
  50. package/dist/tools/get-message.js +33 -0
  51. package/dist/tools/get-message.js.map +1 -0
  52. package/dist/tools/get-user-profile.d.ts +19 -0
  53. package/dist/tools/get-user-profile.d.ts.map +1 -0
  54. package/dist/tools/get-user-profile.js +49 -0
  55. package/dist/tools/get-user-profile.js.map +1 -0
  56. package/dist/tools/list-channels.d.ts +16 -0
  57. package/dist/tools/list-channels.d.ts.map +1 -0
  58. package/dist/tools/list-channels.js +24 -0
  59. package/dist/tools/list-channels.js.map +1 -0
  60. package/dist/tools/list-dms.d.ts +16 -0
  61. package/dist/tools/list-dms.d.ts.map +1 -0
  62. package/dist/tools/list-dms.js +36 -0
  63. package/dist/tools/list-dms.js.map +1 -0
  64. package/dist/tools/list-guilds.d.ts +16 -0
  65. package/dist/tools/list-guilds.d.ts.map +1 -0
  66. package/dist/tools/list-guilds.js +34 -0
  67. package/dist/tools/list-guilds.js.map +1 -0
  68. package/dist/tools/list-members.d.ts +20 -0
  69. package/dist/tools/list-members.d.ts.map +1 -0
  70. package/dist/tools/list-members.js +45 -0
  71. package/dist/tools/list-members.js.map +1 -0
  72. package/dist/tools/list-pinned-messages.d.ts +21 -0
  73. package/dist/tools/list-pinned-messages.d.ts.map +1 -0
  74. package/dist/tools/list-pinned-messages.js +24 -0
  75. package/dist/tools/list-pinned-messages.js.map +1 -0
  76. package/dist/tools/list-roles.d.ts +15 -0
  77. package/dist/tools/list-roles.d.ts.map +1 -0
  78. package/dist/tools/list-roles.js +41 -0
  79. package/dist/tools/list-roles.js.map +1 -0
  80. package/dist/tools/open-dm.d.ts +15 -0
  81. package/dist/tools/open-dm.d.ts.map +1 -0
  82. package/dist/tools/open-dm.js +35 -0
  83. package/dist/tools/open-dm.js.map +1 -0
  84. package/dist/tools/pin-message.d.ts +6 -0
  85. package/dist/tools/pin-message.d.ts.map +1 -0
  86. package/dist/tools/pin-message.js +23 -0
  87. package/dist/tools/pin-message.js.map +1 -0
  88. package/dist/tools/read-messages.d.ts +25 -0
  89. package/dist/tools/read-messages.d.ts.map +1 -0
  90. package/dist/tools/read-messages.js +37 -0
  91. package/dist/tools/read-messages.js.map +1 -0
  92. package/dist/tools/read-thread.d.ts +24 -0
  93. package/dist/tools/read-thread.d.ts.map +1 -0
  94. package/dist/tools/read-thread.js +34 -0
  95. package/dist/tools/read-thread.js.map +1 -0
  96. package/dist/tools/remove-reaction.d.ts +7 -0
  97. package/dist/tools/remove-reaction.d.ts.map +1 -0
  98. package/dist/tools/remove-reaction.js +28 -0
  99. package/dist/tools/remove-reaction.js.map +1 -0
  100. package/dist/tools/schemas.d.ts +89 -0
  101. package/dist/tools/schemas.d.ts.map +1 -0
  102. package/dist/tools/schemas.js +72 -0
  103. package/dist/tools/schemas.js.map +1 -0
  104. package/dist/tools/search-messages.d.ts +28 -0
  105. package/dist/tools/search-messages.d.ts.map +1 -0
  106. package/dist/tools/search-messages.js +46 -0
  107. package/dist/tools/search-messages.js.map +1 -0
  108. package/dist/tools/send-message.d.ts +23 -0
  109. package/dist/tools/send-message.d.ts.map +1 -0
  110. package/dist/tools/send-message.js +32 -0
  111. package/dist/tools/send-message.js.map +1 -0
  112. package/dist/tools/unpin-message.d.ts +6 -0
  113. package/dist/tools/unpin-message.d.ts.map +1 -0
  114. package/dist/tools/unpin-message.js +23 -0
  115. package/dist/tools/unpin-message.js.map +1 -0
  116. package/dist/tools/upload-file.d.ts +25 -0
  117. package/dist/tools/upload-file.d.ts.map +1 -0
  118. package/dist/tools/upload-file.js +53 -0
  119. package/dist/tools/upload-file.js.map +1 -0
  120. package/dist/tools.json +2681 -0
  121. package/package.json +55 -0
@@ -0,0 +1,72 @@
1
+ import { z } from 'zod';
2
+ // --- Zod schemas for tool outputs ---
3
+ export const userSchema = z.object({
4
+ id: z.string().describe('User ID'),
5
+ username: z.string().describe('Username'),
6
+ global_name: z.string().nullable().describe('Display name'),
7
+ avatar: z.string().nullable().describe('Avatar hash'),
8
+ bot: z.boolean().describe('Whether the user is a bot'),
9
+ });
10
+ export const messageSchema = z.object({
11
+ id: z.string().describe('Message ID'),
12
+ channel_id: z.string().describe('Channel ID'),
13
+ author: userSchema.describe('Message author'),
14
+ content: z.string().describe('Message text content'),
15
+ timestamp: z.string().describe('ISO 8601 timestamp'),
16
+ edited_timestamp: z.string().nullable().describe('Edit timestamp or null'),
17
+ pinned: z.boolean().describe('Whether the message is pinned'),
18
+ });
19
+ export const channelSchema = z.object({
20
+ id: z.string().describe('Channel ID'),
21
+ type: z.number().describe('Channel type (0=text, 2=voice, 4=category, 5=announcement, etc.)'),
22
+ guild_id: z.string().describe('Guild ID'),
23
+ name: z.string().describe('Channel name'),
24
+ topic: z.string().nullable().describe('Channel topic'),
25
+ position: z.number().describe('Sorting position'),
26
+ parent_id: z.string().nullable().describe('Parent category ID'),
27
+ nsfw: z.boolean().describe('Whether the channel is NSFW'),
28
+ });
29
+ export const guildSchema = z.object({
30
+ id: z.string().describe('Guild (server) ID'),
31
+ name: z.string().describe('Guild name'),
32
+ icon: z.string().nullable().describe('Icon hash'),
33
+ owner: z.boolean().describe('Whether the current user owns this guild'),
34
+ description: z.string().nullable().describe('Guild description'),
35
+ approximate_member_count: z.number().describe('Approximate member count'),
36
+ });
37
+ // --- Defensive mappers ---
38
+ export const mapUser = (u) => ({
39
+ id: u?.id ?? '',
40
+ username: u?.username ?? '',
41
+ global_name: u?.global_name ?? null,
42
+ avatar: u?.avatar ?? null,
43
+ bot: u?.bot ?? false,
44
+ });
45
+ export const mapMessage = (m) => ({
46
+ id: m?.id ?? '',
47
+ channel_id: m?.channel_id ?? '',
48
+ author: mapUser(m?.author),
49
+ content: m?.content ?? '',
50
+ timestamp: m?.timestamp ?? '',
51
+ edited_timestamp: m?.edited_timestamp ?? null,
52
+ pinned: m?.pinned ?? false,
53
+ });
54
+ export const mapChannel = (c) => ({
55
+ id: c?.id ?? '',
56
+ type: c?.type ?? 0,
57
+ guild_id: c?.guild_id ?? '',
58
+ name: c?.name ?? '',
59
+ topic: c?.topic ?? null,
60
+ position: c?.position ?? 0,
61
+ parent_id: c?.parent_id ?? null,
62
+ nsfw: c?.nsfw ?? false,
63
+ });
64
+ export const mapGuild = (g) => ({
65
+ id: g?.id ?? '',
66
+ name: g?.name ?? '',
67
+ icon: g?.icon ?? null,
68
+ owner: g?.owner ?? false,
69
+ description: g?.description ?? null,
70
+ approximate_member_count: g?.approximate_member_count ?? g?.member_count ?? 0,
71
+ });
72
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare const searchMessages: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ guild_id: z.ZodString;
4
+ content: z.ZodOptional<z.ZodString>;
5
+ author_id: z.ZodOptional<z.ZodString>;
6
+ channel_id: z.ZodOptional<z.ZodString>;
7
+ has: z.ZodOptional<z.ZodString>;
8
+ limit: z.ZodOptional<z.ZodNumber>;
9
+ offset: z.ZodOptional<z.ZodNumber>;
10
+ }, z.core.$strip>, z.ZodObject<{
11
+ total_results: z.ZodNumber;
12
+ messages: z.ZodArray<z.ZodArray<z.ZodObject<{
13
+ id: z.ZodString;
14
+ channel_id: z.ZodString;
15
+ author: z.ZodObject<{
16
+ id: z.ZodString;
17
+ username: z.ZodString;
18
+ global_name: z.ZodNullable<z.ZodString>;
19
+ avatar: z.ZodNullable<z.ZodString>;
20
+ bot: z.ZodBoolean;
21
+ }, z.core.$strip>;
22
+ content: z.ZodString;
23
+ timestamp: z.ZodString;
24
+ edited_timestamp: z.ZodNullable<z.ZodString>;
25
+ pinned: z.ZodBoolean;
26
+ }, z.core.$strip>>>;
27
+ }, z.core.$strip>>;
28
+ //# sourceMappingURL=search-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-messages.d.ts","sourceRoot":"","sources":["../../src/tools/search-messages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;kBAwCzB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { discordApi } from '../discord-api.js';
4
+ import { mapMessage, messageSchema } from './schemas.js';
5
+ export const searchMessages = defineTool({
6
+ name: 'search_messages',
7
+ displayName: 'Search Messages',
8
+ description: 'Search for messages in a guild. Supports content queries and filters like from:, in:, has:, before:, after:',
9
+ summary: 'Search messages in a server',
10
+ icon: 'search',
11
+ group: 'Messages',
12
+ input: z.object({
13
+ guild_id: z.string().min(1).describe('Guild (server) ID to search in'),
14
+ content: z.string().optional().describe('Text content to search for'),
15
+ author_id: z.string().optional().describe('Filter by author user ID'),
16
+ channel_id: z.string().optional().describe('Filter by channel ID'),
17
+ has: z.string().optional().describe('Filter by attachment type: link, embed, file, video, image, sound, sticker'),
18
+ limit: z.number().int().min(1).max(25).optional().describe('Number of results (default 25, max 25)'),
19
+ offset: z.number().int().min(0).optional().describe('Result offset for pagination'),
20
+ }),
21
+ output: z.object({
22
+ total_results: z.number().describe('Total number of matching messages'),
23
+ messages: z.array(z.array(messageSchema)).describe('Search results grouped by context'),
24
+ }),
25
+ handle: async (params) => {
26
+ const query = {};
27
+ if (params.content)
28
+ query.content = params.content;
29
+ if (params.author_id)
30
+ query.author_id = params.author_id;
31
+ if (params.channel_id)
32
+ query.channel_id = params.channel_id;
33
+ if (params.has)
34
+ query.has = params.has;
35
+ if (params.limit)
36
+ query.limit = params.limit;
37
+ if (params.offset)
38
+ query.offset = params.offset;
39
+ const data = await discordApi(`/guilds/${params.guild_id}/messages/search`, { query });
40
+ return {
41
+ total_results: data.total_results ?? 0,
42
+ messages: (data.messages ?? []).map(group => group.map(m => mapMessage(m))),
43
+ };
44
+ },
45
+ });
46
+ //# sourceMappingURL=search-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-messages.js","sourceRoot":"","sources":["../../src/tools/search-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EACT,6GAA6G;IAC/G,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACrE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAClE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;QACjH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACpG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACpF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACvE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KACxF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,KAAK,GAA0D,EAAE,CAAC;QACxE,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACnD,IAAI,MAAM,CAAC,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACzD,IAAI,MAAM,CAAC,UAAU;YAAE,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC5D,IAAI,MAAM,CAAC,GAAG;YAAE,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAEhD,MAAM,IAAI,GAAG,MAAM,UAAU,CAG1B,WAAW,MAAM,CAAC,QAAQ,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5D,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC;YACtC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5E,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ export declare const sendMessage: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ channel: z.ZodString;
4
+ content: z.ZodString;
5
+ reply_to: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ message: z.ZodObject<{
8
+ id: z.ZodString;
9
+ channel_id: z.ZodString;
10
+ author: z.ZodObject<{
11
+ id: z.ZodString;
12
+ username: z.ZodString;
13
+ global_name: z.ZodNullable<z.ZodString>;
14
+ avatar: z.ZodNullable<z.ZodString>;
15
+ bot: z.ZodBoolean;
16
+ }, z.core.$strip>;
17
+ content: z.ZodString;
18
+ timestamp: z.ZodString;
19
+ edited_timestamp: z.ZodNullable<z.ZodString>;
20
+ pinned: z.ZodBoolean;
21
+ }, z.core.$strip>;
22
+ }, z.core.$strip>>;
23
+ //# sourceMappingURL=send-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../src/tools/send-message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;kBA0BtB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { discordApi } from '../discord-api.js';
4
+ import { mapMessage, messageSchema } from './schemas.js';
5
+ export const sendMessage = defineTool({
6
+ name: 'send_message',
7
+ displayName: 'Send Message',
8
+ description: 'Send a message to a Discord channel',
9
+ summary: 'Send a message to a channel',
10
+ icon: 'send',
11
+ group: 'Messages',
12
+ input: z.object({
13
+ channel: z.string().min(1).describe('Channel ID to send the message to'),
14
+ content: z.string().min(1).describe('Message text content'),
15
+ reply_to: z.string().optional().describe('Message ID to reply to (creates a threaded reply)'),
16
+ }),
17
+ output: z.object({
18
+ message: messageSchema.describe('The sent message'),
19
+ }),
20
+ handle: async (params) => {
21
+ const body = { content: params.content };
22
+ if (params.reply_to) {
23
+ body.message_reference = { message_id: params.reply_to };
24
+ }
25
+ const data = await discordApi(`/channels/${params.channel}/messages`, {
26
+ method: 'POST',
27
+ body,
28
+ });
29
+ return { message: mapMessage(data) };
30
+ },
31
+ });
32
+ //# sourceMappingURL=send-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../src/tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,qCAAqC;IAClD,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACxE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAC9F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KACpD,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAA4B,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAClE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAA0B,aAAa,MAAM,CAAC,OAAO,WAAW,EAAE;YAC7F,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACvC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ export declare const unpinMessage: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ channel: z.ZodString;
4
+ message_id: z.ZodString;
5
+ }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>>;
6
+ //# sourceMappingURL=unpin-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpin-message.d.ts","sourceRoot":"","sources":["../../src/tools/unpin-message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY;;;kDAkBvB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { discordApi } from '../discord-api.js';
4
+ export const unpinMessage = defineTool({
5
+ name: 'unpin_message',
6
+ displayName: 'Unpin Message',
7
+ description: 'Unpin a message from a channel. Requires Manage Messages permission.',
8
+ summary: 'Unpin a message from a channel',
9
+ icon: 'pin-off',
10
+ group: 'Reactions',
11
+ input: z.object({
12
+ channel: z.string().min(1).describe('Channel ID where the message is located'),
13
+ message_id: z.string().min(1).describe('Message ID to unpin'),
14
+ }),
15
+ output: z.object({}),
16
+ handle: async (params) => {
17
+ await discordApi(`/channels/${params.channel}/pins/${params.message_id}`, {
18
+ method: 'DELETE',
19
+ });
20
+ return {};
21
+ },
22
+ });
23
+ //# sourceMappingURL=unpin-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpin-message.js","sourceRoot":"","sources":["../../src/tools/unpin-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,sEAAsE;IACnF,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC9E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAC9D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,UAAU,CAAC,aAAa,MAAM,CAAC,OAAO,SAAS,MAAM,CAAC,UAAU,EAAE,EAAE;YACxE,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export declare const uploadFile: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ channel: z.ZodString;
4
+ content: z.ZodString;
5
+ filename: z.ZodString;
6
+ is_base64: z.ZodOptional<z.ZodBoolean>;
7
+ initial_comment: z.ZodOptional<z.ZodString>;
8
+ }, z.core.$strip>, z.ZodObject<{
9
+ message: z.ZodObject<{
10
+ id: z.ZodString;
11
+ channel_id: z.ZodString;
12
+ author: z.ZodObject<{
13
+ id: z.ZodString;
14
+ username: z.ZodString;
15
+ global_name: z.ZodNullable<z.ZodString>;
16
+ avatar: z.ZodNullable<z.ZodString>;
17
+ bot: z.ZodBoolean;
18
+ }, z.core.$strip>;
19
+ content: z.ZodString;
20
+ timestamp: z.ZodString;
21
+ edited_timestamp: z.ZodNullable<z.ZodString>;
22
+ pinned: z.ZodBoolean;
23
+ }, z.core.$strip>;
24
+ }, z.core.$strip>>;
25
+ //# sourceMappingURL=upload-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-file.d.ts","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;kBAkDrB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { discordApi } from '../discord-api.js';
4
+ import { mapMessage, messageSchema } from './schemas.js';
5
+ export const uploadFile = defineTool({
6
+ name: 'upload_file',
7
+ displayName: 'Upload File',
8
+ description: 'Upload a file to a Discord channel. Supports text files and base64-encoded binary files.',
9
+ summary: 'Upload a file to a channel',
10
+ icon: 'upload',
11
+ group: 'Files',
12
+ input: z.object({
13
+ channel: z.string().min(1).describe('Channel ID to share the file to'),
14
+ content: z
15
+ .string()
16
+ .min(1)
17
+ .describe('File content as a UTF-8 string (text files) or base64-encoded string (binary files)'),
18
+ filename: z.string().min(1).describe('Name of the file including extension (e.g., report.txt, image.png)'),
19
+ is_base64: z
20
+ .boolean()
21
+ .optional()
22
+ .describe('Set to true when content is base64-encoded (e.g., binary files like images or PDFs). Defaults to false (UTF-8 text).'),
23
+ initial_comment: z.string().optional().describe('Message text to include with the file upload'),
24
+ }),
25
+ output: z.object({
26
+ message: messageSchema.describe('The message containing the uploaded file'),
27
+ }),
28
+ handle: async (params) => {
29
+ let blob;
30
+ if (params.is_base64) {
31
+ const binary = atob(params.content);
32
+ const bytes = new Uint8Array(binary.length);
33
+ for (let i = 0; i < binary.length; i++) {
34
+ bytes[i] = binary.charCodeAt(i);
35
+ }
36
+ blob = new Blob([bytes]);
37
+ }
38
+ else {
39
+ blob = new Blob([params.content], { type: 'text/plain' });
40
+ }
41
+ const form = new FormData();
42
+ form.append('files[0]', blob, params.filename);
43
+ if (params.initial_comment) {
44
+ form.append('payload_json', JSON.stringify({ content: params.initial_comment }));
45
+ }
46
+ const data = await discordApi(`/channels/${params.channel}/messages`, {
47
+ method: 'POST',
48
+ body: form,
49
+ });
50
+ return { message: mapMessage(data) };
51
+ },
52
+ });
53
+ //# sourceMappingURL=upload-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-file.js","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,0FAA0F;IACvG,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACtE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,qFAAqF,CAAC;QAClG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oEAAoE,CAAC;QAC1G,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,sHAAsH,CACvH;QACH,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KAChG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KAC5E,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,IAAI,IAAU,CAAC;QACf,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,UAAU,CAA0B,aAAa,MAAM,CAAC,OAAO,WAAW,EAAE;YAC7F,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACvC,CAAC;CACF,CAAC,CAAC"}