@zhin.js/adapter-discord 5.0.2 → 5.0.3
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 +41 -0
- package/README.md +46 -77
- package/adapters/discord.ts +46 -0
- package/agent/tools/add_role.ts +2 -2
- package/agent/tools/create_thread.ts +2 -2
- package/agent/tools/forum_post.ts +2 -2
- package/agent/tools/list_roles.ts +2 -2
- package/agent/tools/react.ts +2 -2
- package/agent/tools/remove_role.ts +2 -2
- package/agent/tools/send_embed.ts +2 -2
- package/lib/discord-agent-deps.d.ts +35 -0
- package/lib/discord-agent-deps.js +32 -0
- package/lib/endpoint.d.ts +71 -0
- package/lib/endpoint.js +355 -0
- package/lib/gateway.d.ts +122 -0
- package/lib/gateway.js +235 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +6 -0
- package/lib/platform-permit.d.ts +15 -0
- package/lib/{src/platform-permit.js → platform-permit.js} +1 -2
- package/lib/protocol.d.ts +135 -0
- package/lib/protocol.js +234 -0
- package/lib/webhook.d.ts +13 -0
- package/lib/webhook.js +86 -0
- package/package.json +43 -36
- package/plugin.ts +13 -0
- package/schema.json +63 -0
- package/src/discord-agent-deps.ts +68 -11
- package/src/endpoint.ts +385 -1167
- package/src/gateway.ts +337 -0
- package/src/index.ts +56 -157
- package/src/platform-permit.ts +1 -1
- package/src/protocol.ts +392 -0
- package/src/webhook.ts +121 -0
- package/client/Dashboard.tsx +0 -195
- package/client/index.tsx +0 -11
- package/client/tsconfig.json +0 -7
- package/client/utils/api.ts +0 -30
- package/dist/index.js +0 -29
- package/lib/agent/tools/add_role.js +0 -22
- package/lib/agent/tools/add_role.js.map +0 -1
- package/lib/agent/tools/create_thread.js +0 -23
- package/lib/agent/tools/create_thread.js.map +0 -1
- package/lib/agent/tools/forum_post.js +0 -22
- package/lib/agent/tools/forum_post.js.map +0 -1
- package/lib/agent/tools/list_roles.js +0 -20
- package/lib/agent/tools/list_roles.js.map +0 -1
- package/lib/agent/tools/react.js +0 -20
- package/lib/agent/tools/react.js.map +0 -1
- package/lib/agent/tools/remove_role.js +0 -22
- package/lib/agent/tools/remove_role.js.map +0 -1
- package/lib/agent/tools/send_embed.js +0 -40
- package/lib/agent/tools/send_embed.js.map +0 -1
- package/lib/src/adapter.js +0 -96
- package/lib/src/adapter.js.map +0 -1
- package/lib/src/discord-agent-deps.js +0 -10
- package/lib/src/discord-agent-deps.js.map +0 -1
- package/lib/src/endpoint-interactions.js +0 -284
- package/lib/src/endpoint-interactions.js.map +0 -1
- package/lib/src/endpoint.js +0 -1093
- package/lib/src/endpoint.js.map +0 -1
- package/lib/src/index.js +0 -159
- package/lib/src/index.js.map +0 -1
- package/lib/src/platform-permit.js.map +0 -1
- package/lib/src/segment-mapper.js +0 -2
- package/lib/src/segment-mapper.js.map +0 -1
- package/lib/src/types.js +0 -2
- package/lib/src/types.js.map +0 -1
- package/plugin.yml +0 -3
- package/src/adapter.ts +0 -108
- package/src/endpoint-interactions.ts +0 -354
- package/src/segment-mapper.ts +0 -1
- package/src/types.ts +0 -60
package/client/Dashboard.tsx
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState, useCallback } from 'react'
|
|
2
|
-
import { apiFetch } from './utils/api'
|
|
3
|
-
import { RefreshCw, Server, Wifi, WifiOff, Power, PowerOff, Users, Loader2, Globe } from 'lucide-react'
|
|
4
|
-
|
|
5
|
-
interface EndpointRow {
|
|
6
|
-
name: string
|
|
7
|
-
connected: boolean
|
|
8
|
-
mode: string
|
|
9
|
-
guildCount: number
|
|
10
|
-
channelCount: number
|
|
11
|
-
status: string
|
|
12
|
-
user: { tag: string; id: string } | null
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
interface GuildInfo {
|
|
16
|
-
id: string
|
|
17
|
-
name: string
|
|
18
|
-
memberCount: number
|
|
19
|
-
icon: string | null
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
type Tab = 'overview' | 'guilds'
|
|
23
|
-
|
|
24
|
-
export default function DiscordDashboard() {
|
|
25
|
-
const [endpoints, setEndpoints] = useState<EndpointRow[]>([])
|
|
26
|
-
const [loading, setLoading] = useState(true)
|
|
27
|
-
const [error, setError] = useState('')
|
|
28
|
-
const [tab, setTab] = useState<Tab>('overview')
|
|
29
|
-
const [actionLoading, setActionLoading] = useState<Record<string, boolean>>({})
|
|
30
|
-
|
|
31
|
-
// Guild browser state
|
|
32
|
-
const [selectedEndpoint, setSelectedEndpoint] = useState('')
|
|
33
|
-
const [guilds, setGuilds] = useState<GuildInfo[]>([])
|
|
34
|
-
const [guildsLoading, setGuildsLoading] = useState(false)
|
|
35
|
-
|
|
36
|
-
const fetchData = useCallback(async () => {
|
|
37
|
-
setLoading(true)
|
|
38
|
-
setError('')
|
|
39
|
-
try {
|
|
40
|
-
const res = await apiFetch('/api/discord/endpoints')
|
|
41
|
-
const json = await res.json()
|
|
42
|
-
if (json.success) setEndpoints(json.data)
|
|
43
|
-
else setError(json.error || '获取数据失败')
|
|
44
|
-
} catch {
|
|
45
|
-
setError('无法连接服务器')
|
|
46
|
-
} finally {
|
|
47
|
-
setLoading(false)
|
|
48
|
-
}
|
|
49
|
-
}, [])
|
|
50
|
-
|
|
51
|
-
useEffect(() => { fetchData() }, [fetchData])
|
|
52
|
-
|
|
53
|
-
const toggleConnect = async (name: string, connected: boolean) => {
|
|
54
|
-
setActionLoading(prev => ({ ...prev, [name]: true }))
|
|
55
|
-
try {
|
|
56
|
-
const endpoint = connected ? 'disconnect' : 'connect'
|
|
57
|
-
const res = await apiFetch(`/api/discord/endpoints/${encodeURIComponent(name)}/${endpoint}`, { method: 'POST' })
|
|
58
|
-
const json = await res.json()
|
|
59
|
-
if (!json.success) setError(json.error || '操作失败')
|
|
60
|
-
await fetchData()
|
|
61
|
-
} catch {
|
|
62
|
-
setError('操作失败')
|
|
63
|
-
} finally {
|
|
64
|
-
setActionLoading(prev => ({ ...prev, [name]: false }))
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const loadGuilds = async (endpointName: string) => {
|
|
69
|
-
setSelectedEndpoint(endpointName)
|
|
70
|
-
setGuildsLoading(true)
|
|
71
|
-
setGuilds([])
|
|
72
|
-
try {
|
|
73
|
-
const res = await apiFetch(`/api/discord/endpoints/${encodeURIComponent(endpointName)}/guilds`)
|
|
74
|
-
const json = await res.json()
|
|
75
|
-
if (json.success) setGuilds(json.data)
|
|
76
|
-
else setError(json.error || '获取服务器列表失败')
|
|
77
|
-
} catch {
|
|
78
|
-
setError('获取服务器列表失败')
|
|
79
|
-
} finally {
|
|
80
|
-
setGuildsLoading(false)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const gatewayEndpoints = endpoints.filter((e) => e.connected && e.mode === 'gateway')
|
|
85
|
-
|
|
86
|
-
return (
|
|
87
|
-
<div className="p-6 max-w-5xl mx-auto">
|
|
88
|
-
<div className="flex items-center justify-between mb-6">
|
|
89
|
-
<h1 className="text-2xl font-bold flex items-center gap-2">
|
|
90
|
-
<Server className="w-6 h-6" /> Discord 机器人
|
|
91
|
-
</h1>
|
|
92
|
-
<button onClick={fetchData} disabled={loading}
|
|
93
|
-
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">
|
|
94
|
-
<RefreshCw className={`w-4 h-4 ${loading ? 'animate-spin' : ''}`} /> 刷新
|
|
95
|
-
</button>
|
|
96
|
-
</div>
|
|
97
|
-
|
|
98
|
-
{error && <div className="mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200">{error}</div>}
|
|
99
|
-
|
|
100
|
-
{/* Tabs */}
|
|
101
|
-
<div className="flex gap-1 mb-6 border-b">
|
|
102
|
-
<button onClick={() => setTab('overview')}
|
|
103
|
-
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${tab === 'overview' ? 'border-indigo-500 text-indigo-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
|
104
|
-
概览
|
|
105
|
-
</button>
|
|
106
|
-
<button onClick={() => setTab('guilds')}
|
|
107
|
-
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${tab === 'guilds' ? 'border-indigo-500 text-indigo-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
|
108
|
-
服务器列表
|
|
109
|
-
</button>
|
|
110
|
-
</div>
|
|
111
|
-
|
|
112
|
-
{/* Overview Tab */}
|
|
113
|
-
{tab === 'overview' && (
|
|
114
|
-
<>
|
|
115
|
-
{!loading && !endpoints.length && !error && (
|
|
116
|
-
<div className="text-center text-gray-500 py-12">暂无 Discord Endpoint 实例</div>
|
|
117
|
-
)}
|
|
118
|
-
<div className="grid gap-4 md:grid-cols-2">
|
|
119
|
-
{endpoints.map((endpoint) => (
|
|
120
|
-
<div key={endpoint.name} className="border rounded-lg p-4 bg-card shadow-sm">
|
|
121
|
-
<div className="flex items-center justify-between mb-3">
|
|
122
|
-
<span className="font-medium text-lg">{endpoint.name}</span>
|
|
123
|
-
{endpoint.connected
|
|
124
|
-
? <span className="flex items-center gap-1 text-green-600 text-sm"><Wifi className="w-4 h-4" /> 在线</span>
|
|
125
|
-
: <span className="flex items-center gap-1 text-gray-400 text-sm"><WifiOff className="w-4 h-4" /> 离线</span>}
|
|
126
|
-
</div>
|
|
127
|
-
{endpoint.user && <div className="text-sm text-gray-500 mb-2">@{endpoint.user.tag}</div>}
|
|
128
|
-
<div className="grid grid-cols-2 gap-2 text-sm text-gray-600 mb-3">
|
|
129
|
-
<div className="flex justify-between"><span>模式</span><span className="font-mono">{endpoint.mode}</span></div>
|
|
130
|
-
<div className="flex justify-between"><span>服务器</span><span className="font-mono">{endpoint.guildCount}</span></div>
|
|
131
|
-
<div className="flex justify-between"><span>频道</span><span className="font-mono">{endpoint.channelCount}</span></div>
|
|
132
|
-
</div>
|
|
133
|
-
<div className="flex gap-2">
|
|
134
|
-
<button
|
|
135
|
-
onClick={() => toggleConnect(endpoint.name, endpoint.connected)}
|
|
136
|
-
disabled={actionLoading[endpoint.name]}
|
|
137
|
-
className={`flex items-center gap-1 px-3 py-1.5 rounded text-sm text-white ${endpoint.connected ? 'bg-red-500 hover:bg-red-600' : 'bg-green-500 hover:bg-green-600'} disabled:opacity-50`}>
|
|
138
|
-
{actionLoading[endpoint.name]
|
|
139
|
-
? <Loader2 className="w-3.5 h-3.5 animate-spin" />
|
|
140
|
-
: endpoint.connected ? <PowerOff className="w-3.5 h-3.5" /> : <Power className="w-3.5 h-3.5" />}
|
|
141
|
-
{endpoint.connected ? '断开' : '连接'}
|
|
142
|
-
</button>
|
|
143
|
-
{endpoint.connected && endpoint.mode === 'gateway' && (
|
|
144
|
-
<button onClick={() => { setTab('guilds'); loadGuilds(endpoint.name) }}
|
|
145
|
-
className="flex items-center gap-1 px-3 py-1.5 rounded text-sm bg-gray-100 hover:bg-gray-200 text-gray-700">
|
|
146
|
-
<Globe className="w-3.5 h-3.5" /> 查看服务器
|
|
147
|
-
</button>
|
|
148
|
-
)}
|
|
149
|
-
</div>
|
|
150
|
-
</div>
|
|
151
|
-
))}
|
|
152
|
-
</div>
|
|
153
|
-
</>
|
|
154
|
-
)}
|
|
155
|
-
|
|
156
|
-
{/* Guilds Tab */}
|
|
157
|
-
{tab === 'guilds' && (
|
|
158
|
-
<div>
|
|
159
|
-
{gatewayEndpoints.length > 0 && (
|
|
160
|
-
<div className="mb-4 flex items-center gap-2">
|
|
161
|
-
<label className="text-sm text-gray-500">选择机器人:</label>
|
|
162
|
-
<select value={selectedEndpoint} onChange={(e) => loadGuilds(e.target.value)}
|
|
163
|
-
className="border rounded px-2 py-1 text-sm">
|
|
164
|
-
<option value="">--</option>
|
|
165
|
-
{gatewayEndpoints.map((e) => <option key={e.name} value={e.name}>{e.name}</option>)}
|
|
166
|
-
</select>
|
|
167
|
-
<span className="text-xs text-gray-400 ml-2">仅 Gateway 模式支持</span>
|
|
168
|
-
</div>
|
|
169
|
-
)}
|
|
170
|
-
{!gatewayEndpoints.length && <div className="text-center text-gray-500 py-8">暂无 Gateway 模式在线 Endpoint</div>}
|
|
171
|
-
{guildsLoading && <div className="flex justify-center py-8"><Loader2 className="w-6 h-6 animate-spin text-indigo-500" /></div>}
|
|
172
|
-
|
|
173
|
-
{!guildsLoading && guilds.length > 0 && (
|
|
174
|
-
<div className="grid gap-3 md:grid-cols-2 lg:grid-cols-3">
|
|
175
|
-
{guilds.map(g => (
|
|
176
|
-
<div key={g.id} className="border rounded-lg p-3 bg-card shadow-sm flex items-center gap-3">
|
|
177
|
-
{g.icon
|
|
178
|
-
? <img src={g.icon} alt="" className="w-10 h-10 rounded-full" />
|
|
179
|
-
: <div className="w-10 h-10 rounded-full bg-indigo-100 flex items-center justify-center text-indigo-500 font-bold text-sm">{g.name[0]}</div>}
|
|
180
|
-
<div className="flex-1 min-w-0">
|
|
181
|
-
<div className="font-medium text-sm truncate">{g.name}</div>
|
|
182
|
-
<div className="flex items-center gap-1 text-xs text-gray-400">
|
|
183
|
-
<Users className="w-3 h-3" /> {g.memberCount} 成员
|
|
184
|
-
</div>
|
|
185
|
-
</div>
|
|
186
|
-
</div>
|
|
187
|
-
))}
|
|
188
|
-
</div>
|
|
189
|
-
)}
|
|
190
|
-
{!guildsLoading && selectedEndpoint && !guilds.length && <div className="text-center text-gray-400 py-8">该机器人未加入任何服务器</div>}
|
|
191
|
-
</div>
|
|
192
|
-
)}
|
|
193
|
-
</div>
|
|
194
|
-
)
|
|
195
|
-
}
|
package/client/index.tsx
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { PluginRegisterHostApi } from '@zhin.js/contract'
|
|
2
|
-
import DiscordDashboard from './Dashboard'
|
|
3
|
-
|
|
4
|
-
export function register(api: PluginRegisterHostApi) {
|
|
5
|
-
api.addRoute({
|
|
6
|
-
path: '/console/discord',
|
|
7
|
-
name: 'Discord',
|
|
8
|
-
element: api.React.createElement(DiscordDashboard, { hostReact: api.React }),
|
|
9
|
-
})
|
|
10
|
-
api.addTool({ id: 'discord', name: 'Discord', path: '/console/discord' })
|
|
11
|
-
}
|
package/client/tsconfig.json
DELETED
package/client/utils/api.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
const TOKEN_KEY = "zhin_api_token";
|
|
2
|
-
const API_BASE_KEY = "zhin_api_base";
|
|
3
|
-
|
|
4
|
-
export function getApiBase(): string {
|
|
5
|
-
const stored = localStorage.getItem(API_BASE_KEY)?.trim();
|
|
6
|
-
if (stored) return stored.replace(/\/$/, "");
|
|
7
|
-
if (typeof window !== "undefined") return window.location.origin;
|
|
8
|
-
return "";
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function getToken(): string | null {
|
|
12
|
-
return localStorage.getItem(TOKEN_KEY);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export async function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
|
|
16
|
-
const token = getToken();
|
|
17
|
-
const headers = new Headers(init?.headers);
|
|
18
|
-
if (token) headers.set("Authorization", `Bearer ${token}`);
|
|
19
|
-
|
|
20
|
-
const base = getApiBase();
|
|
21
|
-
const url =
|
|
22
|
-
typeof input === "string" && input.startsWith("/") ? `${base}${input}` : input;
|
|
23
|
-
|
|
24
|
-
const res = await fetch(url, { ...init, headers });
|
|
25
|
-
if (res.status === 401) {
|
|
26
|
-
localStorage.removeItem(TOKEN_KEY);
|
|
27
|
-
window.dispatchEvent(new CustomEvent("zhin:auth-required"));
|
|
28
|
-
}
|
|
29
|
-
return res;
|
|
30
|
-
}
|
package/dist/index.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
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
|
-
/*! Bundled license information:
|
|
3
|
-
|
|
4
|
-
lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
|
|
5
|
-
lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs:
|
|
6
|
-
lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs:
|
|
7
|
-
lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs:
|
|
8
|
-
lucide-react/dist/esm/defaultAttributes.mjs:
|
|
9
|
-
lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs:
|
|
10
|
-
lucide-react/dist/esm/context.mjs:
|
|
11
|
-
lucide-react/dist/esm/Icon.mjs:
|
|
12
|
-
lucide-react/dist/esm/createLucideIcon.mjs:
|
|
13
|
-
lucide-react/dist/esm/icons/globe.mjs:
|
|
14
|
-
lucide-react/dist/esm/icons/loader-circle.mjs:
|
|
15
|
-
lucide-react/dist/esm/icons/power-off.mjs:
|
|
16
|
-
lucide-react/dist/esm/icons/power.mjs:
|
|
17
|
-
lucide-react/dist/esm/icons/refresh-cw.mjs:
|
|
18
|
-
lucide-react/dist/esm/icons/server.mjs:
|
|
19
|
-
lucide-react/dist/esm/icons/users.mjs:
|
|
20
|
-
lucide-react/dist/esm/icons/wifi-off.mjs:
|
|
21
|
-
lucide-react/dist/esm/icons/wifi.mjs:
|
|
22
|
-
lucide-react/dist/esm/lucide-react.mjs:
|
|
23
|
-
(**
|
|
24
|
-
* @license lucide-react v1.23.0 - ISC
|
|
25
|
-
*
|
|
26
|
-
* This source code is licensed under the ISC license.
|
|
27
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
28
|
-
*)
|
|
29
|
-
*/
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/lib/agent/tools/react.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/lib/src/adapter.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Discord 适配器:单一适配器支持 Gateway / Interactions,由 config.connection 区分
|
|
3
|
-
*/
|
|
4
|
-
import { Adapter, OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL } from 'zhin.js';
|
|
5
|
-
import { DiscordEndpoint } from "./endpoint.js";
|
|
6
|
-
import { DiscordInteractionsEndpoint } from "./endpoint-interactions.js";
|
|
7
|
-
function isGatewayBot(endpoint) {
|
|
8
|
-
return endpoint.$config.connection === "gateway";
|
|
9
|
-
}
|
|
10
|
-
export class DiscordAdapter extends Adapter {
|
|
11
|
-
static capabilities = ['inbound', 'outbound'];
|
|
12
|
-
static outboundRichSegmentPolicy = OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL;
|
|
13
|
-
static interactivePolicy = 'native';
|
|
14
|
-
#router;
|
|
15
|
-
constructor(plugin) {
|
|
16
|
-
super(plugin, "discord", []);
|
|
17
|
-
}
|
|
18
|
-
createEndpoint(config) {
|
|
19
|
-
const connection = config.connection ?? "gateway";
|
|
20
|
-
switch (connection) {
|
|
21
|
-
case "gateway":
|
|
22
|
-
return new DiscordEndpoint(this, config);
|
|
23
|
-
case "interactions":
|
|
24
|
-
if (!this.#router) {
|
|
25
|
-
throw new Error("Discord connection: interactions 需要 router,请安装并在配置中启用 @zhin.js/host-router");
|
|
26
|
-
}
|
|
27
|
-
return new DiscordInteractionsEndpoint(this, this.#router, config);
|
|
28
|
-
default:
|
|
29
|
-
throw new Error(`Unknown Discord connection: ${config.connection}`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
async removeMember(endpointId, sceneId, userId) {
|
|
33
|
-
const endpoint = this.endpoints.get(endpointId);
|
|
34
|
-
if (!endpoint)
|
|
35
|
-
throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
36
|
-
if (!isGatewayBot(endpoint))
|
|
37
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
38
|
-
return endpoint.kickMember(sceneId, userId);
|
|
39
|
-
}
|
|
40
|
-
async banMember(endpointId, sceneId, userId, reason) {
|
|
41
|
-
const endpoint = this.endpoints.get(endpointId);
|
|
42
|
-
if (!endpoint)
|
|
43
|
-
throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
44
|
-
if (!isGatewayBot(endpoint))
|
|
45
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
46
|
-
return endpoint.banMember(sceneId, userId, reason);
|
|
47
|
-
}
|
|
48
|
-
async unbanMember(endpointId, sceneId, userId) {
|
|
49
|
-
const endpoint = this.endpoints.get(endpointId);
|
|
50
|
-
if (!endpoint)
|
|
51
|
-
throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
52
|
-
if (!isGatewayBot(endpoint))
|
|
53
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
54
|
-
return endpoint.unbanMember(sceneId, userId);
|
|
55
|
-
}
|
|
56
|
-
async muteMember(endpointId, sceneId, userId, duration = 600) {
|
|
57
|
-
const endpoint = this.endpoints.get(endpointId);
|
|
58
|
-
if (!endpoint)
|
|
59
|
-
throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
60
|
-
if (!isGatewayBot(endpoint))
|
|
61
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
62
|
-
return endpoint.timeoutMember(sceneId, userId, duration);
|
|
63
|
-
}
|
|
64
|
-
async setMemberNickname(endpointId, sceneId, userId, nickname) {
|
|
65
|
-
const endpoint = this.endpoints.get(endpointId);
|
|
66
|
-
if (!endpoint)
|
|
67
|
-
throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
68
|
-
if (!isGatewayBot(endpoint))
|
|
69
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
70
|
-
return endpoint.setNickname(sceneId, userId, nickname);
|
|
71
|
-
}
|
|
72
|
-
async listMembers(endpointId, sceneId) {
|
|
73
|
-
const endpoint = this.endpoints.get(endpointId);
|
|
74
|
-
if (!endpoint)
|
|
75
|
-
throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
76
|
-
if (!isGatewayBot(endpoint))
|
|
77
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
78
|
-
return endpoint.getMembers(sceneId);
|
|
79
|
-
}
|
|
80
|
-
async getSceneInfo(endpointId, sceneId) {
|
|
81
|
-
const endpoint = this.endpoints.get(endpointId);
|
|
82
|
-
if (!endpoint)
|
|
83
|
-
throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
84
|
-
if (!isGatewayBot(endpoint))
|
|
85
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
86
|
-
return endpoint.getGuildInfo(sceneId);
|
|
87
|
-
}
|
|
88
|
-
async start() {
|
|
89
|
-
this.#router = this.plugin.inject("router");
|
|
90
|
-
this.plugin.useContext("router", (router) => {
|
|
91
|
-
this.#router = router;
|
|
92
|
-
});
|
|
93
|
-
await super.start();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=adapter.js.map
|
package/lib/src/adapter.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|