@zhin.js/adapter-discord 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.
Files changed (68) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +7 -1
  3. package/{skills/discord → agent}/PERMITS.md +1 -1
  4. package/agent/tools/add_role.ts +24 -0
  5. package/agent/tools/create_thread.ts +25 -0
  6. package/agent/tools/forum_post.ts +24 -0
  7. package/agent/tools/list_roles.ts +22 -0
  8. package/agent/tools/react.ts +22 -0
  9. package/agent/tools/remove_role.ts +24 -0
  10. package/agent/tools/send_embed.ts +37 -0
  11. package/dist/index.js +2 -2
  12. package/lib/agent/tools/add_role.js +22 -0
  13. package/lib/agent/tools/add_role.js.map +1 -0
  14. package/lib/agent/tools/create_thread.js +23 -0
  15. package/lib/agent/tools/create_thread.js.map +1 -0
  16. package/lib/agent/tools/forum_post.js +22 -0
  17. package/lib/agent/tools/forum_post.js.map +1 -0
  18. package/lib/agent/tools/list_roles.js +20 -0
  19. package/lib/agent/tools/list_roles.js.map +1 -0
  20. package/lib/agent/tools/react.js +20 -0
  21. package/lib/agent/tools/react.js.map +1 -0
  22. package/lib/agent/tools/remove_role.js +22 -0
  23. package/lib/agent/tools/remove_role.js.map +1 -0
  24. package/lib/agent/tools/send_embed.js +40 -0
  25. package/lib/agent/tools/send_embed.js.map +1 -0
  26. package/lib/{adapter.js → src/adapter.js} +3 -2
  27. package/lib/src/adapter.js.map +1 -0
  28. package/lib/src/discord-agent-deps.js +10 -0
  29. package/lib/src/discord-agent-deps.js.map +1 -0
  30. package/lib/src/endpoint-interactions.js.map +1 -0
  31. package/lib/{endpoint.js → src/endpoint.js} +116 -14
  32. package/lib/src/endpoint.js.map +1 -0
  33. package/lib/src/index.js +159 -0
  34. package/lib/src/index.js.map +1 -0
  35. package/lib/{platform-permit.js → src/platform-permit.js} +5 -2
  36. package/lib/src/platform-permit.js.map +1 -0
  37. package/lib/src/segment-mapper.js +2 -0
  38. package/lib/src/segment-mapper.js.map +1 -0
  39. package/lib/src/types.js.map +1 -0
  40. package/package.json +25 -15
  41. package/src/adapter.ts +3 -2
  42. package/src/discord-agent-deps.ts +22 -0
  43. package/src/endpoint.ts +125 -15
  44. package/src/index.ts +22 -198
  45. package/src/platform-permit.ts +3 -4
  46. package/src/segment-mapper.ts +1 -0
  47. package/lib/adapter.d.ts +0 -24
  48. package/lib/adapter.d.ts.map +0 -1
  49. package/lib/adapter.js.map +0 -1
  50. package/lib/endpoint-interactions.d.ts +0 -34
  51. package/lib/endpoint-interactions.d.ts.map +0 -1
  52. package/lib/endpoint-interactions.js.map +0 -1
  53. package/lib/endpoint.d.ts +0 -122
  54. package/lib/endpoint.d.ts.map +0 -1
  55. package/lib/endpoint.js.map +0 -1
  56. package/lib/index.d.ts +0 -18
  57. package/lib/index.d.ts.map +0 -1
  58. package/lib/index.js +0 -330
  59. package/lib/index.js.map +0 -1
  60. package/lib/platform-permit.d.ts +0 -16
  61. package/lib/platform-permit.d.ts.map +0 -1
  62. package/lib/platform-permit.js.map +0 -1
  63. package/lib/types.d.ts +0 -49
  64. package/lib/types.d.ts.map +0 -1
  65. package/lib/types.js.map +0 -1
  66. /package/{skills/discord/SKILL.md → agent/skills/discord.md} +0 -0
  67. /package/lib/{endpoint-interactions.js → src/endpoint-interactions.js} +0 -0
  68. /package/lib/{types.js → src/types.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @zhin.js/adapter-discord
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@4.1.2
16
+
17
+ ## 5.0.1
18
+
19
+ ### Patch Changes
20
+
21
+ - 5cc9c03: fix: ai 优化
22
+ - b9b3881: fix: 增加游戏引擎以及部分游戏
23
+ - 7700903: fix: 游戏强化
24
+ - Updated dependencies [5cc9c03]
25
+ - Updated dependencies [7700903]
26
+ - @zhin.js/client@2.0.4
27
+ - @zhin.js/contract@1.0.2
28
+ - @zhin.js/host-api@2.0.4
29
+ - @zhin.js/host-router@2.0.2
30
+ - zhin.js@4.1.1
31
+
3
32
  ## 5.0.0
4
33
 
5
34
  ### Patch Changes
package/README.md CHANGED
@@ -98,7 +98,13 @@ root.addMiddleware(async (message, next) => {
98
98
 
99
99
  ## AI 工具(Skill)
100
100
 
101
- 适配器内置 Discord 服务器管理 Skill,工具供 AI 调用。
101
+ | 类别 | 路径 |
102
+ |------|------|
103
+ | Permit 词汇 | `agent/PERMITS.md` |
104
+ | 平台工具(7 个) | `agent/tools/`(`discord_*`:角色、Embed、反应等) |
105
+ | 技能说明 | `agent/skills/discord.md` |
106
+ | 群管标准工具 | `createSceneManagementTools()` |
107
+
102
108
 
103
109
  > 工具使用 Discord 的 Snowflake ID 格式标识 `guild_id`、`user_id`、`channel_id`。
104
110
 
@@ -22,4 +22,4 @@ Guild 频道消息从 `msg.member.permissions` bitfield 解析:
22
22
 
23
23
  ## 工厂映射
24
24
 
25
- `group_admin` → `moderate_members` · `group_owner` → `guild_owner`
25
+ `scene_admin` → `moderate_members` · `scene_owner` → `guild_owner`
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { platformPermit } from '../../src/platform-permit.js';
4
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+
6
+ export default defineTool<{ endpoint_id: string; guild_id: string; user_id: string; role_id: string }>({
7
+ description: '给成员添加 Discord 角色',
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
+ role_id: z.string().describe('角色 ID'),
13
+ }),
14
+ platforms: ['discord'],
15
+ tags: ['discord'],
16
+ permissions: [platformPermit('manage_roles')],
17
+ async execute({ endpoint_id, guild_id, user_id, role_id }: { endpoint_id: string; guild_id: string; user_id: string; role_id: string }) {
18
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id) as {
19
+ addRole: (guildId: string, userId: string, roleId: string) => Promise<boolean>;
20
+ };
21
+ const success = await endpoint.addRole(guild_id, user_id, role_id);
22
+ return { success, message: success ? `已给用户 ${user_id} 添加角色` : '操作失败' };
23
+ },
24
+ });
@@ -0,0 +1,25 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { platformPermit } from '../../src/platform-permit.js';
4
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+
6
+ export default defineTool<{ endpoint_id: string; channel_id: string; name: string; message_id?: string; auto_archive_duration?: number }>({
7
+ description: '在 Discord 频道中创建帖子/子线程',
8
+ inputSchema: z.object({
9
+ endpoint_id: z.string().describe('Endpoint 名称'),
10
+ channel_id: z.string().describe('频道 ID'),
11
+ name: z.string().describe('帖子标题'),
12
+ message_id: z.string().optional().describe('基于某条消息创建(可选)'),
13
+ auto_archive_duration: z.number().optional().describe('自动归档时间(分钟:60/1440/4320/10080)'),
14
+ }),
15
+ platforms: ['discord'],
16
+ tags: ['discord'],
17
+ permissions: [platformPermit('manage_channels')],
18
+ async execute({ endpoint_id, channel_id, name, message_id, auto_archive_duration }: { endpoint_id: string; channel_id: string; name: string; message_id?: string; auto_archive_duration?: number }) {
19
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id) as {
20
+ createThread: (channelId: string, threadName: string, messageId?: string, autoArchiveDuration?: number) => Promise<{ id: string }>;
21
+ };
22
+ const thread = await endpoint.createThread(channel_id, name, message_id, auto_archive_duration);
23
+ return { success: true, thread_id: thread.id, message: `帖子 "${name}" 已创建` };
24
+ },
25
+ });
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
4
+
5
+ export default defineTool<{ endpoint_id: string; channel_id: string; name: string; content: string; tags?: string }>({
6
+ description: '在 Discord 论坛频道中创建帖子',
7
+ inputSchema: z.object({
8
+ endpoint_id: z.string().describe('Endpoint 名称'),
9
+ channel_id: z.string().describe('论坛频道 ID'),
10
+ name: z.string().describe('帖子标题'),
11
+ content: z.string().describe('帖子内容'),
12
+ tags: z.string().optional().describe('标签名,逗号分隔(可选)'),
13
+ }),
14
+ platforms: ['discord'],
15
+ tags: ['discord'],
16
+ async execute({ endpoint_id, channel_id, name, content, tags }: { endpoint_id: string; channel_id: string; name: string; content: string; tags?: string }) {
17
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id) as {
18
+ createForumPost: (channelId: string, title: string, body: string, tagNames?: string[]) => Promise<{ id: string }>;
19
+ };
20
+ const tagList = tags ? tags.split(',').map((t: string) => t.trim()) : undefined;
21
+ const thread = await endpoint.createForumPost(channel_id, name, content, tagList);
22
+ return { success: true, thread_id: thread.id, message: `论坛帖 "${name}" 已创建` };
23
+ },
24
+ });
@@ -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 { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+
6
+ export default defineTool<{ endpoint_id: string; guild_id: string }>({
7
+ description: '获取 Discord 服务器角色列表',
8
+ inputSchema: z.object({
9
+ endpoint_id: z.string().describe('Endpoint 名称'),
10
+ guild_id: z.string().describe('服务器 ID'),
11
+ }),
12
+ platforms: ['discord'],
13
+ tags: ['discord'],
14
+ permissions: [platformPermit('manage_roles')],
15
+ async execute({ endpoint_id, guild_id }: { endpoint_id: string; guild_id: string }) {
16
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id) as {
17
+ getRoles: (guildId: string) => Promise<unknown[]>;
18
+ };
19
+ const roles = await endpoint.getRoles(guild_id);
20
+ return { roles, count: roles.length };
21
+ },
22
+ });
@@ -0,0 +1,22 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
4
+
5
+ export default defineTool<{ endpoint_id: string; channel_id: string; message_id: string; emoji: string }>({
6
+ description: '对 Discord 消息添加表情反应',
7
+ inputSchema: z.object({
8
+ endpoint_id: z.string().describe('Endpoint 名称'),
9
+ channel_id: z.string().describe('频道 ID'),
10
+ message_id: z.string().describe('消息 ID'),
11
+ emoji: z.string().describe('表情(Unicode 表情或自定义表情如 <:name:id>)'),
12
+ }),
13
+ platforms: ['discord'],
14
+ tags: ['discord'],
15
+ async execute({ endpoint_id, channel_id, message_id, emoji }: { endpoint_id: string; channel_id: string; message_id: string; emoji: string }) {
16
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id) as {
17
+ addReaction: (channelId: string, messageId: string, reaction: string) => Promise<void>;
18
+ };
19
+ await endpoint.addReaction(channel_id, message_id, emoji);
20
+ return { success: true, message: `已添加反应 ${emoji}` };
21
+ },
22
+ });
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { platformPermit } from '../../src/platform-permit.js';
4
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+
6
+ export default defineTool<{ endpoint_id: string; guild_id: string; user_id: string; role_id: string }>({
7
+ description: '移除成员的 Discord 角色',
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
+ role_id: z.string().describe('角色 ID'),
13
+ }),
14
+ platforms: ['discord'],
15
+ tags: ['discord'],
16
+ permissions: [platformPermit('manage_roles')],
17
+ async execute({ endpoint_id, guild_id, user_id, role_id }: { endpoint_id: string; guild_id: string; user_id: string; role_id: string }) {
18
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id) as {
19
+ removeRole: (guildId: string, userId: string, roleId: string) => Promise<boolean>;
20
+ };
21
+ const success = await endpoint.removeRole(guild_id, user_id, role_id);
22
+ return { success, message: success ? `已移除用户 ${user_id} 的角色` : '操作失败' };
23
+ },
24
+ });
@@ -0,0 +1,37 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
4
+
5
+ export default defineTool<{ endpoint_id: string; channel_id: string; title?: string; description?: string; color?: number; url?: string; fields?: string }>({
6
+ description: '发送 Discord 富文本嵌入消息(Embed)',
7
+ inputSchema: z.object({
8
+ endpoint_id: z.string().describe('Endpoint 名称'),
9
+ channel_id: z.string().describe('频道 ID'),
10
+ title: z.string().optional().describe('Embed 标题'),
11
+ description: z.string().optional().describe('Embed 描述'),
12
+ color: z.number().optional().describe('颜色值(十进制,如 0x00ff00 = 65280)'),
13
+ url: z.string().optional().describe('标题链接(可选)'),
14
+ fields: z.string().optional().describe('字段,JSON 格式: [{"name":"k","value":"v","inline":false}]'),
15
+ }),
16
+ platforms: ['discord'],
17
+ tags: ['discord'],
18
+ async execute({ endpoint_id, channel_id, title, description, color, url, fields }: { endpoint_id: string; channel_id: string; title?: string; description?: string; color?: number; url?: string; fields?: string }) {
19
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id) as {
20
+ sendEmbed: (channelId: string, embed: Record<string, unknown>) => Promise<{ id: string }>;
21
+ };
22
+ const embedData: Record<string, unknown> = {};
23
+ if (title) embedData.title = title;
24
+ if (description) embedData.description = description;
25
+ if (color) embedData.color = color;
26
+ if (url) embedData.url = url;
27
+ if (fields) {
28
+ try {
29
+ embedData.fields = JSON.parse(fields);
30
+ } catch {
31
+ return { success: false, message: 'fields 格式错误,应为 JSON 数组' };
32
+ }
33
+ }
34
+ const msg = await endpoint.sendEmbed(channel_id, embedData);
35
+ return { success: true, message_id: msg.id, message: 'Embed 已发送' };
36
+ },
37
+ });
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{useEffect as pe,useState as p,useCallback as me}from"react";var E="zhin_api_token",J="zhin_api_base";function _(){let t=localStorage.getItem(J)?.trim();return t?t.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function j(){return localStorage.getItem(E)}async function T(t,u){let l=j(),s=new Headers(u?.headers);l&&s.set("Authorization",`Bearer ${l}`);let r=_(),f=typeof t=="string"&&t.startsWith("/")?`${r}${t}`:t,i=await fetch(f,{...u,headers:s});return i.status===401&&(localStorage.removeItem(E),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),i}import{forwardRef as te,createElement as oe}from"react";var q=(...t)=>t.filter((u,l,s)=>!!u&&u.trim()!==""&&s.indexOf(u)===l).join(" ").trim();var V=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var z=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(u,l,s)=>s?s.toUpperCase():l.toLowerCase());var O=t=>{let u=z(t);return u.charAt(0).toUpperCase()+u.slice(1)};import{forwardRef as ae,createElement as K}from"react";var b={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 N=t=>{for(let u in t)if(u.startsWith("aria-")||u==="role"||u==="title")return!0;return!1};import{createContext as $,useContext as Y,useMemo as Be,createElement as Me}from"react";var ee=$({});var X=()=>Y(ee);var Z=ae(({color:t,size:u,strokeWidth:l,absoluteStrokeWidth:s,className:r="",children:f,iconNode:i,...m},D)=>{let{size:L=24,strokeWidth:C=2,absoluteStrokeWidth:v=!1,color:h="currentColor",className:R=""}=X()??{},S=s??v?Number(l??C)*24/Number(u??L):l??C;return K("svg",{ref:D,...b,width:u??L??b.width,height:u??L??b.height,stroke:t??h,strokeWidth:S,className:q("lucide",R,r),...!f&&!N(m)&&{"aria-hidden":"true"},...m},[...i.map(([y,I])=>K(y,I)),...Array.isArray(f)?f:[f]])});var d=(t,u)=>{let l=te(({className:s,...r},f)=>oe(Z,{ref:f,iconNode:u,className:q(`lucide-${V(O(t))}`,`lucide-${t}`,s),...r}));return l.displayName=O(t),l};var ue=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],g=d("globe",ue);var de=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],n=d("loader-circle",de);var le=[["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"}]],k=d("power-off",le);var fe=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],w=d("power",fe);var se=[["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"}]],P=d("refresh-cw",se);var re=[["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"}]],A=d("server",re);var ie=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],B=d("users",ie);var ce=[["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"}]],M=d("wifi-off",ce);var ne=[["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"}]],F=d("wifi",ne);import{Fragment as Le,jsx as a,jsxs as o}from"react/jsx-runtime";function H(){let[t,u]=p([]),[l,s]=p(!0),[r,f]=p(""),[i,m]=p("overview"),[D,L]=p({}),[C,v]=p(""),[h,R]=p([]),[S,y]=p(!1),I=me(async()=>{s(!0),f("");try{let x=await(await T("/api/discord/endpoints")).json();x.success?u(x.data):f(x.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{f("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{s(!1)}},[]);pe(()=>{I()},[I]);let Q=async(e,x)=>{L(c=>({...c,[e]:!0}));try{let c=x?"disconnect":"connect",W=await(await T(`/api/discord/endpoints/${encodeURIComponent(e)}/${c}`,{method:"POST"})).json();W.success||f(W.error||"\u64CD\u4F5C\u5931\u8D25"),await I()}catch{f("\u64CD\u4F5C\u5931\u8D25")}finally{L(c=>({...c,[e]:!1}))}},G=async e=>{v(e),y(!0),R([]);try{let c=await(await T(`/api/discord/endpoints/${encodeURIComponent(e)}/guilds`)).json();c.success?R(c.data):f(c.error||"\u83B7\u53D6\u670D\u52A1\u5668\u5217\u8868\u5931\u8D25")}catch{f("\u83B7\u53D6\u670D\u52A1\u5668\u5217\u8868\u5931\u8D25")}finally{y(!1)}},U=t.filter(e=>e.connected&&e.mode==="gateway");return o("div",{className:"p-6 max-w-5xl mx-auto",children:[o("div",{className:"flex items-center justify-between mb-6",children:[o("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[a(A,{className:"w-6 h-6"})," Discord \u673A\u5668\u4EBA"]}),o("button",{onClick:I,disabled:l,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-500 text-white hover:bg-indigo-600 disabled:opacity-50 text-sm",children:[a(P,{className:`w-4 h-4 ${l?"animate-spin":""}`})," \u5237\u65B0"]})]}),r&&a("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200",children:r}),o("div",{className:"flex gap-1 mb-6 border-b",children:[a("button",{onClick:()=>m("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i==="overview"?"border-indigo-500 text-indigo-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u6982\u89C8"}),a("button",{onClick:()=>m("guilds"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i==="guilds"?"border-indigo-500 text-indigo-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u670D\u52A1\u5668\u5217\u8868"})]}),i==="overview"&&o(Le,{children:[!l&&!t.length&&!r&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 Discord Endpoint \u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:t.map(e=>o("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[o("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?o("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(F,{className:"w-4 h-4"})," \u5728\u7EBF"]}):o("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(M,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),e.user&&o("div",{className:"text-sm text-gray-500 mb-2",children:["@",e.user.tag]}),o("div",{className:"grid grid-cols-2 gap-2 text-sm text-gray-600 mb-3",children:[o("div",{className:"flex justify-between",children:[a("span",{children:"\u6A21\u5F0F"}),a("span",{className:"font-mono",children:e.mode})]}),o("div",{className:"flex justify-between",children:[a("span",{children:"\u670D\u52A1\u5668"}),a("span",{className:"font-mono",children:e.guildCount})]}),o("div",{className:"flex justify-between",children:[a("span",{children:"\u9891\u9053"}),a("span",{className:"font-mono",children:e.channelCount})]})]}),o("div",{className:"flex gap-2",children:[o("button",{onClick:()=>Q(e.name,e.connected),disabled:D[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:[D[e.name]?a(n,{className:"w-3.5 h-3.5 animate-spin"}):e.connected?a(k,{className:"w-3.5 h-3.5"}):a(w,{className:"w-3.5 h-3.5"}),e.connected?"\u65AD\u5F00":"\u8FDE\u63A5"]}),e.connected&&e.mode==="gateway"&&o("button",{onClick:()=>{m("guilds"),G(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(g,{className:"w-3.5 h-3.5"})," \u67E5\u770B\u670D\u52A1\u5668"]})]})]},e.name))})]}),i==="guilds"&&o("div",{children:[U.length>0&&o("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"}),o("select",{value:C,onChange:e=>G(e.target.value),className:"border rounded px-2 py-1 text-sm",children:[a("option",{value:"",children:"--"}),U.map(e=>a("option",{value:e.name,children:e.name},e.name))]}),a("span",{className:"text-xs text-gray-400 ml-2",children:"\u4EC5 Gateway \u6A21\u5F0F\u652F\u6301"})]}),!U.length&&a("div",{className:"text-center text-gray-500 py-8",children:"\u6682\u65E0 Gateway \u6A21\u5F0F\u5728\u7EBF Endpoint"}),S&&a("div",{className:"flex justify-center py-8",children:a(n,{className:"w-6 h-6 animate-spin text-indigo-500"})}),!S&&h.length>0&&a("div",{className:"grid gap-3 md:grid-cols-2 lg:grid-cols-3",children:h.map(e=>o("div",{className:"border rounded-lg p-3 bg-card shadow-sm flex items-center gap-3",children:[e.icon?a("img",{src:e.icon,alt:"",className:"w-10 h-10 rounded-full"}):a("div",{className:"w-10 h-10 rounded-full bg-indigo-100 flex items-center justify-center text-indigo-500 font-bold text-sm",children:e.name[0]}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"font-medium text-sm truncate",children:e.name}),o("div",{className:"flex items-center gap-1 text-xs text-gray-400",children:[a(B,{className:"w-3 h-3"})," ",e.memberCount," \u6210\u5458"]})]})]},e.id))}),!S&&C&&!h.length&&a("div",{className:"text-center text-gray-400 py-8",children:"\u8BE5\u673A\u5668\u4EBA\u672A\u52A0\u5165\u4EFB\u4F55\u670D\u52A1\u5668"})]})]})}function ga(t){t.addRoute({path:"/console/discord",name:"Discord",element:t.React.createElement(H,{hostReact:t.React})}),t.addTool({id:"discord",name:"Discord",path:"/console/discord"})}export{ga as register};
1
+ import{useEffect as pe,useState as p,useCallback as me}from"react";var E="zhin_api_token",J="zhin_api_base";function _(){let t=localStorage.getItem(J)?.trim();return t?t.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function j(){return localStorage.getItem(E)}async function T(t,u){let l=j(),s=new Headers(u?.headers);l&&s.set("Authorization",`Bearer ${l}`);let r=_(),f=typeof t=="string"&&t.startsWith("/")?`${r}${t}`:t,i=await fetch(f,{...u,headers:s});return i.status===401&&(localStorage.removeItem(E),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),i}import{forwardRef as te,createElement as oe}from"react";var b=(...t)=>t.filter((u,l,s)=>!!u&&u.trim()!==""&&s.indexOf(u)===l).join(" ").trim();var V=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var z=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(u,l,s)=>s?s.toUpperCase():l.toLowerCase());var O=t=>{let u=z(t);return u.charAt(0).toUpperCase()+u.slice(1)};import{forwardRef as ae,createElement as K}from"react";var q={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 N=t=>{for(let u in t)if(u.startsWith("aria-")||u==="role"||u==="title")return!0;return!1};import{createContext as $,useContext as Y,useMemo as Be,createElement as Me}from"react";var ee=$({});var X=()=>Y(ee);var Z=ae(({color:t,size:u,strokeWidth:l,absoluteStrokeWidth:s,className:r="",children:f,iconNode:i,...m},F)=>{let{size:L=24,strokeWidth:C=2,absoluteStrokeWidth:v=!1,color:h="currentColor",className:R=""}=X()??{},g=s??v?Number(l??C)*24/Number(u??L):l??C;return K("svg",{ref:F,...q,width:u??L??q.width,height:u??L??q.height,stroke:t??h,strokeWidth:g,className:b("lucide",R,r),...!f&&!N(m)&&{"aria-hidden":"true"},...m},[...i.map(([y,I])=>K(y,I)),...Array.isArray(f)?f:[f]])});var d=(t,u)=>{let l=te(({className:s,...r},f)=>oe(Z,{ref:f,iconNode:u,className:b(`lucide-${V(O(t))}`,`lucide-${t}`,s),...r}));return l.displayName=O(t),l};var ue=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],S=d("globe",ue);var de=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],n=d("loader-circle",de);var le=[["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"}]],k=d("power-off",le);var fe=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],w=d("power",fe);var se=[["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"}]],P=d("refresh-cw",se);var re=[["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"}]],A=d("server",re);var ie=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],B=d("users",ie);var ce=[["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"}]],M=d("wifi-off",ce);var ne=[["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"}]],D=d("wifi",ne);import{Fragment as Le,jsx as a,jsxs as o}from"react/jsx-runtime";function H(){let[t,u]=p([]),[l,s]=p(!0),[r,f]=p(""),[i,m]=p("overview"),[F,L]=p({}),[C,v]=p(""),[h,R]=p([]),[g,y]=p(!1),I=me(async()=>{s(!0),f("");try{let x=await(await T("/api/discord/endpoints")).json();x.success?u(x.data):f(x.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{f("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{s(!1)}},[]);pe(()=>{I()},[I]);let Q=async(e,x)=>{L(c=>({...c,[e]:!0}));try{let c=x?"disconnect":"connect",W=await(await T(`/api/discord/endpoints/${encodeURIComponent(e)}/${c}`,{method:"POST"})).json();W.success||f(W.error||"\u64CD\u4F5C\u5931\u8D25"),await I()}catch{f("\u64CD\u4F5C\u5931\u8D25")}finally{L(c=>({...c,[e]:!1}))}},G=async e=>{v(e),y(!0),R([]);try{let c=await(await T(`/api/discord/endpoints/${encodeURIComponent(e)}/guilds`)).json();c.success?R(c.data):f(c.error||"\u83B7\u53D6\u670D\u52A1\u5668\u5217\u8868\u5931\u8D25")}catch{f("\u83B7\u53D6\u670D\u52A1\u5668\u5217\u8868\u5931\u8D25")}finally{y(!1)}},U=t.filter(e=>e.connected&&e.mode==="gateway");return o("div",{className:"p-6 max-w-5xl mx-auto",children:[o("div",{className:"flex items-center justify-between mb-6",children:[o("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[a(A,{className:"w-6 h-6"})," Discord \u673A\u5668\u4EBA"]}),o("button",{onClick:I,disabled:l,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-500 text-white hover:bg-indigo-600 disabled:opacity-50 text-sm",children:[a(P,{className:`w-4 h-4 ${l?"animate-spin":""}`})," \u5237\u65B0"]})]}),r&&a("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200",children:r}),o("div",{className:"flex gap-1 mb-6 border-b",children:[a("button",{onClick:()=>m("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i==="overview"?"border-indigo-500 text-indigo-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u6982\u89C8"}),a("button",{onClick:()=>m("guilds"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i==="guilds"?"border-indigo-500 text-indigo-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u670D\u52A1\u5668\u5217\u8868"})]}),i==="overview"&&o(Le,{children:[!l&&!t.length&&!r&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 Discord Endpoint \u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:t.map(e=>o("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[o("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?o("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(D,{className:"w-4 h-4"})," \u5728\u7EBF"]}):o("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(M,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),e.user&&o("div",{className:"text-sm text-gray-500 mb-2",children:["@",e.user.tag]}),o("div",{className:"grid grid-cols-2 gap-2 text-sm text-gray-600 mb-3",children:[o("div",{className:"flex justify-between",children:[a("span",{children:"\u6A21\u5F0F"}),a("span",{className:"font-mono",children:e.mode})]}),o("div",{className:"flex justify-between",children:[a("span",{children:"\u670D\u52A1\u5668"}),a("span",{className:"font-mono",children:e.guildCount})]}),o("div",{className:"flex justify-between",children:[a("span",{children:"\u9891\u9053"}),a("span",{className:"font-mono",children:e.channelCount})]})]}),o("div",{className:"flex gap-2",children:[o("button",{onClick:()=>Q(e.name,e.connected),disabled:F[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:[F[e.name]?a(n,{className:"w-3.5 h-3.5 animate-spin"}):e.connected?a(k,{className:"w-3.5 h-3.5"}):a(w,{className:"w-3.5 h-3.5"}),e.connected?"\u65AD\u5F00":"\u8FDE\u63A5"]}),e.connected&&e.mode==="gateway"&&o("button",{onClick:()=>{m("guilds"),G(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(S,{className:"w-3.5 h-3.5"})," \u67E5\u770B\u670D\u52A1\u5668"]})]})]},e.name))})]}),i==="guilds"&&o("div",{children:[U.length>0&&o("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"}),o("select",{value:C,onChange:e=>G(e.target.value),className:"border rounded px-2 py-1 text-sm",children:[a("option",{value:"",children:"--"}),U.map(e=>a("option",{value:e.name,children:e.name},e.name))]}),a("span",{className:"text-xs text-gray-400 ml-2",children:"\u4EC5 Gateway \u6A21\u5F0F\u652F\u6301"})]}),!U.length&&a("div",{className:"text-center text-gray-500 py-8",children:"\u6682\u65E0 Gateway \u6A21\u5F0F\u5728\u7EBF Endpoint"}),g&&a("div",{className:"flex justify-center py-8",children:a(n,{className:"w-6 h-6 animate-spin text-indigo-500"})}),!g&&h.length>0&&a("div",{className:"grid gap-3 md:grid-cols-2 lg:grid-cols-3",children:h.map(e=>o("div",{className:"border rounded-lg p-3 bg-card shadow-sm flex items-center gap-3",children:[e.icon?a("img",{src:e.icon,alt:"",className:"w-10 h-10 rounded-full"}):a("div",{className:"w-10 h-10 rounded-full bg-indigo-100 flex items-center justify-center text-indigo-500 font-bold text-sm",children:e.name[0]}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"font-medium text-sm truncate",children:e.name}),o("div",{className:"flex items-center gap-1 text-xs text-gray-400",children:[a(B,{className:"w-3 h-3"})," ",e.memberCount," \u6210\u5458"]})]})]},e.id))}),!g&&C&&!h.length&&a("div",{className:"text-center text-gray-400 py-8",children:"\u8BE5\u673A\u5668\u4EBA\u672A\u52A0\u5165\u4EFB\u4F55\u670D\u52A1\u5668"})]})]})}function Sa(t){t.addRoute({path:"/console/discord",name:"Discord",element:t.React.createElement(H,{hostReact:t.React})}),t.addTool({id:"discord",name:"Discord",path:"/console/discord"})}export{Sa as register};
2
2
  /*! Bundled license information:
3
3
 
4
4
  lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
@@ -21,7 +21,7 @@ lucide-react/dist/esm/icons/wifi-off.mjs:
21
21
  lucide-react/dist/esm/icons/wifi.mjs:
22
22
  lucide-react/dist/esm/lucide-react.mjs:
23
23
  (**
24
- * @license lucide-react v1.21.0 - ISC
24
+ * @license lucide-react v1.23.0 - ISC
25
25
  *
26
26
  * This source code is licensed under the ISC license.
27
27
  * See the LICENSE file in the root directory of this source tree.
@@ -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 { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+ export default defineTool({
6
+ description: '给成员添加 Discord 角色',
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
+ role_id: z.string().describe('角色 ID'),
12
+ }),
13
+ platforms: ['discord'],
14
+ tags: ['discord'],
15
+ permissions: [platformPermit('manage_roles')],
16
+ async execute({ endpoint_id, guild_id, user_id, role_id }) {
17
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id);
18
+ const success = await endpoint.addRole(guild_id, user_id, role_id);
19
+ return { success, message: success ? `已给用户 ${user_id} 添加角色` : '操作失败' };
20
+ },
21
+ });
22
+ //# 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,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAA8E;IACrG,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,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,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,SAAS,CAAC;IACtB,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAgF;QACrI,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAEpE,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACzE,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 { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+ export default defineTool({
6
+ description: '在 Discord 频道中创建帖子/子线程',
7
+ inputSchema: z.object({
8
+ endpoint_id: z.string().describe('Endpoint 名称'),
9
+ channel_id: z.string().describe('频道 ID'),
10
+ name: z.string().describe('帖子标题'),
11
+ message_id: z.string().optional().describe('基于某条消息创建(可选)'),
12
+ auto_archive_duration: z.number().optional().describe('自动归档时间(分钟:60/1440/4320/10080)'),
13
+ }),
14
+ platforms: ['discord'],
15
+ tags: ['discord'],
16
+ permissions: [platformPermit('manage_channels')],
17
+ async execute({ endpoint_id, channel_id, name, message_id, auto_archive_duration }) {
18
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id);
19
+ const thread = await endpoint.createThread(channel_id, name, message_id, auto_archive_duration);
20
+ return { success: true, thread_id: thread.id, message: `帖子 "${name}" 已创建` };
21
+ },
22
+ });
23
+ //# sourceMappingURL=create_thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_thread.js","sourceRoot":"","sources":["../../../agent/tools/create_thread.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,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAAiH;IACxI,WAAW,EAAE,uBAAuB;IACpC,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,OAAO,CAAC;QACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1D,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACvF,CAAC;IACF,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAmH;QACjM,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAEpE,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;QAChG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,CAAC;IAC9E,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
4
+ export default defineTool({
5
+ description: '在 Discord 论坛频道中创建帖子',
6
+ inputSchema: z.object({
7
+ endpoint_id: z.string().describe('Endpoint 名称'),
8
+ channel_id: z.string().describe('论坛频道 ID'),
9
+ name: z.string().describe('帖子标题'),
10
+ content: z.string().describe('帖子内容'),
11
+ tags: z.string().optional().describe('标签名,逗号分隔(可选)'),
12
+ }),
13
+ platforms: ['discord'],
14
+ tags: ['discord'],
15
+ async execute({ endpoint_id, channel_id, name, content, tags }) {
16
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id);
17
+ const tagList = tags ? tags.split(',').map((t) => t.trim()) : undefined;
18
+ const thread = await endpoint.createForumPost(channel_id, name, content, tagList);
19
+ return { success: true, thread_id: thread.id, message: `论坛帖 "${name}" 已创建` };
20
+ },
21
+ });
22
+ //# sourceMappingURL=forum_post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forum_post.js","sourceRoot":"","sources":["../../../agent/tools/forum_post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAA4F;IACnH,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,SAAS,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KACrD,CAAC;IACF,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAA8F;QACxJ,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAEpE,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,CAAC;IAC/E,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 { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+ export default defineTool({
6
+ description: '获取 Discord 服务器角色列表',
7
+ inputSchema: z.object({
8
+ endpoint_id: z.string().describe('Endpoint 名称'),
9
+ guild_id: z.string().describe('服务器 ID'),
10
+ }),
11
+ platforms: ['discord'],
12
+ tags: ['discord'],
13
+ permissions: [platformPermit('manage_roles')],
14
+ async execute({ endpoint_id, guild_id }) {
15
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id);
16
+ const roles = await endpoint.getRoles(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,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAA4C;IACnE,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,QAAQ,CAAC;KACxC,CAAC;IACF,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAA8C;QACjF,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAEpE,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,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 { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
4
+ export default defineTool({
5
+ description: '对 Discord 消息添加表情反应',
6
+ inputSchema: z.object({
7
+ endpoint_id: z.string().describe('Endpoint 名称'),
8
+ channel_id: z.string().describe('频道 ID'),
9
+ message_id: z.string().describe('消息 ID'),
10
+ emoji: z.string().describe('表情(Unicode 表情或自定义表情如 <:name:id>)'),
11
+ }),
12
+ platforms: ['discord'],
13
+ tags: ['discord'],
14
+ async execute({ endpoint_id, channel_id, message_id, emoji }) {
15
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id);
16
+ await endpoint.addReaction(channel_id, message_id, emoji);
17
+ return { success: true, message: `已添加反应 ${emoji}` };
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,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAAiF;IACxG,WAAW,EAAE,oBAAoB;IACjC,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,OAAO,CAAC;QACxC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC/D,CAAC;IACF,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAmF;QAC3I,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAEpE,CAAC;QACF,MAAM,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,CAAC;IACtD,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 { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
5
+ export default defineTool({
6
+ description: '移除成员的 Discord 角色',
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
+ role_id: z.string().describe('角色 ID'),
12
+ }),
13
+ platforms: ['discord'],
14
+ tags: ['discord'],
15
+ permissions: [platformPermit('manage_roles')],
16
+ async execute({ endpoint_id, guild_id, user_id, role_id }) {
17
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id);
18
+ const success = await endpoint.removeRole(guild_id, user_id, role_id);
19
+ return { success, message: success ? `已移除用户 ${user_id} 的角色` : '操作失败' };
20
+ },
21
+ });
22
+ //# 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,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAA8E;IACrG,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,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,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,SAAS,CAAC;IACtB,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAgF;QACrI,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAEpE,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACzE,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { getDiscordAgentDeps } from '../../src/discord-agent-deps.js';
4
+ export default defineTool({
5
+ description: '发送 Discord 富文本嵌入消息(Embed)',
6
+ inputSchema: z.object({
7
+ endpoint_id: z.string().describe('Endpoint 名称'),
8
+ channel_id: z.string().describe('频道 ID'),
9
+ title: z.string().optional().describe('Embed 标题'),
10
+ description: z.string().optional().describe('Embed 描述'),
11
+ color: z.number().optional().describe('颜色值(十进制,如 0x00ff00 = 65280)'),
12
+ url: z.string().optional().describe('标题链接(可选)'),
13
+ fields: z.string().optional().describe('字段,JSON 格式: [{"name":"k","value":"v","inline":false}]'),
14
+ }),
15
+ platforms: ['discord'],
16
+ tags: ['discord'],
17
+ async execute({ endpoint_id, channel_id, title, description, color, url, fields }) {
18
+ const endpoint = getDiscordAgentDeps().getGatewayEndpoint(endpoint_id);
19
+ const embedData = {};
20
+ if (title)
21
+ embedData.title = title;
22
+ if (description)
23
+ embedData.description = description;
24
+ if (color)
25
+ embedData.color = color;
26
+ if (url)
27
+ embedData.url = url;
28
+ if (fields) {
29
+ try {
30
+ embedData.fields = JSON.parse(fields);
31
+ }
32
+ catch {
33
+ return { success: false, message: 'fields 格式错误,应为 JSON 数组' };
34
+ }
35
+ }
36
+ const msg = await endpoint.sendEmbed(channel_id, embedData);
37
+ return { success: true, message_id: msg.id, message: 'Embed 已发送' };
38
+ },
39
+ });
40
+ //# sourceMappingURL=send_embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send_embed.js","sourceRoot":"","sources":["../../../agent/tools/send_embed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAAmI;IAC1J,WAAW,EAAE,2BAA2B;IACxC,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,OAAO,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACpE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;KAChG,CAAC;IACF,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAqI;QAClN,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAEpE,CAAC;QACF,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,KAAK;YAAE,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QACnC,IAAI,WAAW;YAAE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;QACrD,IAAI,KAAK;YAAE,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QACnC,IAAI,GAAG;YAAE,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC;QAC7B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IACrE,CAAC;CACF,CAAC,CAAC"}
@@ -10,6 +10,7 @@ function isGatewayBot(endpoint) {
10
10
  export class DiscordAdapter extends Adapter {
11
11
  static capabilities = ['inbound', 'outbound'];
12
12
  static outboundRichSegmentPolicy = OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL;
13
+ static interactivePolicy = 'native';
13
14
  #router;
14
15
  constructor(plugin) {
15
16
  super(plugin, "discord", []);
@@ -28,7 +29,7 @@ export class DiscordAdapter extends Adapter {
28
29
  throw new Error(`Unknown Discord connection: ${config.connection}`);
29
30
  }
30
31
  }
31
- async kickMember(endpointId, sceneId, userId) {
32
+ async removeMember(endpointId, sceneId, userId) {
32
33
  const endpoint = this.endpoints.get(endpointId);
33
34
  if (!endpoint)
34
35
  throw new Error(`Endpoint ${endpointId} 不存在`);
@@ -76,7 +77,7 @@ export class DiscordAdapter extends Adapter {
76
77
  throw new Error("群管仅支持 connection: gateway");
77
78
  return endpoint.getMembers(sceneId);
78
79
  }
79
- async getGroupInfo(endpointId, sceneId) {
80
+ async getSceneInfo(endpointId, sceneId) {
80
81
  const endpoint = this.endpoints.get(endpointId);
81
82
  if (!endpoint)
82
83
  throw new Error(`Endpoint ${endpointId} 不存在`);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ let _deps = null;
2
+ export function setDiscordAgentDeps(deps) {
3
+ _deps = deps;
4
+ }
5
+ export function getDiscordAgentDeps() {
6
+ if (!_deps)
7
+ throw new Error('discord agent deps not initialized');
8
+ return _deps;
9
+ }
10
+ //# sourceMappingURL=discord-agent-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-agent-deps.js","sourceRoot":"","sources":["../../src/discord-agent-deps.ts"],"names":[],"mappings":"AAYA,IAAI,KAAK,GAA4B,IAAI,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,IAAsB;IACxD,KAAK,GAAG,IAAI,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint-interactions.js","sourceRoot":"","sources":["../../src/endpoint-interactions.ts"],"names":[],"mappings":"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"}