@zhin.js/adapter-qq 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 +35 -0
- package/README.md +50 -1
- package/{skills/qq → agent}/PERMITS.md +1 -1
- package/agent/tools/add_role.ts +23 -0
- package/agent/tools/channel_info.ts +19 -0
- package/agent/tools/create_role.ts +22 -0
- package/agent/tools/list_channels.ts +20 -0
- package/agent/tools/list_guilds.ts +17 -0
- package/agent/tools/list_roles.ts +20 -0
- package/agent/tools/member_detail.ts +20 -0
- package/agent/tools/remove_role.ts +23 -0
- package/dist/index.js +2 -2
- package/lib/agent/tools/add_role.js +23 -0
- package/lib/agent/tools/add_role.js.map +1 -0
- package/lib/agent/tools/channel_info.js +19 -0
- package/lib/agent/tools/channel_info.js.map +1 -0
- package/lib/agent/tools/create_role.js +22 -0
- package/lib/agent/tools/create_role.js.map +1 -0
- package/lib/agent/tools/list_channels.js +20 -0
- package/lib/agent/tools/list_channels.js.map +1 -0
- package/lib/agent/tools/list_guilds.js +17 -0
- package/lib/agent/tools/list_guilds.js.map +1 -0
- package/lib/agent/tools/list_roles.js +20 -0
- package/lib/agent/tools/list_roles.js.map +1 -0
- package/lib/agent/tools/member_detail.js +20 -0
- package/lib/agent/tools/member_detail.js.map +1 -0
- package/lib/agent/tools/remove_role.js +23 -0
- package/lib/agent/tools/remove_role.js.map +1 -0
- package/lib/package.json +105 -0
- package/lib/{adapter.js → src/adapter.js} +12 -5
- package/lib/src/adapter.js.map +1 -0
- package/lib/{endpoint.js → src/endpoint.js} +80 -3
- package/lib/src/endpoint.js.map +1 -0
- package/lib/{gateway-config.js → src/gateway-config.js} +3 -3
- package/lib/src/gateway-config.js.map +1 -0
- package/lib/{group-at-normalize.js → src/group-at-normalize.js} +2 -5
- package/lib/src/group-at-normalize.js.map +1 -0
- package/lib/src/inbound-action.js +57 -0
- package/lib/src/inbound-action.js.map +1 -0
- package/lib/src/inbound-normalize.js.map +1 -0
- package/lib/src/index.js +194 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/mention-enrich.js +52 -0
- package/lib/src/mention-enrich.js.map +1 -0
- package/lib/src/outbound-keyboard.js +100 -0
- package/lib/src/outbound-keyboard.js.map +1 -0
- package/lib/src/outbound-markdown.js +189 -0
- package/lib/src/outbound-markdown.js.map +1 -0
- package/lib/{outbound-media.js → src/outbound-media.js} +2 -1
- package/lib/src/outbound-media.js.map +1 -0
- package/lib/src/outbound-mixed-media.js +78 -0
- package/lib/src/outbound-mixed-media.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/qq-agent-deps.js +10 -0
- package/lib/src/qq-agent-deps.js.map +1 -0
- package/lib/{qq-bind-api.js → src/qq-bind-api.js} +9 -5
- package/lib/src/qq-bind-api.js.map +1 -0
- package/lib/{qq-bind-flow.js → src/qq-bind-flow.js} +11 -2
- package/lib/src/qq-bind-flow.js.map +1 -0
- package/lib/src/qq-bind-persist.js +52 -0
- package/lib/src/qq-bind-persist.js.map +1 -0
- package/lib/{qq-endpoint-manager.js → src/qq-endpoint-manager.js} +43 -8
- package/lib/src/qq-endpoint-manager.js.map +1 -0
- package/lib/src/sdk-version.js.map +1 -0
- package/lib/src/segment-mapper.js +2 -0
- package/lib/src/segment-mapper.js.map +1 -0
- package/lib/src/types.js.map +1 -0
- package/package.json +27 -17
- package/src/adapter.ts +14 -10
- package/src/endpoint.ts +119 -12
- package/src/gateway-config.ts +5 -5
- package/src/group-at-normalize.ts +2 -5
- package/src/inbound-action.ts +87 -0
- package/src/index.ts +13 -196
- package/src/mention-enrich.ts +71 -0
- package/src/outbound-keyboard.ts +117 -0
- package/src/outbound-markdown.ts +141 -22
- package/src/outbound-media.ts +2 -1
- package/src/outbound-mixed-media.ts +101 -0
- package/src/platform-permit.ts +3 -4
- package/src/qq-agent-deps.ts +23 -0
- package/src/qq-bind-api.ts +24 -5
- package/src/qq-bind-flow.ts +13 -3
- package/src/qq-bind-persist.ts +71 -0
- package/src/qq-endpoint-manager.ts +64 -11
- package/src/segment-mapper.ts +1 -0
- package/src/types.ts +8 -2
- package/lib/adapter.d.ts +0 -25
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js.map +0 -1
- package/lib/endpoint.d.ts +0 -120
- package/lib/endpoint.d.ts.map +0 -1
- package/lib/endpoint.js.map +0 -1
- package/lib/gateway-config.d.ts +0 -14
- package/lib/gateway-config.d.ts.map +0 -1
- package/lib/gateway-config.js.map +0 -1
- package/lib/group-at-normalize.d.ts +0 -8
- package/lib/group-at-normalize.d.ts.map +0 -1
- package/lib/group-at-normalize.js.map +0 -1
- package/lib/inbound-normalize.d.ts +0 -11
- package/lib/inbound-normalize.d.ts.map +0 -1
- package/lib/inbound-normalize.js.map +0 -1
- package/lib/index.d.ts +0 -23
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -375
- package/lib/index.js.map +0 -1
- package/lib/outbound-markdown.d.ts +0 -12
- package/lib/outbound-markdown.d.ts.map +0 -1
- package/lib/outbound-markdown.js +0 -78
- package/lib/outbound-markdown.js.map +0 -1
- package/lib/outbound-media.d.ts +0 -9
- package/lib/outbound-media.d.ts.map +0 -1
- package/lib/outbound-media.js.map +0 -1
- package/lib/platform-permit.d.ts +0 -17
- package/lib/platform-permit.d.ts.map +0 -1
- package/lib/platform-permit.js.map +0 -1
- package/lib/qq-bind-api.d.ts +0 -27
- package/lib/qq-bind-api.d.ts.map +0 -1
- package/lib/qq-bind-api.js.map +0 -1
- package/lib/qq-bind-flow.d.ts +0 -19
- package/lib/qq-bind-flow.d.ts.map +0 -1
- package/lib/qq-bind-flow.js.map +0 -1
- package/lib/qq-endpoint-manager.d.ts +0 -16
- package/lib/qq-endpoint-manager.d.ts.map +0 -1
- package/lib/qq-endpoint-manager.js.map +0 -1
- package/lib/sdk-version.d.ts +0 -8
- package/lib/sdk-version.d.ts.map +0 -1
- package/lib/sdk-version.js.map +0 -1
- package/lib/types.d.ts +0 -38
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js.map +0 -1
- /package/{skills/qq/SKILL.md → agent/skills/qq.md} +0 -0
- /package/lib/{inbound-normalize.js → src/inbound-normalize.js} +0 -0
- /package/lib/{sdk-version.js → src/sdk-version.js} +0 -0
- /package/lib/{types.js → src/types.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# @zhin.js/adapter-qq
|
|
2
2
|
|
|
3
|
+
## 5.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 872c583: Slack 适配器 Phase 1/2:mrkdwn 出站、长消息切分、斜杠/按钮 ephemeral 反馈、入站 mrkdwn→Markdown、editMessage 对齐 core。
|
|
8
|
+
|
|
9
|
+
Logger 表格日志与 string-width 列宽;Agent AI Handler 框线表格与 introspection/MCP 导出;Core side-event 归一化;Schedule 时区规划;多适配器 side-event 与 API surface 更新。
|
|
10
|
+
|
|
11
|
+
- 872c583: fix: 代码格式优化
|
|
12
|
+
- Updated dependencies [872c583]
|
|
13
|
+
- Updated dependencies [872c583]
|
|
14
|
+
- @zhin.js/agent@1.0.3
|
|
15
|
+
- @zhin.js/client@2.0.5
|
|
16
|
+
- @zhin.js/contract@1.0.3
|
|
17
|
+
- @zhin.js/host-api@2.0.5
|
|
18
|
+
- @zhin.js/host-router@2.0.3
|
|
19
|
+
- @zhin.js/logger@1.0.74
|
|
20
|
+
- zhin.js@4.1.2
|
|
21
|
+
|
|
22
|
+
## 5.0.1
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- 5cc9c03: fix: ai 优化
|
|
27
|
+
- b9b3881: fix: 增加游戏引擎以及部分游戏
|
|
28
|
+
- 7700903: fix: 游戏强化
|
|
29
|
+
- Updated dependencies [5cc9c03]
|
|
30
|
+
- Updated dependencies [7700903]
|
|
31
|
+
- @zhin.js/logger@1.0.73
|
|
32
|
+
- @zhin.js/client@2.0.4
|
|
33
|
+
- @zhin.js/contract@1.0.2
|
|
34
|
+
- @zhin.js/host-api@2.0.4
|
|
35
|
+
- @zhin.js/host-router@2.0.2
|
|
36
|
+
- zhin.js@4.1.1
|
|
37
|
+
|
|
3
38
|
## 5.0.0
|
|
4
39
|
|
|
5
40
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -10,11 +10,16 @@ pnpm add @zhin.js/adapter-qq
|
|
|
10
10
|
|
|
11
11
|
## 扫码添加机器人(/endpoint)
|
|
12
12
|
|
|
13
|
-
无需手动复制 AppID/AppSecret:在 IM 中由 **master / trusted** 操作员发送命令,适配器会内联调用 QQ 开放平台绑定协议(等价 `@tencent-connect/qqbot-connector`,**不依赖**该 npm
|
|
13
|
+
无需手动复制 AppID/AppSecret:在 IM 中由 **master / trusted** 操作员发送命令,适配器会内联调用 QQ 开放平台绑定协议(等价 `@tencent-connect/qqbot-connector`,**不依赖**该 npm 包),扫码成功后:
|
|
14
|
+
|
|
15
|
+
- 凭据写入项目根 **`.env`**(键名 `QQ_<name>_APPID` / `QQ_<name>_SECRET`)
|
|
16
|
+
- `zhin.config.yml` 仅保留 **`${...}` 引用**(与脚手架其它 adapter 一致)
|
|
17
|
+
- **`master`** 与 **`aiAccess.users`** 自动设为 `poll_bind_result` 返回的扫码者 OpenID(接口无该字段时回退为发起命令的用户 ID)
|
|
14
18
|
|
|
15
19
|
| 命令 | 说明 |
|
|
16
20
|
|------|------|
|
|
17
21
|
| `/endpoint add qq [name]` | 发起扫码绑定;`name` 默认使用 AppID |
|
|
22
|
+
| `/endpoint sync` | 将内存 endpoint 写回 `zhin.config.yml` |
|
|
18
23
|
| `/endpoint cancel` | 取消进行中的绑定 |
|
|
19
24
|
| `/endpoints` | 查看运行时 qq endpoints 在线状态 |
|
|
20
25
|
| `/endpoint help` | Endpoint 管理帮助 |
|
|
@@ -23,6 +28,31 @@ pnpm add @zhin.js/adapter-qq
|
|
|
23
28
|
|
|
24
29
|
二维码渲染使用 core 的 `segment.qrcode` / `GeneratedQrCode`(`import { segment } from 'zhin.js'` 或 `import { GeneratedQrCode } from 'zhin.js/qrcode'`)。
|
|
25
30
|
|
|
31
|
+
## AIGC 合规(AI 白名单)
|
|
32
|
+
|
|
33
|
+
QQ 开放平台限制 AIGC 进入社群场景、禁止面向全量用户开放生成式能力。请配置 **`endpoints[].aiAccess`**(推荐)或全局 **`ai.access`**,仅 gate LLM 回复;斜杠命令、游戏插件等不受影响。
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
endpoints:
|
|
37
|
+
- context: qq
|
|
38
|
+
name: my-bot
|
|
39
|
+
appid: ...
|
|
40
|
+
secret: ...
|
|
41
|
+
aiAccess:
|
|
42
|
+
mode: whitelist
|
|
43
|
+
users: ['QQ用户openid']
|
|
44
|
+
groups: ['QQ群openid']
|
|
45
|
+
denyMessage: 当前未开放 AI,请联系管理员。
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
多 Endpoint 时可分别设置(例如正式服 `whitelist`、沙箱 `open`)。未写 `endpoints[].aiAccess` 时回退到全局 `ai.access`。
|
|
49
|
+
|
|
50
|
+
- 群/频道未放行:**静默**(不回复 AI)
|
|
51
|
+
- 私聊未放行:回复 `denyMessage`
|
|
52
|
+
- 白名单:`users` 与 `groups` **OR** 匹配
|
|
53
|
+
|
|
54
|
+
详见 [内容审查 / AI Access Gate](../../../docs/advanced/content-moderation.md)。
|
|
55
|
+
|
|
26
56
|
## 配置
|
|
27
57
|
|
|
28
58
|
### 基础配置
|
|
@@ -295,6 +325,15 @@ endpoints:
|
|
|
295
325
|
|
|
296
326
|
含图片/文件等富媒体的多段消息不会合并,避免破坏分条发送。
|
|
297
327
|
|
|
328
|
+
**图文混排**(文本 + 图片,典型如二维码说明 + `segment.qrcode`)会自动处理:
|
|
329
|
+
|
|
330
|
+
| 图片类型 | 行为 |
|
|
331
|
+
|---|---|
|
|
332
|
+
| 公网 `https` URL | 合并为单条 Markdown(`msg_type=2`),图片用 `` |
|
|
333
|
+
| 内联 base64 / data URI(如二维码渲染) | 群聊/私聊先上传 `file_info`,再以 `msg_type=7` 图文混排同条发送 |
|
|
334
|
+
|
|
335
|
+
`outboundMarkdown: false` 时关闭上述合并,恢复分条发送。
|
|
336
|
+
|
|
298
337
|
## API 方法
|
|
299
338
|
|
|
300
339
|
### 基础方法
|
|
@@ -393,6 +432,16 @@ A: 使用 `platform` 配置:
|
|
|
393
432
|
- [QQ 机器人开发文档](https://bot.q.qq.com/wiki/)
|
|
394
433
|
- [Zhin.js 官方文档](https://github.com/zhinjs/zhin)
|
|
395
434
|
|
|
435
|
+
## AI 工具
|
|
436
|
+
|
|
437
|
+
| 类别 | 路径 |
|
|
438
|
+
|------|------|
|
|
439
|
+
| Permit 词汇 | `agent/PERMITS.md` |
|
|
440
|
+
| 平台工具(8 个) | `agent/tools/`(`qq_*`:公会、频道、角色等) |
|
|
441
|
+
| 技能说明 | `agent/skills/qq.md` |
|
|
442
|
+
| 群管标准工具 | `createSceneManagementTools()` |
|
|
443
|
+
|
|
444
|
+
|
|
396
445
|
## 许可证
|
|
397
446
|
|
|
398
447
|
MIT License
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; guild_id: string; channel_id: string; user_id: string; role_id: string }>({
|
|
7
|
+
description: '给成员添加 QQ 频道角色',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
guild_id: z.string().describe('频道 ID'),
|
|
11
|
+
channel_id: z.string().describe('子频道 ID'),
|
|
12
|
+
user_id: z.string().describe('用户 ID'),
|
|
13
|
+
role_id: z.string().describe('角色 ID'),
|
|
14
|
+
}),
|
|
15
|
+
platforms: ['qq'],
|
|
16
|
+
tags: ['qq'],
|
|
17
|
+
permissions: [platformPermit('manage_roles')],
|
|
18
|
+
async execute({ endpoint_id, guild_id, channel_id, user_id, role_id }: { endpoint_id: string; guild_id: string; channel_id: string; user_id: string; role_id: string }) {
|
|
19
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
20
|
+
const success = await endpoint.addMemberRole(guild_id, channel_id, user_id, role_id);
|
|
21
|
+
return { success, message: success ? '已给成员添加角色' : '操作失败' };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; channel_id: string }>({
|
|
7
|
+
description: '获取 QQ 频道中指定子频道的详细信息',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
channel_id: z.string().describe('子频道 ID'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['qq'],
|
|
13
|
+
tags: ['qq'],
|
|
14
|
+
permissions: [platformPermit('guild_admin')],
|
|
15
|
+
async execute({ endpoint_id, channel_id }: { endpoint_id: string; channel_id: string }) {
|
|
16
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
+
return endpoint.getChannelInfo(channel_id);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; guild_id: string; name: string; color?: number }>({
|
|
7
|
+
description: '创建 QQ 频道角色',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
guild_id: z.string().describe('频道 ID'),
|
|
11
|
+
name: z.string().describe('角色名称'),
|
|
12
|
+
color: z.number().optional().describe('颜色(RGB 十进制数值)'),
|
|
13
|
+
}),
|
|
14
|
+
platforms: ['qq'],
|
|
15
|
+
tags: ['qq'],
|
|
16
|
+
permissions: [platformPermit('guild_owner')],
|
|
17
|
+
async execute({ endpoint_id, guild_id, name, color }: { endpoint_id: string; guild_id: string; name: string; color?: number }) {
|
|
18
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
19
|
+
const role = await endpoint.createGuildRole(guild_id, name, color);
|
|
20
|
+
return { success: !!role, role, message: role ? `角色 "${name}" 创建成功` : '创建失败' };
|
|
21
|
+
},
|
|
22
|
+
});
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; guild_id: string }>({
|
|
7
|
+
description: '获取 QQ 频道下的子频道列表',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
guild_id: z.string().describe('频道 ID'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['qq'],
|
|
13
|
+
tags: ['qq'],
|
|
14
|
+
permissions: [platformPermit('manage_channels')],
|
|
15
|
+
async execute({ endpoint_id, guild_id }: { endpoint_id: string; guild_id: string }) {
|
|
16
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
+
const channels = await endpoint.getChannels(guild_id);
|
|
18
|
+
return { channels, count: channels.length };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
4
|
+
|
|
5
|
+
export default defineTool<{ endpoint_id: string }>({
|
|
6
|
+
description: '获取 QQ 频道列表',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
}),
|
|
10
|
+
platforms: ['qq'],
|
|
11
|
+
tags: ['qq'],
|
|
12
|
+
async execute({ endpoint_id }: { endpoint_id: string }) {
|
|
13
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
14
|
+
const guilds = await endpoint.getGuilds();
|
|
15
|
+
return { guilds, count: guilds.length };
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; guild_id: string }>({
|
|
7
|
+
description: '获取 QQ 频道角色列表',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
guild_id: z.string().describe('频道 ID'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['qq'],
|
|
13
|
+
tags: ['qq'],
|
|
14
|
+
permissions: [platformPermit('manage_roles')],
|
|
15
|
+
async execute({ endpoint_id, guild_id }: { endpoint_id: string; guild_id: string }) {
|
|
16
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
+
const roles = await endpoint.getGuildRoles(guild_id);
|
|
18
|
+
return { roles, count: roles.length };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; guild_id: string; user_id: string }>({
|
|
7
|
+
description: '获取 QQ 频道中指定成员的详细信息',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
guild_id: z.string().describe('频道 ID'),
|
|
11
|
+
user_id: z.string().describe('用户 ID'),
|
|
12
|
+
}),
|
|
13
|
+
platforms: ['qq'],
|
|
14
|
+
tags: ['qq'],
|
|
15
|
+
permissions: [platformPermit('guild_admin')],
|
|
16
|
+
async execute({ endpoint_id, guild_id, user_id }: { endpoint_id: string; guild_id: string; user_id: string }) {
|
|
17
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
18
|
+
return endpoint.getGuildMember(guild_id, user_id);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
|
|
6
|
+
export default defineTool<{ endpoint_id: string; guild_id: string; channel_id: string; user_id: string; role_id: string }>({
|
|
7
|
+
description: '移除成员的 QQ 频道角色',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
10
|
+
guild_id: z.string().describe('频道 ID'),
|
|
11
|
+
channel_id: z.string().describe('子频道 ID'),
|
|
12
|
+
user_id: z.string().describe('用户 ID'),
|
|
13
|
+
role_id: z.string().describe('角色 ID'),
|
|
14
|
+
}),
|
|
15
|
+
platforms: ['qq'],
|
|
16
|
+
tags: ['qq'],
|
|
17
|
+
permissions: [platformPermit('manage_roles')],
|
|
18
|
+
async execute({ endpoint_id, guild_id, channel_id, user_id, role_id }: { endpoint_id: string; guild_id: string; channel_id: string; user_id: string; role_id: string }) {
|
|
19
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
20
|
+
const success = await endpoint.removeMemberRole(guild_id, channel_id, user_id, role_id);
|
|
21
|
+
return { success, message: success ? '已移除成员的角色' : '操作失败' };
|
|
22
|
+
},
|
|
23
|
+
});
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{useEffect as we,useState as c,useCallback as Pe}from"react";var Q="zhin_api_token",ue="zhin_api_base";function de(){let t=localStorage.getItem(ue)?.trim();return t?t.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function le(){return localStorage.getItem(Q)}async function k(t,o){let l=le(),s=new Headers(o?.headers);l&&s.set("Authorization",`Bearer ${l}`);let p=de(),f=typeof t=="string"&&t.startsWith("/")?`${p}${t}`:t,m=await fetch(f,{...o,headers:s});return m.status===401&&(localStorage.removeItem(Q),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),m}import{forwardRef as ce,createElement as ne}from"react";var v=(...t)=>t.filter((o,l,s)=>!!o&&o.trim()!==""&&s.indexOf(o)===l).join(" ").trim();var J=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var _=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(o,l,s)=>s?s.toUpperCase():l.toLowerCase());var E=t=>{let o=_(t);return o.charAt(0).toUpperCase()+o.slice(1)};import{forwardRef as ie,createElement as Y}from"react";var U={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 j=t=>{for(let o in t)if(o.startsWith("aria-")||o==="role"||o==="title")return!0;return!1};import{createContext as fe,useContext as se,useMemo as ve,createElement as Ue}from"react";var re=fe({});var $=()=>se(re);var ee=ie(({color:t,size:o,strokeWidth:l,absoluteStrokeWidth:s,className:p="",children:f,iconNode:m,...L},R)=>{let{size:I=24,strokeWidth:x=2,absoluteStrokeWidth:O=!1,color:h="currentColor",className:q=""}=$()??{},S=s??O?Number(l??x)*24/Number(o??I):l??x;return Y("svg",{ref:R,...U,width:o??I??U.width,height:o??I??U.height,stroke:t??h,strokeWidth:S,className:v("lucide",q,p),...!f&&!j(L)&&{"aria-hidden":"true"},...L},[...m.map(([T,g])=>Y(T,g)),...Array.isArray(f)?f:[f]])});var d=(t,o)=>{let l=ce(({className:s,...p},f)=>ne(ee,{ref:f,iconNode:o,className:v(`lucide-${J(E(t))}`,`lucide-${t}`,s),...p}));return l.displayName=E(t),l};var pe=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],w=d("chevron-down",pe);var me=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],P=d("chevron-right",me);var Le=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],C=d("hash",Le);var Ie=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],n=d("loader-circle",Ie);var xe=[["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"}]],A=d("power-off",xe);var Ce=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],B=d("power",Ce);var he=[["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"}]],M=d("refresh-cw",he);var Se=[["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"}]],F=d("server",Se);var ge=[["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"}]],D=d("wifi-off",ge);var ke=[["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"}]],y=d("wifi",ke);import{Fragment as Ae,jsx as a,jsxs as u}from"react/jsx-runtime";function V(){let[t,o]=c([]),[l,s]=c(!0),[p,f]=c(""),[m,L]=c("overview"),[R,I]=c({}),[x,O]=c(""),[h,q]=c([]),[S,T]=c(!1),[g,H]=c(null),[G,z]=c({}),[ae,N]=c(null),b=Pe(async()=>{s(!0),f("");try{let i=await(await k("/api/qq/endpoints")).json();i.success?o(i.data):f(i.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{f("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{s(!1)}},[]);we(()=>{b()},[b]);let te=async(e,i)=>{I(r=>({...r,[e]:!0}));try{let r=i?"disconnect":"connect",Z=await(await k(`/api/qq/endpoints/${encodeURIComponent(e)}/${r}`,{method:"POST"})).json();Z.success||f(Z.error||"\u64CD\u4F5C\u5931\u8D25"),await b()}catch{f("\u64CD\u4F5C\u5931\u8D25")}finally{I(r=>({...r,[e]:!1}))}},X=async e=>{O(e),T(!0),q([]),H(null),z({});try{let r=await(await k(`/api/qq/endpoints/${encodeURIComponent(e)}/guilds`)).json();r.success?q(r.data):f(r.error||"\u83B7\u53D6\u9891\u9053\u5931\u8D25")}catch{f("\u83B7\u53D6\u9891\u9053\u5931\u8D25")}finally{T(!1)}},oe=async e=>{if(g===e){H(null);return}if(H(e),!G[e]){N(e);try{let r=await(await k(`/api/qq/endpoints/${encodeURIComponent(x)}/guilds/${encodeURIComponent(e)}/channels`)).json();r.success&&z(K=>({...K,[e]:r.data}))}catch{}finally{N(null)}}},W=t.filter(e=>e.connected);return u("div",{className:"p-6 max-w-5xl mx-auto",children:[u("div",{className:"flex items-center justify-between mb-6",children:[u("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[a(F,{className:"w-6 h-6"})," QQ \u5B98\u65B9\u673A\u5668\u4EBA"]}),u("button",{onClick:b,disabled:l,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm",children:[a(M,{className:`w-4 h-4 ${l?"animate-spin":""}`})," \u5237\u65B0"]})]}),p&&a("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200",children:p}),u("div",{className:"flex gap-1 mb-6 border-b",children:[a("button",{onClick:()=>L("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${m==="overview"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u6982\u89C8"}),a("button",{onClick:()=>L("guilds"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${m==="guilds"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u9891\u9053\u6D4F\u89C8"})]}),m==="overview"&&u(Ae,{children:[!l&&!t.length&&!p&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 QQ Endpoint \u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:t.map(e=>u("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[u("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?u("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(y,{className:"w-4 h-4"})," \u5728\u7EBF"]}):u("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(D,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),a("div",{className:"grid grid-cols-1 gap-2 text-sm text-gray-600 mb-3",children:u("div",{className:"flex justify-between",children:[a("span",{children:"\u9891\u9053\u6570"}),a("span",{className:"font-mono",children:e.guildCount})]})}),u("div",{className:"flex gap-2",children:[u("button",{onClick:()=>te(e.name,e.connected),disabled:R[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:[R[e.name]?a(n,{className:"w-3.5 h-3.5 animate-spin"}):e.connected?a(A,{className:"w-3.5 h-3.5"}):a(B,{className:"w-3.5 h-3.5"}),e.connected?"\u65AD\u5F00":"\u8FDE\u63A5"]}),e.connected&&u("button",{onClick:()=>{L("guilds"),X(e.name)},className:"flex items-center gap-1 px-3 py-1.5 rounded text-sm bg-gray-100 hover:bg-gray-200 text-gray-700",children:[a(C,{className:"w-3.5 h-3.5"})," \u6D4F\u89C8\u9891\u9053"]})]})]},e.name))})]}),m==="guilds"&&u("div",{children:[W.length>0&&u("div",{className:"mb-4 flex items-center gap-2",children:[a("label",{className:"text-sm text-gray-500",children:"\u9009\u62E9\u673A\u5668\u4EBA\uFF1A"}),u("select",{value:x,onChange:e=>X(e.target.value),className:"border rounded px-2 py-1 text-sm",children:[a("option",{value:"",children:"--"}),W.map(e=>a("option",{value:e.name,children:e.name},e.name))]})]}),!W.length&&a("div",{className:"text-center text-gray-500 py-8",children:"\u6682\u65E0\u5728\u7EBF Endpoint"}),S&&a("div",{className:"flex justify-center py-8",children:a(n,{className:"w-6 h-6 animate-spin text-blue-500"})}),!S&&h.length>0&&a("div",{className:"border rounded-lg bg-card shadow-sm divide-y",children:h.map(e=>u("div",{children:[u("button",{onClick:()=>oe(e.id),className:"w-full flex items-center gap-2 px-4 py-3 hover:bg-gray-50 text-left",children:[g===e.id?a(w,{className:"w-4 h-4 text-gray-400"}):a(P,{className:"w-4 h-4 text-gray-400"}),a("span",{className:"font-medium",children:e.name}),a("span",{className:"text-xs text-gray-400 ml-auto",children:e.id})]}),g===e.id&&a("div",{className:"px-4 pb-3",children:ae===e.id?u("div",{className:"flex items-center gap-2 text-gray-400 text-sm py-2 pl-6",children:[a(n,{className:"w-4 h-4 animate-spin"})," \u52A0\u8F7D\u4E2D\u2026"]}):G[e.id]?.length?a("div",{className:"pl-6 space-y-1",children:G[e.id].map(i=>u("div",{className:"flex items-center gap-2 text-sm text-gray-600 py-1",children:[a(C,{className:"w-3.5 h-3.5 text-gray-400"}),a("span",{children:i.name}),a("span",{className:"text-xs text-gray-400 ml-auto",children:i.id})]},i.id))}):a("div",{className:"pl-6 text-sm text-gray-400 py-1",children:"\u65E0\u5B50\u9891\u9053"})})]},e.id))}),!S&&x&&!h.length&&a("div",{className:"text-center text-gray-400 py-8",children:"\u8BE5\u673A\u5668\u4EBA\u672A\u52A0\u5165\u4EFB\u4F55\u9891\u9053"})]})]})}function Ta(t){t.addRoute({path:"/console/qq",name:"QQ\u5B98\u65B9",element:t.React.createElement(V,{hostReact:t.React})}),t.addTool({id:"qq",name:"QQ\u5B98\u65B9",path:"/console/qq"})}export{Ta as register};
|
|
1
|
+
import{useEffect as we,useState as c,useCallback as Pe}from"react";var Q="zhin_api_token",ue="zhin_api_base";function de(){let t=localStorage.getItem(ue)?.trim();return t?t.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function le(){return localStorage.getItem(Q)}async function k(t,o){let l=le(),s=new Headers(o?.headers);l&&s.set("Authorization",`Bearer ${l}`);let p=de(),f=typeof t=="string"&&t.startsWith("/")?`${p}${t}`:t,m=await fetch(f,{...o,headers:s});return m.status===401&&(localStorage.removeItem(Q),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),m}import{forwardRef as ce,createElement as ne}from"react";var v=(...t)=>t.filter((o,l,s)=>!!o&&o.trim()!==""&&s.indexOf(o)===l).join(" ").trim();var J=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var _=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(o,l,s)=>s?s.toUpperCase():l.toLowerCase());var E=t=>{let o=_(t);return o.charAt(0).toUpperCase()+o.slice(1)};import{forwardRef as ie,createElement as Y}from"react";var U={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 j=t=>{for(let o in t)if(o.startsWith("aria-")||o==="role"||o==="title")return!0;return!1};import{createContext as fe,useContext as se,useMemo as ve,createElement as Ue}from"react";var re=fe({});var $=()=>se(re);var ee=ie(({color:t,size:o,strokeWidth:l,absoluteStrokeWidth:s,className:p="",children:f,iconNode:m,...L},R)=>{let{size:I=24,strokeWidth:x=2,absoluteStrokeWidth:O=!1,color:h="currentColor",className:q=""}=$()??{},S=s??O?Number(l??x)*24/Number(o??I):l??x;return Y("svg",{ref:R,...U,width:o??I??U.width,height:o??I??U.height,stroke:t??h,strokeWidth:S,className:v("lucide",q,p),...!f&&!j(L)&&{"aria-hidden":"true"},...L},[...m.map(([T,g])=>Y(T,g)),...Array.isArray(f)?f:[f]])});var d=(t,o)=>{let l=ce(({className:s,...p},f)=>ne(ee,{ref:f,iconNode:o,className:v(`lucide-${J(E(t))}`,`lucide-${t}`,s),...p}));return l.displayName=E(t),l};var pe=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],w=d("chevron-down",pe);var me=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],P=d("chevron-right",me);var Le=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],C=d("hash",Le);var Ie=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],n=d("loader-circle",Ie);var xe=[["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"}]],A=d("power-off",xe);var Ce=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],B=d("power",Ce);var he=[["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"}]],M=d("refresh-cw",he);var Se=[["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"}]],D=d("server",Se);var ge=[["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"}]],F=d("wifi-off",ge);var ke=[["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"}]],y=d("wifi",ke);import{Fragment as Ae,jsx as a,jsxs as u}from"react/jsx-runtime";function V(){let[t,o]=c([]),[l,s]=c(!0),[p,f]=c(""),[m,L]=c("overview"),[R,I]=c({}),[x,O]=c(""),[h,q]=c([]),[S,T]=c(!1),[g,H]=c(null),[G,z]=c({}),[ae,N]=c(null),b=Pe(async()=>{s(!0),f("");try{let i=await(await k("/api/qq/endpoints")).json();i.success?o(i.data):f(i.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{f("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{s(!1)}},[]);we(()=>{b()},[b]);let te=async(e,i)=>{I(r=>({...r,[e]:!0}));try{let r=i?"disconnect":"connect",Z=await(await k(`/api/qq/endpoints/${encodeURIComponent(e)}/${r}`,{method:"POST"})).json();Z.success||f(Z.error||"\u64CD\u4F5C\u5931\u8D25"),await b()}catch{f("\u64CD\u4F5C\u5931\u8D25")}finally{I(r=>({...r,[e]:!1}))}},X=async e=>{O(e),T(!0),q([]),H(null),z({});try{let r=await(await k(`/api/qq/endpoints/${encodeURIComponent(e)}/guilds`)).json();r.success?q(r.data):f(r.error||"\u83B7\u53D6\u9891\u9053\u5931\u8D25")}catch{f("\u83B7\u53D6\u9891\u9053\u5931\u8D25")}finally{T(!1)}},oe=async e=>{if(g===e){H(null);return}if(H(e),!G[e]){N(e);try{let r=await(await k(`/api/qq/endpoints/${encodeURIComponent(x)}/guilds/${encodeURIComponent(e)}/channels`)).json();r.success&&z(K=>({...K,[e]:r.data}))}catch{}finally{N(null)}}},W=t.filter(e=>e.connected);return u("div",{className:"p-6 max-w-5xl mx-auto",children:[u("div",{className:"flex items-center justify-between mb-6",children:[u("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[a(D,{className:"w-6 h-6"})," QQ \u5B98\u65B9\u673A\u5668\u4EBA"]}),u("button",{onClick:b,disabled:l,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm",children:[a(M,{className:`w-4 h-4 ${l?"animate-spin":""}`})," \u5237\u65B0"]})]}),p&&a("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200",children:p}),u("div",{className:"flex gap-1 mb-6 border-b",children:[a("button",{onClick:()=>L("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${m==="overview"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u6982\u89C8"}),a("button",{onClick:()=>L("guilds"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${m==="guilds"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u9891\u9053\u6D4F\u89C8"})]}),m==="overview"&&u(Ae,{children:[!l&&!t.length&&!p&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 QQ Endpoint \u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:t.map(e=>u("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[u("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?u("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(y,{className:"w-4 h-4"})," \u5728\u7EBF"]}):u("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(F,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),a("div",{className:"grid grid-cols-1 gap-2 text-sm text-gray-600 mb-3",children:u("div",{className:"flex justify-between",children:[a("span",{children:"\u9891\u9053\u6570"}),a("span",{className:"font-mono",children:e.guildCount})]})}),u("div",{className:"flex gap-2",children:[u("button",{onClick:()=>te(e.name,e.connected),disabled:R[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:[R[e.name]?a(n,{className:"w-3.5 h-3.5 animate-spin"}):e.connected?a(A,{className:"w-3.5 h-3.5"}):a(B,{className:"w-3.5 h-3.5"}),e.connected?"\u65AD\u5F00":"\u8FDE\u63A5"]}),e.connected&&u("button",{onClick:()=>{L("guilds"),X(e.name)},className:"flex items-center gap-1 px-3 py-1.5 rounded text-sm bg-gray-100 hover:bg-gray-200 text-gray-700",children:[a(C,{className:"w-3.5 h-3.5"})," \u6D4F\u89C8\u9891\u9053"]})]})]},e.name))})]}),m==="guilds"&&u("div",{children:[W.length>0&&u("div",{className:"mb-4 flex items-center gap-2",children:[a("label",{className:"text-sm text-gray-500",children:"\u9009\u62E9\u673A\u5668\u4EBA\uFF1A"}),u("select",{value:x,onChange:e=>X(e.target.value),className:"border rounded px-2 py-1 text-sm",children:[a("option",{value:"",children:"--"}),W.map(e=>a("option",{value:e.name,children:e.name},e.name))]})]}),!W.length&&a("div",{className:"text-center text-gray-500 py-8",children:"\u6682\u65E0\u5728\u7EBF Endpoint"}),S&&a("div",{className:"flex justify-center py-8",children:a(n,{className:"w-6 h-6 animate-spin text-blue-500"})}),!S&&h.length>0&&a("div",{className:"border rounded-lg bg-card shadow-sm divide-y",children:h.map(e=>u("div",{children:[u("button",{onClick:()=>oe(e.id),className:"w-full flex items-center gap-2 px-4 py-3 hover:bg-gray-50 text-left",children:[g===e.id?a(w,{className:"w-4 h-4 text-gray-400"}):a(P,{className:"w-4 h-4 text-gray-400"}),a("span",{className:"font-medium",children:e.name}),a("span",{className:"text-xs text-gray-400 ml-auto",children:e.id})]}),g===e.id&&a("div",{className:"px-4 pb-3",children:ae===e.id?u("div",{className:"flex items-center gap-2 text-gray-400 text-sm py-2 pl-6",children:[a(n,{className:"w-4 h-4 animate-spin"})," \u52A0\u8F7D\u4E2D\u2026"]}):G[e.id]?.length?a("div",{className:"pl-6 space-y-1",children:G[e.id].map(i=>u("div",{className:"flex items-center gap-2 text-sm text-gray-600 py-1",children:[a(C,{className:"w-3.5 h-3.5 text-gray-400"}),a("span",{children:i.name}),a("span",{className:"text-xs text-gray-400 ml-auto",children:i.id})]},i.id))}):a("div",{className:"pl-6 text-sm text-gray-400 py-1",children:"\u65E0\u5B50\u9891\u9053"})})]},e.id))}),!S&&x&&!h.length&&a("div",{className:"text-center text-gray-400 py-8",children:"\u8BE5\u673A\u5668\u4EBA\u672A\u52A0\u5165\u4EFB\u4F55\u9891\u9053"})]})]})}function Ta(t){t.addRoute({path:"/console/qq",name:"QQ\u5B98\u65B9",element:t.React.createElement(V,{hostReact:t.React})}),t.addTool({id:"qq",name:"QQ\u5B98\u65B9",path:"/console/qq"})}export{Ta as register};
|
|
2
2
|
/*! Bundled license information:
|
|
3
3
|
|
|
4
4
|
lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
|
|
@@ -22,7 +22,7 @@ lucide-react/dist/esm/icons/wifi-off.mjs:
|
|
|
22
22
|
lucide-react/dist/esm/icons/wifi.mjs:
|
|
23
23
|
lucide-react/dist/esm/lucide-react.mjs:
|
|
24
24
|
(**
|
|
25
|
-
* @license lucide-react v1.
|
|
25
|
+
* @license lucide-react v1.23.0 - ISC
|
|
26
26
|
*
|
|
27
27
|
* This source code is licensed under the ISC license.
|
|
28
28
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '给成员添加 QQ 频道角色',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
guild_id: z.string().describe('频道 ID'),
|
|
10
|
+
channel_id: z.string().describe('子频道 ID'),
|
|
11
|
+
user_id: z.string().describe('用户 ID'),
|
|
12
|
+
role_id: z.string().describe('角色 ID'),
|
|
13
|
+
}),
|
|
14
|
+
platforms: ['qq'],
|
|
15
|
+
tags: ['qq'],
|
|
16
|
+
permissions: [platformPermit('manage_roles')],
|
|
17
|
+
async execute({ endpoint_id, guild_id, channel_id, user_id, role_id }) {
|
|
18
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
19
|
+
const success = await endpoint.addMemberRole(guild_id, channel_id, user_id, role_id);
|
|
20
|
+
return { success, message: success ? '已给成员添加角色' : '操作失败' };
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=add_role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_role.js","sourceRoot":"","sources":["../../../agent/tools/add_role.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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAAkG;IACzH,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAoG;QACrK,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACrF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '获取 QQ 频道中指定子频道的详细信息',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
channel_id: z.string().describe('子频道 ID'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['qq'],
|
|
12
|
+
tags: ['qq'],
|
|
13
|
+
permissions: [platformPermit('guild_admin')],
|
|
14
|
+
async execute({ endpoint_id, channel_id }) {
|
|
15
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
+
return endpoint.getChannelInfo(channel_id);
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=channel_info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel_info.js","sourceRoot":"","sources":["../../../agent/tools/channel_info.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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA8C;IACrE,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAC1C,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAgD;QACrF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '创建 QQ 频道角色',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
guild_id: z.string().describe('频道 ID'),
|
|
10
|
+
name: z.string().describe('角色名称'),
|
|
11
|
+
color: z.number().optional().describe('颜色(RGB 十进制数值)'),
|
|
12
|
+
}),
|
|
13
|
+
platforms: ['qq'],
|
|
14
|
+
tags: ['qq'],
|
|
15
|
+
permissions: [platformPermit('guild_owner')],
|
|
16
|
+
async execute({ endpoint_id, guild_id, name, color }) {
|
|
17
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
18
|
+
const role = await endpoint.createGuildRole(guild_id, name, color);
|
|
19
|
+
return { success: !!role, role, message: role ? `角色 "${name}" 创建成功` : '创建失败' };
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=create_role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_role.js","sourceRoot":"","sources":["../../../agent/tools/create_role.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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA0E;IACjG,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KACvD,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAA4E;QAC5H,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjF,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '获取 QQ 频道下的子频道列表',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
guild_id: z.string().describe('频道 ID'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['qq'],
|
|
12
|
+
tags: ['qq'],
|
|
13
|
+
permissions: [platformPermit('manage_channels')],
|
|
14
|
+
async execute({ endpoint_id, guild_id }) {
|
|
15
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
+
const channels = await endpoint.getChannels(guild_id);
|
|
17
|
+
return { channels, count: channels.length };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=list_channels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_channels.js","sourceRoot":"","sources":["../../../agent/tools/list_channels.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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA4C;IACnE,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAA8C;QACjF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description: '获取 QQ 频道列表',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
+
}),
|
|
9
|
+
platforms: ['qq'],
|
|
10
|
+
tags: ['qq'],
|
|
11
|
+
async execute({ endpoint_id }) {
|
|
12
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
13
|
+
const guilds = await endpoint.getGuilds();
|
|
14
|
+
return { guilds, count: guilds.length };
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=list_guilds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_guilds.js","sourceRoot":"","sources":["../../../agent/tools/list_guilds.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,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA0B;IACjD,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;KAChD,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAA4B;QACrD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '获取 QQ 频道角色列表',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
guild_id: z.string().describe('频道 ID'),
|
|
10
|
+
}),
|
|
11
|
+
platforms: ['qq'],
|
|
12
|
+
tags: ['qq'],
|
|
13
|
+
permissions: [platformPermit('manage_roles')],
|
|
14
|
+
async execute({ endpoint_id, guild_id }) {
|
|
15
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
+
const roles = await endpoint.getGuildRoles(guild_id);
|
|
17
|
+
return { roles, count: roles.length };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=list_roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_roles.js","sourceRoot":"","sources":["../../../agent/tools/list_roles.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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA4C;IACnE,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAA8C;QACjF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '获取 QQ 频道中指定成员的详细信息',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
guild_id: z.string().describe('频道 ID'),
|
|
10
|
+
user_id: z.string().describe('用户 ID'),
|
|
11
|
+
}),
|
|
12
|
+
platforms: ['qq'],
|
|
13
|
+
tags: ['qq'],
|
|
14
|
+
permissions: [platformPermit('guild_admin')],
|
|
15
|
+
async execute({ endpoint_id, guild_id, user_id }) {
|
|
16
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
+
return endpoint.getGuildMember(guild_id, user_id);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=member_detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member_detail.js","sourceRoot":"","sources":["../../../agent/tools/member_detail.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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA6D;IACpF,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAA+D;QAC3G,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermit } from '../../src/platform-permit.js';
|
|
4
|
+
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
+
export default defineTool({
|
|
6
|
+
description: '移除成员的 QQ 频道角色',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
+
guild_id: z.string().describe('频道 ID'),
|
|
10
|
+
channel_id: z.string().describe('子频道 ID'),
|
|
11
|
+
user_id: z.string().describe('用户 ID'),
|
|
12
|
+
role_id: z.string().describe('角色 ID'),
|
|
13
|
+
}),
|
|
14
|
+
platforms: ['qq'],
|
|
15
|
+
tags: ['qq'],
|
|
16
|
+
permissions: [platformPermit('manage_roles')],
|
|
17
|
+
async execute({ endpoint_id, guild_id, channel_id, user_id, role_id }) {
|
|
18
|
+
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
19
|
+
const success = await endpoint.removeMemberRole(guild_id, channel_id, user_id, role_id);
|
|
20
|
+
return { success, message: success ? '已移除成员的角色' : '操作失败' };
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=remove_role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove_role.js","sourceRoot":"","sources":["../../../agent/tools/remove_role.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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAAkG;IACzH,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAoG;QACrK,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
|