@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.
- package/README.md +138 -0
- package/dist/adapter.iife.js +15389 -0
- package/dist/adapter.iife.js.map +7 -0
- package/dist/discord-api.d.ts +16 -0
- package/dist/discord-api.d.ts.map +1 -0
- package/dist/discord-api.js +232 -0
- package/dist/discord-api.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/add-reaction.d.ts +7 -0
- package/dist/tools/add-reaction.d.ts.map +1 -0
- package/dist/tools/add-reaction.js +28 -0
- package/dist/tools/add-reaction.js.map +1 -0
- package/dist/tools/create-channel.d.ts +21 -0
- package/dist/tools/create-channel.d.ts.map +1 -0
- package/dist/tools/create-channel.js +40 -0
- package/dist/tools/create-channel.js.map +1 -0
- package/dist/tools/create-thread.d.ts +19 -0
- package/dist/tools/create-thread.d.ts.map +1 -0
- package/dist/tools/create-thread.js +47 -0
- package/dist/tools/create-thread.js.map +1 -0
- package/dist/tools/delete-channel.d.ts +16 -0
- package/dist/tools/delete-channel.d.ts.map +1 -0
- package/dist/tools/delete-channel.js +25 -0
- package/dist/tools/delete-channel.js.map +1 -0
- package/dist/tools/delete-message.d.ts +6 -0
- package/dist/tools/delete-message.d.ts.map +1 -0
- package/dist/tools/delete-message.js +23 -0
- package/dist/tools/delete-message.js.map +1 -0
- package/dist/tools/edit-channel.d.ts +20 -0
- package/dist/tools/edit-channel.d.ts.map +1 -0
- package/dist/tools/edit-channel.js +39 -0
- package/dist/tools/edit-channel.js.map +1 -0
- package/dist/tools/edit-message.d.ts +23 -0
- package/dist/tools/edit-message.d.ts.map +1 -0
- package/dist/tools/edit-message.js +25 -0
- package/dist/tools/edit-message.js.map +1 -0
- package/dist/tools/get-channel-info.d.ts +16 -0
- package/dist/tools/get-channel-info.d.ts.map +1 -0
- package/dist/tools/get-channel-info.js +23 -0
- package/dist/tools/get-channel-info.js.map +1 -0
- package/dist/tools/get-guild-info.d.ts +18 -0
- package/dist/tools/get-guild-info.d.ts.map +1 -0
- package/dist/tools/get-guild-info.js +48 -0
- package/dist/tools/get-guild-info.js.map +1 -0
- package/dist/tools/get-message.d.ts +22 -0
- package/dist/tools/get-message.d.ts.map +1 -0
- package/dist/tools/get-message.js +33 -0
- package/dist/tools/get-message.js.map +1 -0
- package/dist/tools/get-user-profile.d.ts +19 -0
- package/dist/tools/get-user-profile.d.ts.map +1 -0
- package/dist/tools/get-user-profile.js +49 -0
- package/dist/tools/get-user-profile.js.map +1 -0
- package/dist/tools/list-channels.d.ts +16 -0
- package/dist/tools/list-channels.d.ts.map +1 -0
- package/dist/tools/list-channels.js +24 -0
- package/dist/tools/list-channels.js.map +1 -0
- package/dist/tools/list-dms.d.ts +16 -0
- package/dist/tools/list-dms.d.ts.map +1 -0
- package/dist/tools/list-dms.js +36 -0
- package/dist/tools/list-dms.js.map +1 -0
- package/dist/tools/list-guilds.d.ts +16 -0
- package/dist/tools/list-guilds.d.ts.map +1 -0
- package/dist/tools/list-guilds.js +34 -0
- package/dist/tools/list-guilds.js.map +1 -0
- package/dist/tools/list-members.d.ts +20 -0
- package/dist/tools/list-members.d.ts.map +1 -0
- package/dist/tools/list-members.js +45 -0
- package/dist/tools/list-members.js.map +1 -0
- package/dist/tools/list-pinned-messages.d.ts +21 -0
- package/dist/tools/list-pinned-messages.d.ts.map +1 -0
- package/dist/tools/list-pinned-messages.js +24 -0
- package/dist/tools/list-pinned-messages.js.map +1 -0
- package/dist/tools/list-roles.d.ts +15 -0
- package/dist/tools/list-roles.d.ts.map +1 -0
- package/dist/tools/list-roles.js +41 -0
- package/dist/tools/list-roles.js.map +1 -0
- package/dist/tools/open-dm.d.ts +15 -0
- package/dist/tools/open-dm.d.ts.map +1 -0
- package/dist/tools/open-dm.js +35 -0
- package/dist/tools/open-dm.js.map +1 -0
- package/dist/tools/pin-message.d.ts +6 -0
- package/dist/tools/pin-message.d.ts.map +1 -0
- package/dist/tools/pin-message.js +23 -0
- package/dist/tools/pin-message.js.map +1 -0
- package/dist/tools/read-messages.d.ts +25 -0
- package/dist/tools/read-messages.d.ts.map +1 -0
- package/dist/tools/read-messages.js +37 -0
- package/dist/tools/read-messages.js.map +1 -0
- package/dist/tools/read-thread.d.ts +24 -0
- package/dist/tools/read-thread.d.ts.map +1 -0
- package/dist/tools/read-thread.js +34 -0
- package/dist/tools/read-thread.js.map +1 -0
- package/dist/tools/remove-reaction.d.ts +7 -0
- package/dist/tools/remove-reaction.d.ts.map +1 -0
- package/dist/tools/remove-reaction.js +28 -0
- package/dist/tools/remove-reaction.js.map +1 -0
- package/dist/tools/schemas.d.ts +89 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +72 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/search-messages.d.ts +28 -0
- package/dist/tools/search-messages.d.ts.map +1 -0
- package/dist/tools/search-messages.js +46 -0
- package/dist/tools/search-messages.js.map +1 -0
- package/dist/tools/send-message.d.ts +23 -0
- package/dist/tools/send-message.d.ts.map +1 -0
- package/dist/tools/send-message.js +32 -0
- package/dist/tools/send-message.js.map +1 -0
- package/dist/tools/unpin-message.d.ts +6 -0
- package/dist/tools/unpin-message.d.ts.map +1 -0
- package/dist/tools/unpin-message.js +23 -0
- package/dist/tools/unpin-message.js.map +1 -0
- package/dist/tools/upload-file.d.ts +25 -0
- package/dist/tools/upload-file.d.ts.map +1 -0
- package/dist/tools/upload-file.js +53 -0
- package/dist/tools/upload-file.js.map +1 -0
- package/dist/tools.json +2681 -0
- 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+CxB,uCAAuC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACrD,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC7C,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAC7F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/D,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACvE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAChE,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC1E,CAAC,CAAC;AAEH,4BAA4B;AAE5B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAmC,EAA8B,EAAE,CAAC,CAAC;IAC3F,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE;IACf,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,EAAE;IAC3B,WAAW,EAAE,CAAC,EAAE,WAAW,IAAI,IAAI;IACnC,MAAM,EAAE,CAAC,EAAE,MAAM,IAAI,IAAI;IACzB,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,KAAK;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAsC,EAAiC,EAAE,CAAC,CAAC;IACpG,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE;IACf,UAAU,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;IAC/B,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE;IACzB,SAAS,EAAE,CAAC,EAAE,SAAS,IAAI,EAAE;IAC7B,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,IAAI,IAAI;IAC7C,MAAM,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAsC,EAAiC,EAAE,CAAC,CAAC;IACpG,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE;IACf,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC;IAClB,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,EAAE;IAC3B,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,EAAE;IACnB,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,IAAI;IACvB,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC;IAC1B,SAAS,EAAE,CAAC,EAAE,SAAS,IAAI,IAAI;IAC/B,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,KAAK;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAoC,EAA+B,EAAE,CAAC,CAAC;IAC9F,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE;IACf,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,EAAE;IACnB,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;IACrB,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,KAAK;IACxB,WAAW,EAAE,CAAC,EAAE,WAAW,IAAI,IAAI;IACnC,wBAAwB,EAAE,CAAC,EAAE,wBAAwB,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC;CAC9E,CAAC,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|