@zhin.js/adapter-icqq 1.0.71 → 1.1.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 +1216 -52
- package/PERMITS.md +24 -0
- package/README.md +123 -429
- package/adapters/icqq/index.js +31 -0
- package/adapters/icqq/index.ts +42 -0
- package/agents/icqq/agent.json +20 -0
- package/agents/icqq/boundaries.md +3 -0
- package/agents/icqq/conventions.md +3 -0
- package/agents/icqq/skills/icqq-directory/SKILL.md +20 -0
- package/agents/icqq/skills/icqq-directory/tools/friend_list/index.js +19 -0
- package/agents/icqq/skills/icqq-directory/tools/friend_list/index.ts +19 -0
- package/agents/icqq/skills/icqq-directory/tools/group_list/index.js +20 -0
- package/agents/icqq/skills/icqq-directory/tools/group_list/index.ts +20 -0
- package/agents/icqq/skills/icqq-directory/tools/group_member_info/index.js +26 -0
- package/agents/icqq/skills/icqq-directory/tools/group_member_info/index.ts +28 -0
- package/agents/icqq/skills/icqq-directory/tools/user_info/index.js +15 -0
- package/agents/icqq/skills/icqq-directory/tools/user_info/index.ts +14 -0
- package/agents/icqq/skills/icqq-group-admin/SKILL.md +25 -0
- package/agents/icqq/skills/icqq-group-admin/tools/announce/index.js +18 -0
- package/agents/icqq/skills/icqq-group-admin/tools/announce/index.ts +17 -0
- package/agents/icqq/skills/icqq-group-admin/tools/essence/index.js +24 -0
- package/agents/icqq/skills/icqq-group-admin/tools/essence/index.ts +22 -0
- package/agents/icqq/skills/icqq-group-admin/tools/group_invite/index.js +23 -0
- package/agents/icqq/skills/icqq-group-admin/tools/group_invite/index.ts +20 -0
- package/agents/icqq/skills/icqq-group-admin/tools/group_kick/index.js +27 -0
- package/agents/icqq/skills/icqq-group-admin/tools/group_kick/index.ts +23 -0
- package/agents/icqq/skills/icqq-group-admin/tools/set_anonymous/index.js +23 -0
- package/agents/icqq/skills/icqq-group-admin/tools/set_anonymous/index.ts +21 -0
- package/agents/icqq/skills/icqq-group-admin/tools/set_mute/index.js +25 -0
- package/agents/icqq/skills/icqq-group-admin/tools/set_mute/index.ts +22 -0
- package/agents/icqq/skills/icqq-group-admin/tools/set_title/index.js +26 -0
- package/agents/icqq/skills/icqq-group-admin/tools/set_title/index.ts +23 -0
- package/agents/icqq/skills/icqq-group-state/SKILL.md +17 -0
- package/agents/icqq/skills/icqq-group-state/tools/group_files/index.js +24 -0
- package/agents/icqq/skills/icqq-group-state/tools/group_files/index.ts +22 -0
- package/agents/icqq/skills/icqq-group-state/tools/list_muted/index.js +18 -0
- package/agents/icqq/skills/icqq-group-state/tools/list_muted/index.ts +17 -0
- package/agents/icqq/skills/icqq-interaction/SKILL.md +19 -0
- package/agents/icqq/skills/icqq-interaction/tools/group_sign/index.js +20 -0
- package/agents/icqq/skills/icqq-interaction/tools/group_sign/index.ts +18 -0
- package/agents/icqq/skills/icqq-interaction/tools/poke/index.js +17 -0
- package/agents/icqq/skills/icqq-interaction/tools/poke/index.ts +16 -0
- package/agents/icqq/skills/icqq-interaction/tools/send_user_like/index.js +26 -0
- package/agents/icqq/skills/icqq-interaction/tools/send_user_like/index.ts +22 -0
- package/agents/icqq/system.md +3 -0
- package/commands/icqq/endpoint/add/[[id]]/index.js +3 -0
- package/commands/icqq/endpoint/add/[[id]]/index.ts +3 -0
- package/commands/icqq/endpoint/definition.js +31 -0
- package/commands/icqq/endpoint/definition.ts +32 -0
- package/commands/icqq/endpoint/list/index.js +3 -0
- package/commands/icqq/endpoint/list/index.ts +3 -0
- package/commands/icqq/endpoint/remove/[id]/index.js +3 -0
- package/commands/icqq/endpoint/remove/[id]/index.ts +3 -0
- package/lib/client.d.ts +19 -0
- package/lib/client.js +3 -0
- package/lib/content-resolver.d.ts +10 -0
- package/lib/content-resolver.js +98 -0
- package/lib/cq-message.d.ts +14 -0
- package/lib/cq-message.js +106 -0
- package/lib/endpoint.d.ts +30 -0
- package/lib/endpoint.js +1003 -0
- package/lib/forward-msg.d.ts +6 -0
- package/lib/forward-msg.js +107 -0
- package/lib/icqq-guild.d.ts +57 -0
- package/lib/icqq-guild.js +109 -0
- package/lib/icqq-inbound.d.ts +165 -0
- package/lib/icqq-inbound.js +651 -0
- package/lib/icqq-inbox.d.ts +25 -0
- package/lib/icqq-inbox.js +129 -0
- package/lib/icqq-login-assist.d.ts +27 -0
- package/lib/icqq-login-assist.js +109 -0
- package/lib/icqq-runtime-state.d.ts +1 -0
- package/lib/icqq-runtime-state.js +6 -0
- package/lib/index.d.ts +5 -18
- package/lib/index.js +5 -124
- package/lib/outbound-media.d.ts +14 -0
- package/lib/outbound-media.js +76 -0
- package/lib/protocol.d.ts +258 -0
- package/lib/protocol.js +422 -0
- package/lib/types.d.ts +33 -13
- package/lib/types.js +0 -1
- package/package.json +86 -32
- package/plugin.js +19 -0
- package/prompt-sections/platform/index.js +16 -0
- package/prompt-sections/platform/index.ts +16 -0
- package/schema.json +168 -0
- package/src/client.ts +29 -0
- package/src/content-resolver.ts +131 -0
- package/src/cq-message.ts +113 -0
- package/src/endpoint.ts +1084 -0
- package/src/forward-msg.ts +112 -0
- package/src/icqq-guild.ts +154 -0
- package/src/icqq-inbound.ts +814 -0
- package/src/icqq-inbox.ts +147 -0
- package/src/icqq-login-assist.ts +132 -0
- package/src/icqq-runtime-state.ts +7 -0
- package/src/index.ts +30 -149
- package/src/outbound-media.ts +103 -0
- package/src/protocol.ts +551 -0
- package/src/types.ts +35 -13
- package/LICENSE +0 -21
- package/client/ICQQManagement.tsx +0 -139
- package/client/LoginAssistPanel.tsx +0 -293
- package/client/index.tsx +0 -11
- package/client/tsconfig.json +0 -7
- package/client/utils/api.ts +0 -20
- package/dist/index.js +0 -1
- package/lib/adapter.d.ts +0 -34
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js +0 -396
- package/lib/adapter.js.map +0 -1
- package/lib/bot.d.ts +0 -46
- package/lib/bot.d.ts.map +0 -1
- package/lib/bot.js +0 -457
- package/lib/bot.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js.map +0 -1
- package/skills/icqq/SKILL.md +0 -22
- package/src/adapter.ts +0 -448
- package/src/bot.ts +0 -521
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convention entry: discover `adapters/icqq/index.ts` → defineAdapter.
|
|
3
|
+
*/
|
|
4
|
+
import { defineAdapter } from 'zhin.js/adapter';
|
|
5
|
+
import { loginAssistToken } from '@zhin.js/core/runtime';
|
|
6
|
+
import { IcqqEndpoint } from '../../src/endpoint.js';
|
|
7
|
+
import { icqqRuntimeStateToken } from '../../src/icqq-runtime-state.js';
|
|
8
|
+
import {
|
|
9
|
+
resolveIcqqConfig,
|
|
10
|
+
type IcqqEndpointConfig,
|
|
11
|
+
} from '../../src/protocol.js';
|
|
12
|
+
|
|
13
|
+
export { IcqqEndpoint } from '../../src/endpoint.js';
|
|
14
|
+
export type { IcqqEndpointOptions } from '../../src/endpoint.js';
|
|
15
|
+
|
|
16
|
+
declare module '@zhin.js/core' {
|
|
17
|
+
interface AdapterEndpoints {
|
|
18
|
+
icqq: import('../../src/endpoint.js').IcqqEndpoint;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default defineAdapter<IcqqEndpointConfig>({
|
|
23
|
+
capabilities: ['inbound', 'outbound'],
|
|
24
|
+
operations: ['recall', 'reaction'],
|
|
25
|
+
segments: {
|
|
26
|
+
outboundMedia: ['base64', 'url', 'path'],
|
|
27
|
+
interactive: 'text',
|
|
28
|
+
},
|
|
29
|
+
create(context) {
|
|
30
|
+
const config = resolveIcqqConfig(context.config);
|
|
31
|
+
// 注册到插件运行时状态(icqq endpoint list 的"运行中"数据源)
|
|
32
|
+
context.use(icqqRuntimeStateToken).endpoints.set(config.id, {
|
|
33
|
+
id: config.id,
|
|
34
|
+
mode: 'direct',
|
|
35
|
+
});
|
|
36
|
+
return new IcqqEndpoint({
|
|
37
|
+
id: context.id,
|
|
38
|
+
loginAssist: context.use(loginAssistToken),
|
|
39
|
+
config,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ICQQ Platform Agent",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Handles icqq platform-specific operations and progressively loads only the required platform Skill.",
|
|
5
|
+
"trigger_rules": {
|
|
6
|
+
"file_patterns": [],
|
|
7
|
+
"keywords": [
|
|
8
|
+
"icqq",
|
|
9
|
+
"adapter:icqq"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"entry_points": [
|
|
13
|
+
"system.md",
|
|
14
|
+
"boundaries.md",
|
|
15
|
+
"conventions.md"
|
|
16
|
+
],
|
|
17
|
+
"platforms": [
|
|
18
|
+
"icqq"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: icqq-directory
|
|
3
|
+
platforms:
|
|
4
|
+
- icqq
|
|
5
|
+
description: ICQQ 好友、群和成员目录查询能力。
|
|
6
|
+
keywords:
|
|
7
|
+
- "icqq"
|
|
8
|
+
- "好友列表"
|
|
9
|
+
- "群列表"
|
|
10
|
+
- "成员信息"
|
|
11
|
+
tools:
|
|
12
|
+
- "friend_list"
|
|
13
|
+
- "group_list"
|
|
14
|
+
- "user_info"
|
|
15
|
+
- "group_member_info"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# icqq-directory
|
|
19
|
+
|
|
20
|
+
查询用户或群成员前先获取稳定 QQ 号或群号。目录信息只向群主、管理员、master 或 trusted 披露;不要根据昵称猜测身份。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '获取 QQ 好友列表',
|
|
6
|
+
inputSchema: z.object({}),
|
|
7
|
+
adapter: 'icqq',
|
|
8
|
+
requiresApproval: 'on-risk',
|
|
9
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
10
|
+
async execute(_input, context) {
|
|
11
|
+
const client = context.$client;
|
|
12
|
+
const friends = Array.from(client.fl.values()).map((friend) => ({
|
|
13
|
+
user_id: friend.user_id,
|
|
14
|
+
nickname: friend.nickname,
|
|
15
|
+
remark: friend.remark,
|
|
16
|
+
}));
|
|
17
|
+
return { friends: friends.slice(0, 50), count: client.fl.size };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
export default defineAgentTool<Record<string, never>>({
|
|
5
|
+
description: '获取 QQ 好友列表',
|
|
6
|
+
inputSchema: z.object({}),
|
|
7
|
+
adapter: 'icqq',
|
|
8
|
+
requiresApproval: 'on-risk',
|
|
9
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
10
|
+
async execute(_input, context) {
|
|
11
|
+
const client = context.$client;
|
|
12
|
+
const friends = Array.from(client.fl.values()).map((friend) => ({
|
|
13
|
+
user_id: friend.user_id,
|
|
14
|
+
nickname: friend.nickname,
|
|
15
|
+
remark: friend.remark,
|
|
16
|
+
}));
|
|
17
|
+
return { friends: friends.slice(0, 50), count: client.fl.size };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
adapter: 'icqq',
|
|
6
|
+
description: '获取当前 QQ 账号的群列表',
|
|
7
|
+
inputSchema: z.object({}),
|
|
8
|
+
requiresApproval: 'on-risk',
|
|
9
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
10
|
+
async execute(_input, context) {
|
|
11
|
+
const client = context.$client;
|
|
12
|
+
const groups = Array.from(client.gl.values()).map((group) => ({
|
|
13
|
+
group_id: group.group_id,
|
|
14
|
+
group_name: group.group_name,
|
|
15
|
+
member_count: group.member_count,
|
|
16
|
+
max_member_count: group.max_member_count,
|
|
17
|
+
}));
|
|
18
|
+
return { groups: groups.slice(0, 50), count: client.gl.size };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
export default defineAgentTool<Record<string, never>>({
|
|
5
|
+
adapter: 'icqq',
|
|
6
|
+
description: '获取当前 QQ 账号的群列表',
|
|
7
|
+
inputSchema: z.object({}),
|
|
8
|
+
requiresApproval: 'on-risk',
|
|
9
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
10
|
+
async execute(_input, context) {
|
|
11
|
+
const client = context.$client;
|
|
12
|
+
const groups = Array.from(client.gl.values()).map((group) => ({
|
|
13
|
+
group_id: group.group_id,
|
|
14
|
+
group_name: group.group_name,
|
|
15
|
+
member_count: group.member_count,
|
|
16
|
+
max_member_count: group.max_member_count,
|
|
17
|
+
}));
|
|
18
|
+
return { groups: groups.slice(0, 50), count: client.gl.size };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '获取 QQ 群成员信息',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
group_id: z.number().describe('目标群号'),
|
|
8
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'icqq',
|
|
11
|
+
scopes: ['group'],
|
|
12
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
13
|
+
requiresApproval: 'never',
|
|
14
|
+
async execute({ group_id, user_id }, context) {
|
|
15
|
+
const group = context.$client.pickGroup(group_id);
|
|
16
|
+
if (!group)
|
|
17
|
+
return { success: false, message: '目标群不存在' };
|
|
18
|
+
const memberInfo = group.pickMember(user_id);
|
|
19
|
+
if (!memberInfo)
|
|
20
|
+
return { success: false, message: '目标成员不存在' };
|
|
21
|
+
return {
|
|
22
|
+
success: true,
|
|
23
|
+
member: memberInfo,
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
interface GroupMemberInfoInput {
|
|
4
|
+
group_id: number;
|
|
5
|
+
user_id: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export default defineAgentTool<GroupMemberInfoInput>({
|
|
9
|
+
description: '获取 QQ 群成员信息',
|
|
10
|
+
inputSchema: z.object({
|
|
11
|
+
group_id: z.number().describe('目标群号'),
|
|
12
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
13
|
+
}),
|
|
14
|
+
adapter: 'icqq',
|
|
15
|
+
scopes:['group'],
|
|
16
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
17
|
+
requiresApproval: 'never',
|
|
18
|
+
async execute({ group_id, user_id }, context) {
|
|
19
|
+
const group = context.$client.pickGroup(group_id);
|
|
20
|
+
if (!group) return { success: false, message: '目标群不存在' };
|
|
21
|
+
const memberInfo = group.pickMember(user_id);
|
|
22
|
+
if (!memberInfo) return { success: false, message: '目标成员不存在' };
|
|
23
|
+
return {
|
|
24
|
+
success: true,
|
|
25
|
+
member: memberInfo,
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '获取指定QQ号的用户信息/资料/详情',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
8
|
+
}),
|
|
9
|
+
adapter: 'icqq',
|
|
10
|
+
requiresApproval: 'never',
|
|
11
|
+
async execute({ user_id }, context) {
|
|
12
|
+
const profile = await context.$client.getProfile(user_id);
|
|
13
|
+
return { success: true, message: `已获取 ${user_id} 的用户信息:${JSON.stringify(profile, null, 2)}` };
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ user_id: number }>({
|
|
4
|
+
description: '获取指定QQ号的用户信息/资料/详情',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
7
|
+
}),
|
|
8
|
+
adapter: 'icqq',
|
|
9
|
+
requiresApproval: 'never',
|
|
10
|
+
async execute({ user_id }, context) {
|
|
11
|
+
const profile = await context.$client.getProfile(user_id);
|
|
12
|
+
return { success: true, message: `已获取 ${user_id} 的用户信息:${JSON.stringify(profile,null,2)}` };
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: icqq-group-admin
|
|
3
|
+
platforms:
|
|
4
|
+
- icqq
|
|
5
|
+
description: ICQQ 邀请、踢人、禁言、头衔、匿名、公告和精华管理能力。
|
|
6
|
+
keywords:
|
|
7
|
+
- "icqq"
|
|
8
|
+
- "群管理"
|
|
9
|
+
- "禁言"
|
|
10
|
+
- "踢人"
|
|
11
|
+
- "公告"
|
|
12
|
+
- "精华"
|
|
13
|
+
tools:
|
|
14
|
+
- "group_invite"
|
|
15
|
+
- "group_kick"
|
|
16
|
+
- "set_mute"
|
|
17
|
+
- "set_title"
|
|
18
|
+
- "set_anonymous"
|
|
19
|
+
- "announce"
|
|
20
|
+
- "essence"
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# icqq-group-admin
|
|
24
|
+
|
|
25
|
+
仅在目标群和目标成员明确时加载。所有写操作遵守 Tool 审批与角色权限;不可逆或影响成员关系的操作先复核参数。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '发送 QQ 群公告(需要管理员权限)',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
group_id: z.number().describe('目标群号'),
|
|
8
|
+
content: z.string().describe('公告内容'),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'icqq',
|
|
11
|
+
requiresApproval: 'once',
|
|
12
|
+
scopes: ['group'],
|
|
13
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
14
|
+
async execute({ group_id, content }, context) {
|
|
15
|
+
await context.$client.sendGroupNotice(group_id, content);
|
|
16
|
+
return { success: true, message: '群公告已发送' };
|
|
17
|
+
},
|
|
18
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ group_id: number; content: string }>({
|
|
4
|
+
description: '发送 QQ 群公告(需要管理员权限)',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
group_id: z.number().describe('目标群号'),
|
|
7
|
+
content: z.string().describe('公告内容'),
|
|
8
|
+
}),
|
|
9
|
+
adapter: 'icqq',
|
|
10
|
+
requiresApproval: 'once',
|
|
11
|
+
scopes:['group'],
|
|
12
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
13
|
+
async execute({ group_id, content }, context) {
|
|
14
|
+
await context.$client.sendGroupNotice(group_id, content);
|
|
15
|
+
return { success: true, message: '群公告已发送' };
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '设置或移除 QQ 群精华消息',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
message_id: z.string().describe('消息 ID'),
|
|
8
|
+
action: z.enum(['add', 'remove']).describe('add=设为精华, remove=移除精华'),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'icqq',
|
|
11
|
+
requiresApproval: 'once',
|
|
12
|
+
scopes: ['group'],
|
|
13
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
14
|
+
async execute({ message_id, action }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
if (action === 'add') {
|
|
17
|
+
await client.setEssenceMessage(message_id);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
await client.removeEssenceMessage(message_id);
|
|
21
|
+
}
|
|
22
|
+
return { success: true, message: action === 'add' ? '已设为精华' : '已移除精华' };
|
|
23
|
+
},
|
|
24
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ message_id: string; action: 'add' | 'remove' }>({
|
|
4
|
+
description: '设置或移除 QQ 群精华消息',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
message_id: z.string().describe('消息 ID'),
|
|
7
|
+
action: z.enum(['add', 'remove']).describe('add=设为精华, remove=移除精华'),
|
|
8
|
+
}),
|
|
9
|
+
adapter: 'icqq',
|
|
10
|
+
requiresApproval: 'once',
|
|
11
|
+
scopes:['group'],
|
|
12
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
13
|
+
async execute({ message_id, action }, context) {
|
|
14
|
+
const client = context.$client;
|
|
15
|
+
if (action === 'add') {
|
|
16
|
+
await client.setEssenceMessage(message_id);
|
|
17
|
+
} else {
|
|
18
|
+
await client.removeEssenceMessage(message_id);
|
|
19
|
+
}
|
|
20
|
+
return { success: true, message: action === 'add' ? '已设为精华' : '已移除精华' };
|
|
21
|
+
},
|
|
22
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '邀请好友加入 QQ 群',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
group_id: z.number().describe('目标群号'),
|
|
8
|
+
user_id: z.number().describe('要邀请的 QQ号'),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'icqq',
|
|
11
|
+
requiresApproval: 'always',
|
|
12
|
+
async execute({ group_id, user_id }, context) {
|
|
13
|
+
const client = context.$client;
|
|
14
|
+
const groupInfo = client.pickGroup(group_id);
|
|
15
|
+
if (!groupInfo)
|
|
16
|
+
return { success: false, message: '目标群不存在' };
|
|
17
|
+
const memberInfo = client.pickMember(group_id, user_id);
|
|
18
|
+
if (memberInfo)
|
|
19
|
+
return { success: false, message: '目标成员已加入群' };
|
|
20
|
+
await client.inviteFriend(group_id, user_id);
|
|
21
|
+
return { success: true, message: `已尝试邀请 ${user_id} 加入群 ${group_id}` };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ group_id: number; user_id: number }>({
|
|
4
|
+
description: '邀请好友加入 QQ 群',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
group_id: z.number().describe('目标群号'),
|
|
7
|
+
user_id: z.number().describe('要邀请的 QQ号'),
|
|
8
|
+
}),
|
|
9
|
+
adapter: 'icqq',
|
|
10
|
+
requiresApproval: 'always',
|
|
11
|
+
async execute({ group_id, user_id }, context) {
|
|
12
|
+
const client = context.$client;
|
|
13
|
+
const groupInfo= client.pickGroup(group_id);
|
|
14
|
+
if(!groupInfo) return { success: false, message: '目标群不存在' };
|
|
15
|
+
const memberInfo= client.pickMember(group_id,user_id);
|
|
16
|
+
if(memberInfo) return { success: false, message: '目标成员已加入群' };
|
|
17
|
+
await client.inviteFriend(group_id, user_id);
|
|
18
|
+
return { success: true, message: `已尝试邀请 ${user_id} 加入群 ${group_id}` };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '踢出 QQ 群中的某个成员',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
group_id: z.number().describe('目标群号'),
|
|
8
|
+
user_id: z.number().describe('要踢出的成员 QQ号'),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'icqq',
|
|
11
|
+
scopes: ['group'],
|
|
12
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
13
|
+
requiresApproval: 'once',
|
|
14
|
+
async execute({ group_id, user_id }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
const selfInfo = client.pickMember(group_id, client.uin);
|
|
17
|
+
if (!selfInfo.is_admin && !selfInfo.is_owner)
|
|
18
|
+
return { success: false, message: '机器人不是群主或管理员,无法踢出成员' };
|
|
19
|
+
if (selfInfo.user_id === user_id)
|
|
20
|
+
return { success: false, message: '机器人不能踢出自己' };
|
|
21
|
+
const memberInfo = client.pickMember(group_id, user_id);
|
|
22
|
+
if (!memberInfo)
|
|
23
|
+
return { success: false, message: '目标成员不存在' };
|
|
24
|
+
await client.setGroupKick(group_id, user_id);
|
|
25
|
+
return { success: true, message: `已踢出 ${user_id} 成员` };
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ group_id: number; user_id: number }>({
|
|
4
|
+
description: '踢出 QQ 群中的某个成员',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
group_id: z.number().describe('目标群号'),
|
|
7
|
+
user_id: z.number().describe('要踢出的成员 QQ号'),
|
|
8
|
+
}),
|
|
9
|
+
adapter: 'icqq',
|
|
10
|
+
scopes:['group'],
|
|
11
|
+
permissions: ['role(master,admin,trusted,owner)'],
|
|
12
|
+
requiresApproval: 'once',
|
|
13
|
+
async execute({ group_id, user_id }, context) {
|
|
14
|
+
const client = context.$client;
|
|
15
|
+
const selfInfo= client.pickMember(group_id,client.uin);
|
|
16
|
+
if(!selfInfo.is_admin && !selfInfo.is_owner) return { success: false, message: '机器人不是群主或管理员,无法踢出成员' };
|
|
17
|
+
if(selfInfo.user_id === user_id) return { success: false, message: '机器人不能踢出自己' };
|
|
18
|
+
const memberInfo= client.pickMember(group_id,user_id);
|
|
19
|
+
if(!memberInfo) return { success: false, message: '目标成员不存在' };
|
|
20
|
+
await client.setGroupKick(group_id, user_id);
|
|
21
|
+
return { success: true, message: `已踢出 ${user_id} 成员` };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '开启或关闭 QQ 群的匿名聊天功能',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
group_id: z.number().describe('目标群号'),
|
|
8
|
+
enable: z.boolean().optional().describe('true=开启,false=关闭,默认 true'),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'icqq',
|
|
11
|
+
requiresApproval: 'once',
|
|
12
|
+
scopes: ['group'],
|
|
13
|
+
permissions: ['role(master,trusted,owner,admin)'],
|
|
14
|
+
async execute({ group_id, enable }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
const on = enable ?? true;
|
|
17
|
+
const selfInfo = client.pickMember(group_id, client.uin);
|
|
18
|
+
if (!selfInfo.is_admin && !selfInfo.is_owner)
|
|
19
|
+
return { success: false, message: '机器人不是群主或管理员,无法开启或关闭匿名聊天' };
|
|
20
|
+
await client.setGroupAnonymous(group_id, on);
|
|
21
|
+
return { success: true, message: on ? '已开启匿名聊天' : '已关闭匿名聊天' };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ group_id: number; enable?: boolean }>({
|
|
4
|
+
description: '开启或关闭 QQ 群的匿名聊天功能',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
group_id: z.number().describe('目标群号'),
|
|
7
|
+
enable: z.boolean().optional().describe('true=开启,false=关闭,默认 true'),
|
|
8
|
+
}),
|
|
9
|
+
adapter: 'icqq',
|
|
10
|
+
requiresApproval: 'once',
|
|
11
|
+
scopes:['group'],
|
|
12
|
+
permissions: ['role(master,trusted,owner,admin)'],
|
|
13
|
+
async execute({ group_id, enable }, context) {
|
|
14
|
+
const client = context.$client;
|
|
15
|
+
const on = enable ?? true;
|
|
16
|
+
const selfInfo= client.pickMember(group_id,client.uin);
|
|
17
|
+
if(!selfInfo.is_admin && !selfInfo.is_owner) return { success: false, message: '机器人不是群主或管理员,无法开启或关闭匿名聊天' };
|
|
18
|
+
await client.setGroupAnonymous(group_id, on);
|
|
19
|
+
return { success: true, message: on ? '已开启匿名聊天' : '已关闭匿名聊天' };
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '禁言/解除禁言指定成员',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
group_id: z.number().describe('目标群号'),
|
|
8
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
9
|
+
duration: z.number().describe('禁言时间(秒),0=解除禁言').default(0),
|
|
10
|
+
}),
|
|
11
|
+
adapter: 'icqq',
|
|
12
|
+
scopes: ['group'],
|
|
13
|
+
requiresApproval: 'always',
|
|
14
|
+
async execute({ group_id, user_id, duration }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
const selfInfo = client.pickMember(group_id, client.uin);
|
|
17
|
+
if (!selfInfo.is_admin && !selfInfo.is_owner)
|
|
18
|
+
return { success: false, message: '机器人不是群主或管理员,无法禁言/解除禁言成员' };
|
|
19
|
+
const memberInfo = client.pickMember(group_id, user_id);
|
|
20
|
+
if (!memberInfo)
|
|
21
|
+
return { success: false, message: '目标成员不存在' };
|
|
22
|
+
await client.setGroupBan(group_id, user_id, duration === 0 ? 0 : duration);
|
|
23
|
+
return { success: true, message: `已${duration === 0 ? '解除' : ''}禁言 ${user_id} 成员${duration === 0 ? '' : `(${duration}秒)`}` };
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ group_id: number; user_id: number; duration?: number }>({
|
|
4
|
+
description: '禁言/解除禁言指定成员',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
group_id: z.number().describe('目标群号'),
|
|
7
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
8
|
+
duration: z.number().describe('禁言时间(秒),0=解除禁言').default(0),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'icqq',
|
|
11
|
+
scopes:['group'],
|
|
12
|
+
requiresApproval: 'always',
|
|
13
|
+
async execute({ group_id, user_id, duration }, context) {
|
|
14
|
+
const client = context.$client;
|
|
15
|
+
const selfInfo= client.pickMember(group_id,client.uin);
|
|
16
|
+
if(!selfInfo.is_admin && !selfInfo.is_owner) return { success: false, message: '机器人不是群主或管理员,无法禁言/解除禁言成员' };
|
|
17
|
+
const memberInfo= client.pickMember(group_id,user_id);
|
|
18
|
+
if(!memberInfo) return { success: false, message: '目标成员不存在' };
|
|
19
|
+
await client.setGroupBan(group_id, user_id, duration === 0 ? 0 : duration);
|
|
20
|
+
return { success: true, message: `已${duration === 0 ? '解除' : ''}禁言 ${user_id} 成员${duration === 0 ? '' : `(${duration}秒)`}` };
|
|
21
|
+
},
|
|
22
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '设置 QQ 群成员的专属头衔',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
group_id: z.number().describe('目标群号'),
|
|
8
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
9
|
+
title: z.string().describe('头衔文字'),
|
|
10
|
+
duration: z.number().optional().describe('持续时间(秒),-1永久').default(-1),
|
|
11
|
+
}),
|
|
12
|
+
adapter: 'icqq',
|
|
13
|
+
scopes: ['group'],
|
|
14
|
+
requiresApproval: 'always',
|
|
15
|
+
async execute({ group_id, user_id, title, duration }, context) {
|
|
16
|
+
const client = context.$client;
|
|
17
|
+
const selfInfo = client.pickMember(group_id, client.uin);
|
|
18
|
+
if (!selfInfo.is_admin && !selfInfo.is_owner)
|
|
19
|
+
return { success: false, message: '机器人不是群主或管理员,无法设置头衔' };
|
|
20
|
+
const memberInfo = client.pickMember(group_id, user_id);
|
|
21
|
+
if (!memberInfo)
|
|
22
|
+
return { success: false, message: '目标成员不存在' };
|
|
23
|
+
await client.setGroupSpecialTitle(group_id, user_id, title, duration ?? -1);
|
|
24
|
+
return { success: true, message: `已将 ${user_id} 的头衔设为 "${title}"` };
|
|
25
|
+
},
|
|
26
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export default defineAgentTool<{ group_id: number; user_id: number; title: string; duration?: number }>({
|
|
4
|
+
description: '设置 QQ 群成员的专属头衔',
|
|
5
|
+
inputSchema: z.object({
|
|
6
|
+
group_id: z.number().describe('目标群号'),
|
|
7
|
+
user_id: z.number().describe('目标成员 QQ号'),
|
|
8
|
+
title: z.string().describe('头衔文字'),
|
|
9
|
+
duration: z.number().optional().describe('持续时间(秒),-1永久').default(-1),
|
|
10
|
+
}),
|
|
11
|
+
adapter: 'icqq',
|
|
12
|
+
scopes:['group'],
|
|
13
|
+
requiresApproval: 'always',
|
|
14
|
+
async execute({ group_id, user_id, title, duration }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
const selfInfo= client.pickMember(group_id,client.uin);
|
|
17
|
+
if(!selfInfo.is_admin && !selfInfo.is_owner) return { success: false, message: '机器人不是群主或管理员,无法设置头衔' };
|
|
18
|
+
const memberInfo= client.pickMember(group_id,user_id);
|
|
19
|
+
if(!memberInfo) return { success: false, message: '目标成员不存在' };
|
|
20
|
+
await client.setGroupSpecialTitle(group_id, user_id, title, duration ?? -1);
|
|
21
|
+
return { success: true, message: `已将 ${user_id} 的头衔设为 "${title}"` };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: icqq-group-state
|
|
3
|
+
platforms:
|
|
4
|
+
- icqq
|
|
5
|
+
description: ICQQ 群文件与禁言状态查询能力。
|
|
6
|
+
keywords:
|
|
7
|
+
- "icqq"
|
|
8
|
+
- "群文件"
|
|
9
|
+
- "禁言列表"
|
|
10
|
+
tools:
|
|
11
|
+
- "group_files"
|
|
12
|
+
- "list_muted"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# icqq-group-state
|
|
16
|
+
|
|
17
|
+
用于读取群文件和禁言状态。确认群号后调用,不把列表之外的信息当作已验证事实。
|