@zhin.js/adapter-telegram 5.0.0 → 5.0.2
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/CHANGELOG.md +30 -0
- package/README.md +9 -0
- package/{skills/telegram → agent}/PERMITS.md +1 -1
- package/agent/tools/create_invite.ts +20 -0
- package/agent/tools/list_admins.ts +26 -0
- package/agent/tools/member_count.ts +18 -0
- package/agent/tools/pin_message.ts +21 -0
- package/agent/tools/react.ts +20 -0
- package/agent/tools/send_poll.ts +34 -0
- package/agent/tools/send_sticker.ts +19 -0
- package/agent/tools/set_description.ts +19 -0
- package/agent/tools/set_permissions.ts +33 -0
- package/agent/tools/unpin_message.ts +21 -0
- package/dist/index.js +2 -2
- package/lib/agent/tools/create_invite.js +20 -0
- package/lib/agent/tools/create_invite.js.map +1 -0
- package/lib/agent/tools/list_admins.js +26 -0
- package/lib/agent/tools/list_admins.js.map +1 -0
- package/lib/agent/tools/member_count.js +18 -0
- package/lib/agent/tools/member_count.js.map +1 -0
- package/lib/agent/tools/pin_message.js +21 -0
- package/lib/agent/tools/pin_message.js.map +1 -0
- package/lib/agent/tools/react.js +20 -0
- package/lib/agent/tools/react.js.map +1 -0
- package/lib/agent/tools/send_poll.js +32 -0
- package/lib/agent/tools/send_poll.js.map +1 -0
- package/lib/agent/tools/send_sticker.js +19 -0
- package/lib/agent/tools/send_sticker.js.map +1 -0
- package/lib/agent/tools/set_description.js +19 -0
- package/lib/agent/tools/set_description.js.map +1 -0
- package/lib/agent/tools/set_permissions.js +34 -0
- package/lib/agent/tools/set_permissions.js.map +1 -0
- package/lib/agent/tools/unpin_message.js +21 -0
- package/lib/agent/tools/unpin_message.js.map +1 -0
- package/lib/{adapter.js → src/adapter.js} +6 -5
- package/lib/src/adapter.js.map +1 -0
- package/lib/{endpoint.js → src/endpoint.js} +57 -8
- package/lib/src/endpoint.js.map +1 -0
- package/lib/src/index.js +215 -0
- package/lib/src/index.js.map +1 -0
- package/lib/{platform-permit.js → src/platform-permit.js} +5 -2
- package/lib/src/platform-permit.js.map +1 -0
- package/lib/src/segment-mapper.js +2 -0
- package/lib/src/segment-mapper.js.map +1 -0
- package/lib/src/telegram-agent-deps.js +10 -0
- package/lib/src/telegram-agent-deps.js.map +1 -0
- package/lib/src/types.js.map +1 -0
- package/package.json +27 -17
- package/src/adapter.ts +6 -5
- package/src/endpoint.ts +68 -7
- package/src/index.ts +13 -263
- package/src/platform-permit.ts +3 -4
- package/src/segment-mapper.ts +1 -0
- package/src/telegram-agent-deps.ts +22 -0
- package/lib/adapter.d.ts +0 -20
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js.map +0 -1
- package/lib/endpoint.d.ts +0 -154
- package/lib/endpoint.d.ts.map +0 -1
- package/lib/endpoint.js.map +0 -1
- package/lib/index.d.ts +0 -18
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -462
- package/lib/index.js.map +0 -1
- package/lib/platform-permit.d.ts +0 -19
- package/lib/platform-permit.d.ts.map +0 -1
- package/lib/platform-permit.js.map +0 -1
- package/lib/types.d.ts +0 -29
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js.map +0 -1
- /package/{skills/telegram/SKILL.md → agent/skills/telegram.md} +0 -0
- /package/lib/{types.js → src/types.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 872c583: fix: 代码格式优化
|
|
8
|
+
- Updated dependencies [872c583]
|
|
9
|
+
- Updated dependencies [872c583]
|
|
10
|
+
- @zhin.js/agent@1.0.3
|
|
11
|
+
- @zhin.js/client@2.0.5
|
|
12
|
+
- @zhin.js/contract@1.0.3
|
|
13
|
+
- @zhin.js/host-api@2.0.5
|
|
14
|
+
- @zhin.js/host-router@2.0.3
|
|
15
|
+
- @zhin.js/logger@1.0.74
|
|
16
|
+
- zhin.js@4.1.2
|
|
17
|
+
|
|
18
|
+
## 5.0.1
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- 5cc9c03: fix: ai 优化
|
|
23
|
+
- b9b3881: fix: 增加游戏引擎以及部分游戏
|
|
24
|
+
- Updated dependencies [5cc9c03]
|
|
25
|
+
- Updated dependencies [7700903]
|
|
26
|
+
- @zhin.js/logger@1.0.73
|
|
27
|
+
- @zhin.js/client@2.0.4
|
|
28
|
+
- @zhin.js/contract@1.0.2
|
|
29
|
+
- @zhin.js/host-api@2.0.4
|
|
30
|
+
- @zhin.js/host-router@2.0.2
|
|
31
|
+
- zhin.js@4.1.1
|
|
32
|
+
|
|
3
33
|
## 5.0.0
|
|
4
34
|
|
|
5
35
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -166,6 +166,15 @@ You can send files using:
|
|
|
166
166
|
- URL
|
|
167
167
|
- Local file path
|
|
168
168
|
|
|
169
|
+
## AI tools
|
|
170
|
+
|
|
171
|
+
| Kind | Path |
|
|
172
|
+
|------|------|
|
|
173
|
+
| Platform tools (10) | `agent/tools/` (`telegram_*`: invites, pins, admins, stickers, etc.) |
|
|
174
|
+
| Skill doc | `agent/skills/telegram.md` |
|
|
175
|
+
| Scene management | `createSceneManagementTools()` |
|
|
176
|
+
|
|
177
|
+
|
|
169
178
|
## Troubleshooting
|
|
170
179
|
|
|
171
180
|
| 现象 | 排查 |
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; chat_id: string }>({
|
|
7
|
+
description: '创建 Telegram 群组邀请链接',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['telegram'],
|
|
13
|
+
tags: ['telegram'],
|
|
14
|
+
permissions: [platformPermit('chat_administrator')],
|
|
15
|
+
async execute({ endpoint_id, chat_id }: { endpoint_id: string; chat_id: string }) {
|
|
16
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
+
const link = await endpoint.createInviteLink(Number(chat_id));
|
|
18
|
+
return { invite_link: link, message: `邀请链接: ${link}` };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
|
|
5
|
+
export default defineTool<{ endpoint_id: string; chat_id: string }>({
|
|
6
|
+
description: '获取 Telegram 群组管理员列表',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['telegram'],
|
|
12
|
+
tags: ['telegram'],
|
|
13
|
+
async execute({ endpoint_id, chat_id }: { endpoint_id: string; chat_id: string }) {
|
|
14
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
15
|
+
const admins = await endpoint.getChatAdmins(Number(chat_id));
|
|
16
|
+
return {
|
|
17
|
+
admins: admins.map((a: { user: { id: number; username?: string; first_name?: string }; status: string }) => ({
|
|
18
|
+
user_id: a.user.id,
|
|
19
|
+
username: a.user.username,
|
|
20
|
+
first_name: a.user.first_name,
|
|
21
|
+
status: a.status,
|
|
22
|
+
})),
|
|
23
|
+
count: admins.length,
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
|
|
5
|
+
export default defineTool<{ endpoint_id: string; chat_id: string }>({
|
|
6
|
+
description: '获取 Telegram 群组成员数量',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['telegram'],
|
|
12
|
+
tags: ['telegram'],
|
|
13
|
+
async execute({ endpoint_id, chat_id }: { endpoint_id: string; chat_id: string }) {
|
|
14
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
15
|
+
const count = await endpoint.getChatMemberCount(Number(chat_id));
|
|
16
|
+
return { count, message: `群组共有 ${count} 名成员` };
|
|
17
|
+
},
|
|
18
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; chat_id: string; message_id: string }>({
|
|
7
|
+
description: '置顶 Telegram 群组消息',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
11
|
+
message_id: z.string().describe('消息 ID'),
|
|
12
|
+
}),
|
|
13
|
+
platforms: ['telegram'],
|
|
14
|
+
tags: ['telegram'],
|
|
15
|
+
permissions: [platformPermit('pin_messages')],
|
|
16
|
+
async execute({ endpoint_id, chat_id, message_id }: { endpoint_id: string; chat_id: string; message_id: string }) {
|
|
17
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
18
|
+
const success = await endpoint.pinMessage(Number(chat_id), Number(message_id));
|
|
19
|
+
return { success, message: success ? '消息已置顶' : '操作失败' };
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
|
|
5
|
+
export default defineTool<{ endpoint_id: string; chat_id: string; message_id: string; reaction: string }>({
|
|
6
|
+
description: '对 Telegram 消息添加表情反应',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
message_id: z.string().describe('消息 ID'),
|
|
11
|
+
reaction: z.string().describe('反应表情(如 👍、❤️、🔥)'),
|
|
12
|
+
}),
|
|
13
|
+
platforms: ['telegram'],
|
|
14
|
+
tags: ['telegram'],
|
|
15
|
+
async execute({ endpoint_id, chat_id, message_id, reaction }: { endpoint_id: string; chat_id: string; message_id: string; reaction: string }) {
|
|
16
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
+
const success = await endpoint.setMessageReaction(Number(chat_id), Number(message_id), reaction);
|
|
18
|
+
return { success, message: success ? `已添加反应 ${reaction}` : '操作失败' };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
|
|
5
|
+
export default defineTool<{ endpoint_id: string; chat_id: string; question: string; options: string; is_anonymous?: boolean; allows_multiple?: boolean }>({
|
|
6
|
+
description: '在 Telegram 群组中发起投票',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
question: z.string().describe('投票问题'),
|
|
11
|
+
options: z.string().describe('选项 JSON 数组,如 ["A","B","C"]'),
|
|
12
|
+
is_anonymous: z.boolean().optional().describe('是否匿名投票,默认 true'),
|
|
13
|
+
allows_multiple: z.boolean().optional().describe('是否允许多选,默认 false'),
|
|
14
|
+
}),
|
|
15
|
+
platforms: ['telegram'],
|
|
16
|
+
tags: ['telegram'],
|
|
17
|
+
async execute({ endpoint_id, chat_id, question, options, is_anonymous, allows_multiple }: { endpoint_id: string; chat_id: string; question: string; options: string; is_anonymous?: boolean; allows_multiple?: boolean }) {
|
|
18
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
19
|
+
let optList: string[];
|
|
20
|
+
try {
|
|
21
|
+
optList = JSON.parse(options);
|
|
22
|
+
} catch {
|
|
23
|
+
return { success: false, message: 'options 格式错误,应为 JSON 数组' };
|
|
24
|
+
}
|
|
25
|
+
if (!Array.isArray(optList) || optList.length < 2) {
|
|
26
|
+
return { success: false, message: '至少需要 2 个选项' };
|
|
27
|
+
}
|
|
28
|
+
const result = await endpoint.sendPoll(
|
|
29
|
+
Number(chat_id), question, optList,
|
|
30
|
+
is_anonymous ?? true, allows_multiple ?? false,
|
|
31
|
+
);
|
|
32
|
+
return { success: true, message_id: result.message_id, message: '投票已发送' };
|
|
33
|
+
},
|
|
34
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
|
|
5
|
+
export default defineTool<{ endpoint_id: string; chat_id: string; sticker: string }>({
|
|
6
|
+
description: '发送 Telegram 贴纸',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
sticker: z.string().describe('贴纸 file_id 或 URL'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['telegram'],
|
|
13
|
+
tags: ['telegram'],
|
|
14
|
+
async execute({ endpoint_id, chat_id, sticker }: { endpoint_id: string; chat_id: string; sticker: string }) {
|
|
15
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
+
const result = await endpoint.sendStickerMessage(Number(chat_id), sticker);
|
|
17
|
+
return { success: true, message_id: result.message_id, message: '贴纸已发送' };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
|
|
5
|
+
export default defineTool<{ endpoint_id: string; chat_id: string; description: string }>({
|
|
6
|
+
description: '设置 Telegram 群组描述',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
description: z.string().describe('群描述文字'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['telegram'],
|
|
13
|
+
tags: ['telegram'],
|
|
14
|
+
async execute({ endpoint_id, chat_id, description }: { endpoint_id: string; chat_id: string; description: string }) {
|
|
15
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
+
const success = await endpoint.setChatDescription(Number(chat_id), description);
|
|
17
|
+
return { success, message: success ? '群描述已更新' : '操作失败' };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; chat_id: string; can_send_messages?: boolean; can_send_photos?: boolean; can_send_videos?: boolean; can_send_polls?: boolean; can_send_other_messages?: boolean; can_add_web_page_previews?: boolean; can_change_info?: boolean; can_invite_users?: boolean; can_pin_messages?: boolean }>({
|
|
7
|
+
description: '设置 Telegram 群组的默认成员权限',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
11
|
+
can_send_messages: z.boolean().optional().describe('是否可以发消息'),
|
|
12
|
+
can_send_photos: z.boolean().optional().describe('是否可以发图片'),
|
|
13
|
+
can_send_videos: z.boolean().optional().describe('是否可以发视频'),
|
|
14
|
+
can_send_polls: z.boolean().optional().describe('是否可以发投票'),
|
|
15
|
+
can_send_other_messages: z.boolean().optional().describe('是否可以发贴纸/GIF等'),
|
|
16
|
+
can_add_web_page_previews: z.boolean().optional().describe('是否可以添加网页预览'),
|
|
17
|
+
can_change_info: z.boolean().optional().describe('是否可以改群信息'),
|
|
18
|
+
can_invite_users: z.boolean().optional().describe('是否可以邀请用户'),
|
|
19
|
+
can_pin_messages: z.boolean().optional().describe('是否可以置顶消息'),
|
|
20
|
+
}),
|
|
21
|
+
platforms: ['telegram'],
|
|
22
|
+
tags: ['telegram'],
|
|
23
|
+
permissions: [platformPermit('manage_chat')],
|
|
24
|
+
async execute({ endpoint_id, chat_id, ...perms }: { endpoint_id: string; chat_id: string; can_send_messages?: boolean; can_send_photos?: boolean; can_send_videos?: boolean; can_send_polls?: boolean; can_send_other_messages?: boolean; can_add_web_page_previews?: boolean; can_change_info?: boolean; can_invite_users?: boolean; can_pin_messages?: boolean }) {
|
|
25
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
26
|
+
const permissions: Record<string, boolean> = {};
|
|
27
|
+
for (const [k, v] of Object.entries(perms)) {
|
|
28
|
+
if (typeof v === 'boolean') permissions[k] = v;
|
|
29
|
+
}
|
|
30
|
+
const success = await endpoint.setChatPermissionsAll(Number(chat_id), permissions);
|
|
31
|
+
return { success, message: success ? '群权限已更新' : '操作失败' };
|
|
32
|
+
},
|
|
33
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; chat_id: string; message_id?: string }>({
|
|
7
|
+
description: '取消置顶 Telegram 群组消息',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
11
|
+
message_id: z.string().optional().describe('消息 ID(可选,不提供则取消所有置顶)'),
|
|
12
|
+
}),
|
|
13
|
+
platforms: ['telegram'],
|
|
14
|
+
tags: ['telegram'],
|
|
15
|
+
permissions: [platformPermit('pin_messages')],
|
|
16
|
+
async execute({ endpoint_id, chat_id, message_id }: { endpoint_id: string; chat_id: string; message_id?: string }) {
|
|
17
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
18
|
+
const success = await endpoint.unpinMessage(Number(chat_id), message_id ? Number(message_id) : undefined);
|
|
19
|
+
return { success, message: success ? '已取消置顶' : '操作失败' };
|
|
20
|
+
},
|
|
21
|
+
});
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{useEffect as He,useState as r,useCallback as Ge}from"react";var oe="zhin_api_token",xe="zhin_api_base";function Ce(){let o=localStorage.getItem(xe)?.trim();return o?o.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function he(){return localStorage.getItem(oe)}async function g(o,l){let s=he(),i=new Headers(l?.headers);s&&i.set("Authorization",`Bearer ${s}`);let L=Ce(),f=typeof o=="string"&&o.startsWith("/")?`${L}${o}`:o,I=await fetch(f,{...l,headers:i});return I.status===401&&(localStorage.removeItem(oe),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),I}import{forwardRef as Pe,createElement as Ae}from"react";var G=(...o)=>o.filter((l,s,i)=>!!l&&l.trim()!==""&&i.indexOf(l)===s).join(" ").trim();var ue=o=>o.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var de=o=>o.replace(/^([A-Z])|[\s-_]+(\w)/g,(l,s,i)=>i?i.toUpperCase():s.toLowerCase());var z=o=>{let l=de(o);return l.charAt(0).toUpperCase()+l.slice(1)};import{forwardRef as we,createElement as se}from"react";var W={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var le=o=>{for(let l in o)if(l.startsWith("aria-")||l==="role"||l==="title")return!0;return!1};import{createContext as ge,useContext as Se,useMemo as Je,createElement as je}from"react";var ke=ge({});var fe=()=>Se(ke);var re=we(({color:o,size:l,strokeWidth:s,absoluteStrokeWidth:i,className:L="",children:f,iconNode:I,...k},q)=>{let{size:C=24,strokeWidth:n=2,absoluteStrokeWidth:E=!1,color:p="currentColor",className:V=""}=fe()??{},w=i??E?Number(s??n)*24/Number(l??C):s??n;return se("svg",{ref:q,...W,width:l??C??W.width,height:l??C??W.height,stroke:o??p,strokeWidth:w,className:G("lucide",V,L),...!f&&!le(k)&&{"aria-hidden":"true"},...k},[...I.map(([v,U])=>se(v,U)),...Array.isArray(f)?f:[f]])});var u=(o,l)=>{let s=Pe(({className:i,...L},f)=>Ae(re,{ref:f,iconNode:l,className:G(`lucide-${ue(z(o))}`,`lucide-${o}`,i),...L}));return s.displayName=z(o),s};var Be=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],x=u("chart-column",Be);var Me=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],A=u("link-2",Me);var Fe=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],m=u("loader-circle",Fe);var De=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],B=u("plus",De);var ye=[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15",key:"dxknvb"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68",key:"1x7qb5"}],["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],M=u("power-off",ye);var Re=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],F=u("power",Re);var be=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],D=u("refresh-cw",be);var Te=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],y=u("server",Te);var qe=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],R=u("shield-check",qe);var ve=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],b=u("wifi-off",ve);var Ue=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],T=u("wifi",Ue);var Oe=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],S=u("x",Oe);import{Fragment as We,jsx as a,jsxs as t}from"react/jsx-runtime";function X(){let[o,l]=r([]),[s,i]=r(!0),[L,f]=r(""),[I,k]=r("overview"),[q,C]=r({}),[n,E]=r(""),[p,V]=r(""),[w,v]=r(""),[U,K]=r([]),[Z,Q]=r(!1),[O,ie]=r(""),[h,N]=r(["",""]),[_,ce]=r(!0),[J,ne]=r(!1),[j,$]=r(""),[Y,ee]=r(!1),H=Ge(async()=>{i(!0),f("");try{let d=await(await g("/api/telegram/endpoints")).json();d.success?l(d.data):f(d.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{f("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{i(!1)}},[]);He(()=>{H()},[H]);let pe=async(e,d)=>{C(c=>({...c,[e]:!0}));try{let c=d?"disconnect":"connect",te=await(await g(`/api/telegram/endpoints/${encodeURIComponent(e)}/${c}`,{method:"POST"})).json();te.success||f(te.error||"\u64CD\u4F5C\u5931\u8D25"),await H()}catch{f("\u64CD\u4F5C\u5931\u8D25")}finally{C(c=>({...c,[e]:!1}))}},me=async()=>{if(!(!n||!p)){v("");try{let d=await(await g(`/api/telegram/endpoints/${encodeURIComponent(n)}/invite`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:p})})).json();d.success&&d.data?.invite_link?v(d.data.invite_link):f(d.error||"\u521B\u5EFA\u5931\u8D25")}catch{f("\u521B\u5EFA\u9080\u8BF7\u94FE\u63A5\u5931\u8D25")}}},Le=async()=>{if(!(!n||!p)){Q(!0),K([]);try{let d=await(await g(`/api/telegram/endpoints/${encodeURIComponent(n)}/admins?chat_id=${encodeURIComponent(p)}`)).json();d.success&&Array.isArray(d.data)?K(d.data):f(d.error||"\u83B7\u53D6\u7BA1\u7406\u5458\u5931\u8D25")}catch{f("\u83B7\u53D6\u7BA1\u7406\u5458\u5931\u8D25")}finally{Q(!1)}}},Ie=async()=>{if(!n||!p||!O)return;let e=h.filter(d=>d.trim());if(e.length<2){f("\u81F3\u5C11\u9700\u8981 2 \u4E2A\u9009\u9879");return}ee(!0),$("");try{let c=await(await g(`/api/telegram/endpoints/${encodeURIComponent(n)}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:p,question:O,options:e,is_anonymous:_,allows_multiple:J})})).json();c.success?$(`\u6295\u7968\u5DF2\u53D1\u9001 (ID: ${c.data?.message_id??"\u672A\u77E5"})`):f(c.error||"\u53D1\u9001\u5931\u8D25")}catch{f("\u53D1\u9001\u6295\u7968\u5931\u8D25")}finally{ee(!1)}},ae=o.filter(e=>e.connected);return t("div",{className:"p-6 max-w-5xl mx-auto",children:[t("div",{className:"flex items-center justify-between mb-6",children:[t("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[a(y,{className:"w-6 h-6"})," Telegram \u673A\u5668\u4EBA"]}),t("button",{onClick:H,disabled:s,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-sky-500 text-white hover:bg-sky-600 disabled:opacity-50 text-sm",children:[a(D,{className:`w-4 h-4 ${s?"animate-spin":""}`})," \u5237\u65B0"]})]}),L&&t("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200 flex items-center justify-between",children:[a("span",{children:L}),a("button",{onClick:()=>f(""),className:"text-red-400 hover:text-red-600",children:a(S,{className:"w-4 h-4"})})]}),t("div",{className:"flex gap-1 mb-6 border-b",children:[a("button",{onClick:()=>k("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${I==="overview"?"border-sky-500 text-sky-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u6982\u89C8"}),a("button",{onClick:()=>k("actions"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${I==="actions"?"border-sky-500 text-sky-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u5FEB\u6377\u64CD\u4F5C"})]}),I==="overview"&&t(We,{children:[!s&&!o.length&&!L&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 Telegram Endpoint \u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:o.map(e=>t("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[t("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?t("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(T,{className:"w-4 h-4"})," \u5728\u7EBF"]}):t("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(b,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),e.botInfo&&t("div",{className:"text-sm text-gray-500 mb-2",children:["@",e.botInfo.username," (",e.botInfo.firstName,")"]}),a("div",{className:"text-sm text-gray-600 mb-3",children:t("div",{className:"flex justify-between",children:[a("span",{children:"\u6A21\u5F0F"}),a("span",{className:"font-mono",children:e.mode})]})}),t("button",{onClick:()=>pe(e.name,e.connected),disabled:q[e.name],className:`flex items-center gap-1 px-3 py-1.5 rounded text-sm text-white ${e.connected?"bg-red-500 hover:bg-red-600":"bg-green-500 hover:bg-green-600"} disabled:opacity-50`,children:[q[e.name]?a(m,{className:"w-3.5 h-3.5 animate-spin"}):e.connected?a(M,{className:"w-3.5 h-3.5"}):a(F,{className:"w-3.5 h-3.5"}),e.connected?"\u65AD\u5F00":"\u8FDE\u63A5"]})]},e.name))})]}),I==="actions"&&t("div",{className:"space-y-6",children:[t("div",{className:"flex flex-wrap items-end gap-3",children:[t("div",{children:[a("label",{className:"block text-xs text-gray-500 mb-1",children:"\u673A\u5668\u4EBA"}),t("select",{value:n,onChange:e=>E(e.target.value),className:"border rounded px-2 py-1.5 text-sm min-w-[140px]",children:[a("option",{value:"",children:"--"}),ae.map(e=>a("option",{value:e.name,children:e.name},e.name))]})]}),t("div",{children:[a("label",{className:"block text-xs text-gray-500 mb-1",children:"Chat ID"}),a("input",{value:p,onChange:e=>V(e.target.value),placeholder:"-100xxxxxxxxxx",className:"border rounded px-2 py-1.5 text-sm w-[180px]"})]})]}),!ae.length&&a("div",{className:"text-center text-gray-500 py-4",children:"\u6682\u65E0\u5728\u7EBF Endpoint"}),n&&p&&t("div",{className:"grid gap-4 md:grid-cols-2",children:[t("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[t("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[a(A,{className:"w-4 h-4 text-sky-500"})," \u521B\u5EFA\u9080\u8BF7\u94FE\u63A5"]}),a("button",{onClick:me,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600",children:"\u751F\u6210\u94FE\u63A5"}),w&&a("div",{className:"mt-2 p-2 bg-gray-50 rounded text-sm break-all",children:a("a",{href:w,target:"_blank",rel:"noreferrer",className:"text-sky-600 hover:underline",children:w})})]}),t("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[t("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[a(R,{className:"w-4 h-4 text-sky-500"})," \u7BA1\u7406\u5458\u5217\u8868"]}),t("button",{onClick:Le,disabled:Z,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600 disabled:opacity-50 flex items-center gap-1",children:[Z&&a(m,{className:"w-3.5 h-3.5 animate-spin"})," \u67E5\u8BE2"]}),U.length>0&&a("div",{className:"mt-2 space-y-1",children:U.map(e=>t("div",{className:"flex items-center justify-between text-sm py-1 border-b last:border-0",children:[t("span",{children:[e.first_name," ",e.username?`(@${e.username})`:""]}),a("span",{className:"text-xs text-gray-400",children:e.status})]},e.user_id))})]}),t("div",{className:"border rounded-lg p-4 bg-card shadow-sm md:col-span-2",children:[t("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[a(x,{className:"w-4 h-4 text-sky-500"})," \u53D1\u8D77\u6295\u7968"]}),t("div",{className:"space-y-2",children:[a("input",{value:O,onChange:e=>ie(e.target.value),placeholder:"\u6295\u7968\u95EE\u9898",className:"border rounded px-2 py-1.5 text-sm w-full"}),h.map((e,d)=>t("div",{className:"flex items-center gap-2",children:[a("input",{value:e,onChange:c=>{let P=[...h];P[d]=c.target.value,N(P)},placeholder:`\u9009\u9879 ${d+1}`,className:"border rounded px-2 py-1.5 text-sm flex-1"}),h.length>2&&a("button",{onClick:()=>N(h.filter((c,P)=>P!==d)),className:"text-gray-400 hover:text-red-500",children:a(S,{className:"w-4 h-4"})})]},d)),t("button",{onClick:()=>N([...h,""]),className:"flex items-center gap-1 text-sm text-sky-500 hover:text-sky-600",children:[a(B,{className:"w-3.5 h-3.5"})," \u6DFB\u52A0\u9009\u9879"]}),t("div",{className:"flex items-center gap-4 text-sm text-gray-600",children:[t("label",{className:"flex items-center gap-1",children:[a("input",{type:"checkbox",checked:_,onChange:e=>ce(e.target.checked)})," \u533F\u540D"]}),t("label",{className:"flex items-center gap-1",children:[a("input",{type:"checkbox",checked:J,onChange:e=>ne(e.target.checked)})," \u591A\u9009"]})]}),t("button",{onClick:Ie,disabled:Y||!O,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600 disabled:opacity-50 flex items-center gap-1",children:[Y&&a(m,{className:"w-3.5 h-3.5 animate-spin"})," \u53D1\u9001\u6295\u7968"]}),j&&a("div",{className:"text-sm text-green-600",children:j})]})]})]})]})]})}function et(o){o.addRoute({path:"/telegram",name:"Telegram",element:o.React.createElement(X,{hostReact:o.React})}),o.addTool({id:"telegram",name:"Telegram",path:"/telegram"})}export{et as register};
|
|
1
|
+
import{useEffect as He,useState as r,useCallback as Ge}from"react";var oe="zhin_api_token",xe="zhin_api_base";function Ce(){let o=localStorage.getItem(xe)?.trim();return o?o.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function he(){return localStorage.getItem(oe)}async function g(o,l){let f=he(),i=new Headers(l?.headers);f&&i.set("Authorization",`Bearer ${f}`);let L=Ce(),s=typeof o=="string"&&o.startsWith("/")?`${L}${o}`:o,I=await fetch(s,{...l,headers:i});return I.status===401&&(localStorage.removeItem(oe),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),I}import{forwardRef as Pe,createElement as Ae}from"react";var G=(...o)=>o.filter((l,f,i)=>!!l&&l.trim()!==""&&i.indexOf(l)===f).join(" ").trim();var ue=o=>o.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var de=o=>o.replace(/^([A-Z])|[\s-_]+(\w)/g,(l,f,i)=>i?i.toUpperCase():f.toLowerCase());var z=o=>{let l=de(o);return l.charAt(0).toUpperCase()+l.slice(1)};import{forwardRef as we,createElement as fe}from"react";var W={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var le=o=>{for(let l in o)if(l.startsWith("aria-")||l==="role"||l==="title")return!0;return!1};import{createContext as ge,useContext as Se,useMemo as Je,createElement as je}from"react";var ke=ge({});var se=()=>Se(ke);var re=we(({color:o,size:l,strokeWidth:f,absoluteStrokeWidth:i,className:L="",children:s,iconNode:I,...k},q)=>{let{size:C=24,strokeWidth:n=2,absoluteStrokeWidth:E=!1,color:p="currentColor",className:V=""}=se()??{},w=i??E?Number(f??n)*24/Number(l??C):f??n;return fe("svg",{ref:q,...W,width:l??C??W.width,height:l??C??W.height,stroke:o??p,strokeWidth:w,className:G("lucide",V,L),...!s&&!le(k)&&{"aria-hidden":"true"},...k},[...I.map(([v,U])=>fe(v,U)),...Array.isArray(s)?s:[s]])});var u=(o,l)=>{let f=Pe(({className:i,...L},s)=>Ae(re,{ref:s,iconNode:l,className:G(`lucide-${ue(z(o))}`,`lucide-${o}`,i),...L}));return f.displayName=z(o),f};var Be=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],x=u("chart-column",Be);var Me=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],A=u("link-2",Me);var De=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],m=u("loader-circle",De);var Fe=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],B=u("plus",Fe);var ye=[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15",key:"dxknvb"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68",key:"1x7qb5"}],["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],M=u("power-off",ye);var Re=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],D=u("power",Re);var be=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],F=u("refresh-cw",be);var Te=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],y=u("server",Te);var qe=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],R=u("shield-check",qe);var ve=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],b=u("wifi-off",ve);var Ue=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],T=u("wifi",Ue);var Oe=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],S=u("x",Oe);import{Fragment as We,jsx as a,jsxs as t}from"react/jsx-runtime";function X(){let[o,l]=r([]),[f,i]=r(!0),[L,s]=r(""),[I,k]=r("overview"),[q,C]=r({}),[n,E]=r(""),[p,V]=r(""),[w,v]=r(""),[U,K]=r([]),[Z,Q]=r(!1),[O,ie]=r(""),[h,N]=r(["",""]),[_,ce]=r(!0),[J,ne]=r(!1),[j,$]=r(""),[Y,ee]=r(!1),H=Ge(async()=>{i(!0),s("");try{let d=await(await g("/api/telegram/endpoints")).json();d.success?l(d.data):s(d.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{s("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{i(!1)}},[]);He(()=>{H()},[H]);let pe=async(e,d)=>{C(c=>({...c,[e]:!0}));try{let c=d?"disconnect":"connect",te=await(await g(`/api/telegram/endpoints/${encodeURIComponent(e)}/${c}`,{method:"POST"})).json();te.success||s(te.error||"\u64CD\u4F5C\u5931\u8D25"),await H()}catch{s("\u64CD\u4F5C\u5931\u8D25")}finally{C(c=>({...c,[e]:!1}))}},me=async()=>{if(!(!n||!p)){v("");try{let d=await(await g(`/api/telegram/endpoints/${encodeURIComponent(n)}/invite`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:p})})).json();d.success&&d.data?.invite_link?v(d.data.invite_link):s(d.error||"\u521B\u5EFA\u5931\u8D25")}catch{s("\u521B\u5EFA\u9080\u8BF7\u94FE\u63A5\u5931\u8D25")}}},Le=async()=>{if(!(!n||!p)){Q(!0),K([]);try{let d=await(await g(`/api/telegram/endpoints/${encodeURIComponent(n)}/admins?chat_id=${encodeURIComponent(p)}`)).json();d.success&&Array.isArray(d.data)?K(d.data):s(d.error||"\u83B7\u53D6\u7BA1\u7406\u5458\u5931\u8D25")}catch{s("\u83B7\u53D6\u7BA1\u7406\u5458\u5931\u8D25")}finally{Q(!1)}}},Ie=async()=>{if(!n||!p||!O)return;let e=h.filter(d=>d.trim());if(e.length<2){s("\u81F3\u5C11\u9700\u8981 2 \u4E2A\u9009\u9879");return}ee(!0),$("");try{let c=await(await g(`/api/telegram/endpoints/${encodeURIComponent(n)}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:p,question:O,options:e,is_anonymous:_,allows_multiple:J})})).json();c.success?$(`\u6295\u7968\u5DF2\u53D1\u9001 (ID: ${c.data?.message_id??"\u672A\u77E5"})`):s(c.error||"\u53D1\u9001\u5931\u8D25")}catch{s("\u53D1\u9001\u6295\u7968\u5931\u8D25")}finally{ee(!1)}},ae=o.filter(e=>e.connected);return t("div",{className:"p-6 max-w-5xl mx-auto",children:[t("div",{className:"flex items-center justify-between mb-6",children:[t("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[a(y,{className:"w-6 h-6"})," Telegram \u673A\u5668\u4EBA"]}),t("button",{onClick:H,disabled:f,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-sky-500 text-white hover:bg-sky-600 disabled:opacity-50 text-sm",children:[a(F,{className:`w-4 h-4 ${f?"animate-spin":""}`})," \u5237\u65B0"]})]}),L&&t("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200 flex items-center justify-between",children:[a("span",{children:L}),a("button",{onClick:()=>s(""),className:"text-red-400 hover:text-red-600",children:a(S,{className:"w-4 h-4"})})]}),t("div",{className:"flex gap-1 mb-6 border-b",children:[a("button",{onClick:()=>k("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${I==="overview"?"border-sky-500 text-sky-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u6982\u89C8"}),a("button",{onClick:()=>k("actions"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${I==="actions"?"border-sky-500 text-sky-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u5FEB\u6377\u64CD\u4F5C"})]}),I==="overview"&&t(We,{children:[!f&&!o.length&&!L&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 Telegram Endpoint \u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:o.map(e=>t("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[t("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?t("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(T,{className:"w-4 h-4"})," \u5728\u7EBF"]}):t("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(b,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),e.botInfo&&t("div",{className:"text-sm text-gray-500 mb-2",children:["@",e.botInfo.username," (",e.botInfo.firstName,")"]}),a("div",{className:"text-sm text-gray-600 mb-3",children:t("div",{className:"flex justify-between",children:[a("span",{children:"\u6A21\u5F0F"}),a("span",{className:"font-mono",children:e.mode})]})}),t("button",{onClick:()=>pe(e.name,e.connected),disabled:q[e.name],className:`flex items-center gap-1 px-3 py-1.5 rounded text-sm text-white ${e.connected?"bg-red-500 hover:bg-red-600":"bg-green-500 hover:bg-green-600"} disabled:opacity-50`,children:[q[e.name]?a(m,{className:"w-3.5 h-3.5 animate-spin"}):e.connected?a(M,{className:"w-3.5 h-3.5"}):a(D,{className:"w-3.5 h-3.5"}),e.connected?"\u65AD\u5F00":"\u8FDE\u63A5"]})]},e.name))})]}),I==="actions"&&t("div",{className:"space-y-6",children:[t("div",{className:"flex flex-wrap items-end gap-3",children:[t("div",{children:[a("label",{className:"block text-xs text-gray-500 mb-1",children:"\u673A\u5668\u4EBA"}),t("select",{value:n,onChange:e=>E(e.target.value),className:"border rounded px-2 py-1.5 text-sm min-w-[140px]",children:[a("option",{value:"",children:"--"}),ae.map(e=>a("option",{value:e.name,children:e.name},e.name))]})]}),t("div",{children:[a("label",{className:"block text-xs text-gray-500 mb-1",children:"Chat ID"}),a("input",{value:p,onChange:e=>V(e.target.value),placeholder:"-100xxxxxxxxxx",className:"border rounded px-2 py-1.5 text-sm w-[180px]"})]})]}),!ae.length&&a("div",{className:"text-center text-gray-500 py-4",children:"\u6682\u65E0\u5728\u7EBF Endpoint"}),n&&p&&t("div",{className:"grid gap-4 md:grid-cols-2",children:[t("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[t("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[a(A,{className:"w-4 h-4 text-sky-500"})," \u521B\u5EFA\u9080\u8BF7\u94FE\u63A5"]}),a("button",{onClick:me,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600",children:"\u751F\u6210\u94FE\u63A5"}),w&&a("div",{className:"mt-2 p-2 bg-gray-50 rounded text-sm break-all",children:a("a",{href:w,target:"_blank",rel:"noreferrer",className:"text-sky-600 hover:underline",children:w})})]}),t("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[t("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[a(R,{className:"w-4 h-4 text-sky-500"})," \u7BA1\u7406\u5458\u5217\u8868"]}),t("button",{onClick:Le,disabled:Z,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600 disabled:opacity-50 flex items-center gap-1",children:[Z&&a(m,{className:"w-3.5 h-3.5 animate-spin"})," \u67E5\u8BE2"]}),U.length>0&&a("div",{className:"mt-2 space-y-1",children:U.map(e=>t("div",{className:"flex items-center justify-between text-sm py-1 border-b last:border-0",children:[t("span",{children:[e.first_name," ",e.username?`(@${e.username})`:""]}),a("span",{className:"text-xs text-gray-400",children:e.status})]},e.user_id))})]}),t("div",{className:"border rounded-lg p-4 bg-card shadow-sm md:col-span-2",children:[t("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[a(x,{className:"w-4 h-4 text-sky-500"})," \u53D1\u8D77\u6295\u7968"]}),t("div",{className:"space-y-2",children:[a("input",{value:O,onChange:e=>ie(e.target.value),placeholder:"\u6295\u7968\u95EE\u9898",className:"border rounded px-2 py-1.5 text-sm w-full"}),h.map((e,d)=>t("div",{className:"flex items-center gap-2",children:[a("input",{value:e,onChange:c=>{let P=[...h];P[d]=c.target.value,N(P)},placeholder:`\u9009\u9879 ${d+1}`,className:"border rounded px-2 py-1.5 text-sm flex-1"}),h.length>2&&a("button",{onClick:()=>N(h.filter((c,P)=>P!==d)),className:"text-gray-400 hover:text-red-500",children:a(S,{className:"w-4 h-4"})})]},d)),t("button",{onClick:()=>N([...h,""]),className:"flex items-center gap-1 text-sm text-sky-500 hover:text-sky-600",children:[a(B,{className:"w-3.5 h-3.5"})," \u6DFB\u52A0\u9009\u9879"]}),t("div",{className:"flex items-center gap-4 text-sm text-gray-600",children:[t("label",{className:"flex items-center gap-1",children:[a("input",{type:"checkbox",checked:_,onChange:e=>ce(e.target.checked)})," \u533F\u540D"]}),t("label",{className:"flex items-center gap-1",children:[a("input",{type:"checkbox",checked:J,onChange:e=>ne(e.target.checked)})," \u591A\u9009"]})]}),t("button",{onClick:Ie,disabled:Y||!O,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600 disabled:opacity-50 flex items-center gap-1",children:[Y&&a(m,{className:"w-3.5 h-3.5 animate-spin"})," \u53D1\u9001\u6295\u7968"]}),j&&a("div",{className:"text-sm text-green-600",children:j})]})]})]})]})]})}function et(o){o.addRoute({path:"/telegram",name:"Telegram",element:o.React.createElement(X,{hostReact:o.React})}),o.addTool({id:"telegram",name:"Telegram",path:"/telegram"})}export{et as register};
|
|
2
2
|
/*! Bundled license information:
|
|
3
3
|
|
|
4
4
|
lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
|
|
@@ -24,7 +24,7 @@ lucide-react/dist/esm/icons/wifi.mjs:
|
|
|
24
24
|
lucide-react/dist/esm/icons/x.mjs:
|
|
25
25
|
lucide-react/dist/esm/lucide-react.mjs:
|
|
26
26
|
(**
|
|
27
|
-
* @license lucide-react v1.
|
|
27
|
+
* @license lucide-react v1.23.0 - ISC
|
|
28
28
|
*
|
|
29
29
|
* This source code is licensed under the ISC license.
|
|
30
30
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '创建 Telegram 群组邀请链接',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['telegram'],
|
|
12
|
+
tags: ['telegram'],
|
|
13
|
+
permissions: [platformPermit('chat_administrator')],
|
|
14
|
+
async execute({ endpoint_id, chat_id }) {
|
|
15
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
+
const link = await endpoint.createInviteLink(Number(chat_id));
|
|
17
|
+
return { invite_link: link, message: `邀请链接: ${link}` };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=create_invite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_invite.js","sourceRoot":"","sources":["../../../agent/tools/create_invite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAA2C;IAClE,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,WAAW,EAAE,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACnD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAA6C;QAC/E,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;IACzD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description: '获取 Telegram 群组管理员列表',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
9
|
+
}),
|
|
10
|
+
platforms: ['telegram'],
|
|
11
|
+
tags: ['telegram'],
|
|
12
|
+
async execute({ endpoint_id, chat_id }) {
|
|
13
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
14
|
+
const admins = await endpoint.getChatAdmins(Number(chat_id));
|
|
15
|
+
return {
|
|
16
|
+
admins: admins.map((a) => ({
|
|
17
|
+
user_id: a.user.id,
|
|
18
|
+
username: a.user.username,
|
|
19
|
+
first_name: a.user.first_name,
|
|
20
|
+
status: a.status,
|
|
21
|
+
})),
|
|
22
|
+
count: admins.length,
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=list_admins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_admins.js","sourceRoot":"","sources":["../../../agent/tools/list_admins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAA2C;IAClE,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAA6C;QAC/E,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmF,EAAE,EAAE,CAAC,CAAC;gBAC3G,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;gBAClB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;gBACzB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;gBAC7B,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC;YACH,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description: '获取 Telegram 群组成员数量',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
9
|
+
}),
|
|
10
|
+
platforms: ['telegram'],
|
|
11
|
+
tags: ['telegram'],
|
|
12
|
+
async execute({ endpoint_id, chat_id }) {
|
|
13
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
14
|
+
const count = await endpoint.getChatMemberCount(Number(chat_id));
|
|
15
|
+
return { count, message: `群组共有 ${count} 名成员` };
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=member_count.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member_count.js","sourceRoot":"","sources":["../../../agent/tools/member_count.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAA2C;IAClE,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAA6C;QAC/E,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,KAAK,MAAM,EAAE,CAAC;IACjD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '置顶 Telegram 群组消息',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
10
|
+
message_id: z.string().describe('消息 ID'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['telegram'],
|
|
13
|
+
tags: ['telegram'],
|
|
14
|
+
permissions: [platformPermit('pin_messages')],
|
|
15
|
+
async execute({ endpoint_id, chat_id, message_id }) {
|
|
16
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
+
const success = await endpoint.pinMessage(Number(chat_id), Number(message_id));
|
|
18
|
+
return { success, message: success ? '消息已置顶' : '操作失败' };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=pin_message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pin_message.js","sourceRoot":"","sources":["../../../agent/tools/pin_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAA+D;IACtF,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACzC,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAiE;QAC/G,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description: '对 Telegram 消息添加表情反应',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
9
|
+
message_id: z.string().describe('消息 ID'),
|
|
10
|
+
reaction: z.string().describe('反应表情(如 👍、❤️、🔥)'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['telegram'],
|
|
13
|
+
tags: ['telegram'],
|
|
14
|
+
async execute({ endpoint_id, chat_id, message_id, reaction }) {
|
|
15
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
+
const success = await endpoint.setMessageReaction(Number(chat_id), Number(message_id), reaction);
|
|
17
|
+
return { success, message: success ? `已添加反应 ${reaction}` : '操作失败' };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../agent/tools/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAAiF;IACxG,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAClD,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAmF;QAC3I,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtE,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description: '在 Telegram 群组中发起投票',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
9
|
+
question: z.string().describe('投票问题'),
|
|
10
|
+
options: z.string().describe('选项 JSON 数组,如 ["A","B","C"]'),
|
|
11
|
+
is_anonymous: z.boolean().optional().describe('是否匿名投票,默认 true'),
|
|
12
|
+
allows_multiple: z.boolean().optional().describe('是否允许多选,默认 false'),
|
|
13
|
+
}),
|
|
14
|
+
platforms: ['telegram'],
|
|
15
|
+
tags: ['telegram'],
|
|
16
|
+
async execute({ endpoint_id, chat_id, question, options, is_anonymous, allows_multiple }) {
|
|
17
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
18
|
+
let optList;
|
|
19
|
+
try {
|
|
20
|
+
optList = JSON.parse(options);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return { success: false, message: 'options 格式错误,应为 JSON 数组' };
|
|
24
|
+
}
|
|
25
|
+
if (!Array.isArray(optList) || optList.length < 2) {
|
|
26
|
+
return { success: false, message: '至少需要 2 个选项' };
|
|
27
|
+
}
|
|
28
|
+
const result = await endpoint.sendPoll(Number(chat_id), question, optList, is_anonymous ?? true, allows_multiple ?? false);
|
|
29
|
+
return { success: true, message_id: result.message_id, message: '投票已发送' };
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=send_poll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send_poll.js","sourceRoot":"","sources":["../../../agent/tools/send_poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAAiI;IACxJ,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC1D,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KACpE,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAmI;QACvN,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QACnD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CACpC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAClC,YAAY,IAAI,IAAI,EAAE,eAAe,IAAI,KAAK,CAC/C,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC5E,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description: '发送 Telegram 贴纸',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
9
|
+
sticker: z.string().describe('贴纸 file_id 或 URL'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['telegram'],
|
|
12
|
+
tags: ['telegram'],
|
|
13
|
+
async execute({ endpoint_id, chat_id, sticker }) {
|
|
14
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
15
|
+
const result = await endpoint.sendStickerMessage(Number(chat_id), sticker);
|
|
16
|
+
return { success: true, message_id: result.message_id, message: '贴纸已发送' };
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=send_sticker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send_sticker.js","sourceRoot":"","sources":["../../../agent/tools/send_sticker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAA4D;IACnF,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KACjD,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAA8D;QACzG,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC5E,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getTelegramAgentDeps } from '../../src/telegram-agent-deps.js';
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description: '设置 Telegram 群组描述',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
+
chat_id: z.string().describe('聊天 ID'),
|
|
9
|
+
description: z.string().describe('群描述文字'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['telegram'],
|
|
12
|
+
tags: ['telegram'],
|
|
13
|
+
async execute({ endpoint_id, chat_id, description }) {
|
|
14
|
+
const endpoint = getTelegramAgentDeps().getEndpoint(endpoint_id);
|
|
15
|
+
const success = await endpoint.setChatDescription(Number(chat_id), description);
|
|
16
|
+
return { success, message: success ? '群描述已更新' : '操作失败' };
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=set_description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set_description.js","sourceRoot":"","sources":["../../../agent/tools/set_description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAe,UAAU,CAAgE;IACvF,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC1C,CAAC;IACF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAkE;QACjH,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;QAChF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3D,CAAC;CACF,CAAC,CAAC"}
|