@zhin.js/adapter-qq 5.0.2 → 6.0.0
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 +72 -0
- package/README.md +75 -409
- package/adapters/qq.ts +51 -0
- package/agent/tools/add_role.ts +2 -2
- package/agent/tools/channel_info.ts +2 -2
- package/agent/tools/create_role.ts +2 -2
- package/agent/tools/list_channels.ts +2 -2
- package/agent/tools/list_guilds.ts +2 -2
- package/agent/tools/list_roles.ts +2 -2
- package/agent/tools/member_detail.ts +2 -2
- package/agent/tools/remove_role.ts +2 -2
- package/commands/endpoint/add/[name:string=].ts +21 -0
- package/commands/endpoint/cancel.ts +15 -0
- package/commands/endpoint/list.ts +10 -0
- package/commands/endpoint/remove/[name:string].ts +15 -0
- package/lib/endpoint.d.ts +75 -0
- package/lib/endpoint.js +358 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +6 -0
- package/lib/platform-permit.d.ts +16 -0
- package/lib/{src/platform-permit.js → platform-permit.js} +1 -2
- package/lib/protocol.d.ts +96 -0
- package/lib/protocol.js +129 -0
- package/lib/qq-agent-deps.d.ts +21 -0
- package/lib/qq-agent-deps.js +30 -0
- package/lib/qq-bind-api.d.ts +36 -0
- package/lib/{src/qq-bind-api.js → qq-bind-api.js} +0 -1
- package/lib/qq-bind-flow.d.ts +19 -0
- package/lib/{src/qq-bind-flow.js → qq-bind-flow.js} +0 -1
- package/lib/qq-bind-persist.d.ts +12 -0
- package/lib/{src/qq-bind-persist.js → qq-bind-persist.js} +4 -5
- package/lib/qq-endpoint-commands.d.ts +25 -0
- package/lib/qq-endpoint-commands.js +147 -0
- package/lib/qq-endpoint-config.d.ts +17 -0
- package/lib/qq-endpoint-config.js +110 -0
- package/lib/qq-runtime-state.d.ts +17 -0
- package/lib/qq-runtime-state.js +13 -0
- package/lib/webhook.d.ts +18 -0
- package/lib/webhook.js +100 -0
- package/lib/ws.d.ts +24 -0
- package/lib/ws.js +118 -0
- package/package.json +51 -40
- package/plugin.ts +16 -0
- package/schema.json +85 -0
- package/src/endpoint.ts +362 -596
- package/src/index.ts +56 -186
- package/src/platform-permit.ts +1 -1
- package/src/protocol.ts +229 -0
- package/src/qq-agent-deps.ts +49 -12
- package/src/qq-bind-persist.ts +4 -4
- package/src/qq-endpoint-commands.ts +174 -0
- package/src/qq-endpoint-config.ts +135 -0
- package/src/qq-runtime-state.ts +36 -0
- package/src/webhook.ts +127 -0
- package/src/ws.ts +172 -0
- package/client/Dashboard.tsx +0 -230
- package/client/index.tsx +0 -11
- package/client/tsconfig.json +0 -7
- package/client/utils/api.ts +0 -30
- package/dist/index.js +0 -30
- package/lib/agent/tools/add_role.js +0 -23
- package/lib/agent/tools/add_role.js.map +0 -1
- package/lib/agent/tools/channel_info.js +0 -19
- package/lib/agent/tools/channel_info.js.map +0 -1
- package/lib/agent/tools/create_role.js +0 -22
- package/lib/agent/tools/create_role.js.map +0 -1
- package/lib/agent/tools/list_channels.js +0 -20
- package/lib/agent/tools/list_channels.js.map +0 -1
- package/lib/agent/tools/list_guilds.js +0 -17
- package/lib/agent/tools/list_guilds.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/member_detail.js +0 -20
- package/lib/agent/tools/member_detail.js.map +0 -1
- package/lib/agent/tools/remove_role.js +0 -23
- package/lib/agent/tools/remove_role.js.map +0 -1
- package/lib/package.json +0 -105
- package/lib/src/adapter.js +0 -81
- package/lib/src/adapter.js.map +0 -1
- package/lib/src/endpoint.js +0 -600
- package/lib/src/endpoint.js.map +0 -1
- package/lib/src/gateway-config.js +0 -32
- package/lib/src/gateway-config.js.map +0 -1
- package/lib/src/group-at-normalize.js +0 -68
- package/lib/src/group-at-normalize.js.map +0 -1
- package/lib/src/inbound-action.js +0 -57
- package/lib/src/inbound-action.js.map +0 -1
- package/lib/src/inbound-normalize.js +0 -47
- package/lib/src/inbound-normalize.js.map +0 -1
- package/lib/src/index.js +0 -194
- package/lib/src/index.js.map +0 -1
- package/lib/src/mention-enrich.js +0 -52
- package/lib/src/mention-enrich.js.map +0 -1
- package/lib/src/outbound-keyboard.js +0 -100
- package/lib/src/outbound-keyboard.js.map +0 -1
- package/lib/src/outbound-markdown.js +0 -189
- package/lib/src/outbound-markdown.js.map +0 -1
- package/lib/src/outbound-media.js +0 -51
- package/lib/src/outbound-media.js.map +0 -1
- package/lib/src/outbound-mixed-media.js +0 -78
- package/lib/src/outbound-mixed-media.js.map +0 -1
- package/lib/src/platform-permit.js.map +0 -1
- package/lib/src/qq-agent-deps.js +0 -10
- package/lib/src/qq-agent-deps.js.map +0 -1
- package/lib/src/qq-bind-api.js.map +0 -1
- package/lib/src/qq-bind-flow.js.map +0 -1
- package/lib/src/qq-bind-persist.js.map +0 -1
- package/lib/src/qq-endpoint-manager.js +0 -159
- package/lib/src/qq-endpoint-manager.js.map +0 -1
- package/lib/src/sdk-version.js +0 -19
- package/lib/src/sdk-version.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 -97
- package/src/gateway-config.ts +0 -48
- package/src/group-at-normalize.ts +0 -75
- package/src/inbound-action.ts +0 -87
- package/src/inbound-normalize.ts +0 -57
- package/src/mention-enrich.ts +0 -71
- package/src/outbound-keyboard.ts +0 -117
- package/src/outbound-markdown.ts +0 -212
- package/src/outbound-media.ts +0 -58
- package/src/outbound-mixed-media.ts +0 -101
- package/src/qq-endpoint-manager.ts +0 -199
- package/src/sdk-version.ts +0 -21
- package/src/segment-mapper.ts +0 -1
- package/src/types.ts +0 -52
package/client/Dashboard.tsx
DELETED
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState, useCallback } from 'react'
|
|
2
|
-
import { apiFetch } from './utils/api'
|
|
3
|
-
import { RefreshCw, Server, Wifi, WifiOff, Power, PowerOff, ChevronRight, ChevronDown, Hash, Loader2 } from 'lucide-react'
|
|
4
|
-
|
|
5
|
-
interface EndpointRow {
|
|
6
|
-
name: string
|
|
7
|
-
connected: boolean
|
|
8
|
-
guildCount: number
|
|
9
|
-
status: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
interface Guild {
|
|
13
|
-
id: string
|
|
14
|
-
name: string
|
|
15
|
-
icon?: string
|
|
16
|
-
description?: string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
interface Channel {
|
|
20
|
-
id: string
|
|
21
|
-
name: string
|
|
22
|
-
type?: number
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
type Tab = 'overview' | 'guilds'
|
|
26
|
-
|
|
27
|
-
export default function QQDashboard() {
|
|
28
|
-
const [endpoints, setEndpoints] = useState<EndpointRow[]>([])
|
|
29
|
-
const [loading, setLoading] = useState(true)
|
|
30
|
-
const [error, setError] = useState('')
|
|
31
|
-
const [tab, setTab] = useState<Tab>('overview')
|
|
32
|
-
const [actionLoading, setActionLoading] = useState<Record<string, boolean>>({})
|
|
33
|
-
|
|
34
|
-
// Guild browser state
|
|
35
|
-
const [selectedEndpoint, setSelectedEndpoint] = useState('')
|
|
36
|
-
const [guilds, setGuilds] = useState<Guild[]>([])
|
|
37
|
-
const [guildsLoading, setGuildsLoading] = useState(false)
|
|
38
|
-
const [expandedGuild, setExpandedGuild] = useState<string | null>(null)
|
|
39
|
-
const [channels, setChannels] = useState<Record<string, Channel[]>>({})
|
|
40
|
-
const [channelsLoading, setChannelsLoading] = useState<string | null>(null)
|
|
41
|
-
|
|
42
|
-
const fetchData = useCallback(async () => {
|
|
43
|
-
setLoading(true)
|
|
44
|
-
setError('')
|
|
45
|
-
try {
|
|
46
|
-
const res = await apiFetch('/api/qq/endpoints')
|
|
47
|
-
const json = await res.json()
|
|
48
|
-
if (json.success) setEndpoints(json.data)
|
|
49
|
-
else setError(json.error || '获取数据失败')
|
|
50
|
-
} catch {
|
|
51
|
-
setError('无法连接服务器')
|
|
52
|
-
} finally {
|
|
53
|
-
setLoading(false)
|
|
54
|
-
}
|
|
55
|
-
}, [])
|
|
56
|
-
|
|
57
|
-
useEffect(() => { fetchData() }, [fetchData])
|
|
58
|
-
|
|
59
|
-
const toggleConnect = async (name: string, connected: boolean) => {
|
|
60
|
-
setActionLoading(prev => ({ ...prev, [name]: true }))
|
|
61
|
-
try {
|
|
62
|
-
const endpoint = connected ? 'disconnect' : 'connect'
|
|
63
|
-
const res = await apiFetch(`/api/qq/endpoints/${encodeURIComponent(name)}/${endpoint}`, { method: 'POST' })
|
|
64
|
-
const json = await res.json()
|
|
65
|
-
if (!json.success) setError(json.error || '操作失败')
|
|
66
|
-
await fetchData()
|
|
67
|
-
} catch {
|
|
68
|
-
setError('操作失败')
|
|
69
|
-
} finally {
|
|
70
|
-
setActionLoading(prev => ({ ...prev, [name]: false }))
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const loadGuilds = async (endpointName: string) => {
|
|
75
|
-
setSelectedEndpoint(endpointName)
|
|
76
|
-
setGuildsLoading(true)
|
|
77
|
-
setGuilds([])
|
|
78
|
-
setExpandedGuild(null)
|
|
79
|
-
setChannels({})
|
|
80
|
-
try {
|
|
81
|
-
const res = await apiFetch(`/api/qq/endpoints/${encodeURIComponent(endpointName)}/guilds`)
|
|
82
|
-
const json = await res.json()
|
|
83
|
-
if (json.success) setGuilds(json.data)
|
|
84
|
-
else setError(json.error || '获取频道失败')
|
|
85
|
-
} catch {
|
|
86
|
-
setError('获取频道失败')
|
|
87
|
-
} finally {
|
|
88
|
-
setGuildsLoading(false)
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const toggleGuild = async (guildId: string) => {
|
|
93
|
-
if (expandedGuild === guildId) { setExpandedGuild(null); return }
|
|
94
|
-
setExpandedGuild(guildId)
|
|
95
|
-
if (channels[guildId]) return
|
|
96
|
-
setChannelsLoading(guildId)
|
|
97
|
-
try {
|
|
98
|
-
const res = await apiFetch(`/api/qq/endpoints/${encodeURIComponent(selectedEndpoint)}/guilds/${encodeURIComponent(guildId)}/channels`)
|
|
99
|
-
const json = await res.json()
|
|
100
|
-
if (json.success) setChannels(prev => ({ ...prev, [guildId]: json.data }))
|
|
101
|
-
} catch { /* ignore */ } finally {
|
|
102
|
-
setChannelsLoading(null)
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const onlineEndpoints = endpoints.filter((e) => e.connected)
|
|
107
|
-
|
|
108
|
-
return (
|
|
109
|
-
<div className="p-6 max-w-5xl mx-auto">
|
|
110
|
-
{/* Header */}
|
|
111
|
-
<div className="flex items-center justify-between mb-6">
|
|
112
|
-
<h1 className="text-2xl font-bold flex items-center gap-2">
|
|
113
|
-
<Server className="w-6 h-6" /> QQ 官方机器人
|
|
114
|
-
</h1>
|
|
115
|
-
<button onClick={fetchData} disabled={loading}
|
|
116
|
-
className="flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm">
|
|
117
|
-
<RefreshCw className={`w-4 h-4 ${loading ? 'animate-spin' : ''}`} /> 刷新
|
|
118
|
-
</button>
|
|
119
|
-
</div>
|
|
120
|
-
|
|
121
|
-
{error && <div className="mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200">{error}</div>}
|
|
122
|
-
|
|
123
|
-
{/* Tabs */}
|
|
124
|
-
<div className="flex gap-1 mb-6 border-b">
|
|
125
|
-
<button onClick={() => setTab('overview')}
|
|
126
|
-
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${tab === 'overview' ? 'border-blue-500 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
|
127
|
-
概览
|
|
128
|
-
</button>
|
|
129
|
-
<button onClick={() => setTab('guilds')}
|
|
130
|
-
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${tab === 'guilds' ? 'border-blue-500 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
|
131
|
-
频道浏览
|
|
132
|
-
</button>
|
|
133
|
-
</div>
|
|
134
|
-
|
|
135
|
-
{/* Overview Tab */}
|
|
136
|
-
{tab === 'overview' && (
|
|
137
|
-
<>
|
|
138
|
-
{!loading && !endpoints.length && !error && (
|
|
139
|
-
<div className="text-center text-gray-500 py-12">暂无 QQ Endpoint 实例</div>
|
|
140
|
-
)}
|
|
141
|
-
<div className="grid gap-4 md:grid-cols-2">
|
|
142
|
-
{endpoints.map((endpoint) => (
|
|
143
|
-
<div key={endpoint.name} className="border rounded-lg p-4 bg-card shadow-sm">
|
|
144
|
-
<div className="flex items-center justify-between mb-3">
|
|
145
|
-
<span className="font-medium text-lg">{endpoint.name}</span>
|
|
146
|
-
{endpoint.connected
|
|
147
|
-
? <span className="flex items-center gap-1 text-green-600 text-sm"><Wifi className="w-4 h-4" /> 在线</span>
|
|
148
|
-
: <span className="flex items-center gap-1 text-gray-400 text-sm"><WifiOff className="w-4 h-4" /> 离线</span>}
|
|
149
|
-
</div>
|
|
150
|
-
<div className="grid grid-cols-1 gap-2 text-sm text-gray-600 mb-3">
|
|
151
|
-
<div className="flex justify-between"><span>频道数</span><span className="font-mono">{endpoint.guildCount}</span></div>
|
|
152
|
-
</div>
|
|
153
|
-
<div className="flex gap-2">
|
|
154
|
-
<button
|
|
155
|
-
onClick={() => toggleConnect(endpoint.name, endpoint.connected)}
|
|
156
|
-
disabled={actionLoading[endpoint.name]}
|
|
157
|
-
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`}>
|
|
158
|
-
{actionLoading[endpoint.name]
|
|
159
|
-
? <Loader2 className="w-3.5 h-3.5 animate-spin" />
|
|
160
|
-
: endpoint.connected ? <PowerOff className="w-3.5 h-3.5" /> : <Power className="w-3.5 h-3.5" />}
|
|
161
|
-
{endpoint.connected ? '断开' : '连接'}
|
|
162
|
-
</button>
|
|
163
|
-
{endpoint.connected && (
|
|
164
|
-
<button onClick={() => { setTab('guilds'); loadGuilds(endpoint.name) }}
|
|
165
|
-
className="flex items-center gap-1 px-3 py-1.5 rounded text-sm bg-gray-100 hover:bg-gray-200 text-gray-700">
|
|
166
|
-
<Hash className="w-3.5 h-3.5" /> 浏览频道
|
|
167
|
-
</button>
|
|
168
|
-
)}
|
|
169
|
-
</div>
|
|
170
|
-
</div>
|
|
171
|
-
))}
|
|
172
|
-
</div>
|
|
173
|
-
</>
|
|
174
|
-
)}
|
|
175
|
-
|
|
176
|
-
{/* Guilds Tab */}
|
|
177
|
-
{tab === 'guilds' && (
|
|
178
|
-
<div>
|
|
179
|
-
{/* Endpoint selector */}
|
|
180
|
-
{onlineEndpoints.length > 0 && (
|
|
181
|
-
<div className="mb-4 flex items-center gap-2">
|
|
182
|
-
<label className="text-sm text-gray-500">选择机器人:</label>
|
|
183
|
-
<select value={selectedEndpoint} onChange={(e) => loadGuilds(e.target.value)}
|
|
184
|
-
className="border rounded px-2 py-1 text-sm">
|
|
185
|
-
<option value="">--</option>
|
|
186
|
-
{onlineEndpoints.map((e) => <option key={e.name} value={e.name}>{e.name}</option>)}
|
|
187
|
-
</select>
|
|
188
|
-
</div>
|
|
189
|
-
)}
|
|
190
|
-
{!onlineEndpoints.length && <div className="text-center text-gray-500 py-8">暂无在线 Endpoint</div>}
|
|
191
|
-
{guildsLoading && <div className="flex justify-center py-8"><Loader2 className="w-6 h-6 animate-spin text-blue-500" /></div>}
|
|
192
|
-
|
|
193
|
-
{/* Guild → Channel tree */}
|
|
194
|
-
{!guildsLoading && guilds.length > 0 && (
|
|
195
|
-
<div className="border rounded-lg bg-card shadow-sm divide-y">
|
|
196
|
-
{guilds.map((g) => (
|
|
197
|
-
<div key={g.id}>
|
|
198
|
-
<button onClick={() => toggleGuild(g.id)}
|
|
199
|
-
className="w-full flex items-center gap-2 px-4 py-3 hover:bg-gray-50 text-left">
|
|
200
|
-
{expandedGuild === g.id ? <ChevronDown className="w-4 h-4 text-gray-400" /> : <ChevronRight className="w-4 h-4 text-gray-400" />}
|
|
201
|
-
<span className="font-medium">{g.name}</span>
|
|
202
|
-
<span className="text-xs text-gray-400 ml-auto">{g.id}</span>
|
|
203
|
-
</button>
|
|
204
|
-
{expandedGuild === g.id && (
|
|
205
|
-
<div className="px-4 pb-3">
|
|
206
|
-
{channelsLoading === g.id
|
|
207
|
-
? <div className="flex items-center gap-2 text-gray-400 text-sm py-2 pl-6"><Loader2 className="w-4 h-4 animate-spin" /> 加载中…</div>
|
|
208
|
-
: channels[g.id]?.length
|
|
209
|
-
? <div className="pl-6 space-y-1">
|
|
210
|
-
{channels[g.id].map(ch => (
|
|
211
|
-
<div key={ch.id} className="flex items-center gap-2 text-sm text-gray-600 py-1">
|
|
212
|
-
<Hash className="w-3.5 h-3.5 text-gray-400" />
|
|
213
|
-
<span>{ch.name}</span>
|
|
214
|
-
<span className="text-xs text-gray-400 ml-auto">{ch.id}</span>
|
|
215
|
-
</div>
|
|
216
|
-
))}
|
|
217
|
-
</div>
|
|
218
|
-
: <div className="pl-6 text-sm text-gray-400 py-1">无子频道</div>}
|
|
219
|
-
</div>
|
|
220
|
-
)}
|
|
221
|
-
</div>
|
|
222
|
-
))}
|
|
223
|
-
</div>
|
|
224
|
-
)}
|
|
225
|
-
{!guildsLoading && selectedEndpoint && !guilds.length && <div className="text-center text-gray-400 py-8">该机器人未加入任何频道</div>}
|
|
226
|
-
</div>
|
|
227
|
-
)}
|
|
228
|
-
</div>
|
|
229
|
-
)
|
|
230
|
-
}
|
package/client/index.tsx
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { PluginRegisterHostApi } from '@zhin.js/contract'
|
|
2
|
-
import QQDashboard from './Dashboard'
|
|
3
|
-
|
|
4
|
-
export function register(api: PluginRegisterHostApi) {
|
|
5
|
-
api.addRoute({
|
|
6
|
-
path: '/console/qq',
|
|
7
|
-
name: 'QQ官方',
|
|
8
|
-
element: api.React.createElement(QQDashboard, { hostReact: api.React }),
|
|
9
|
-
})
|
|
10
|
-
api.addTool({ id: 'qq', name: 'QQ官方', path: '/console/qq' })
|
|
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,30 +0,0 @@
|
|
|
1
|
-
import{useEffect as we,useState as c,useCallback as Pe}from"react";var Q="zhin_api_token",ue="zhin_api_base";function de(){let t=localStorage.getItem(ue)?.trim();return t?t.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function le(){return localStorage.getItem(Q)}async function k(t,o){let l=le(),s=new Headers(o?.headers);l&&s.set("Authorization",`Bearer ${l}`);let p=de(),f=typeof t=="string"&&t.startsWith("/")?`${p}${t}`:t,m=await fetch(f,{...o,headers:s});return m.status===401&&(localStorage.removeItem(Q),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),m}import{forwardRef as ce,createElement as ne}from"react";var v=(...t)=>t.filter((o,l,s)=>!!o&&o.trim()!==""&&s.indexOf(o)===l).join(" ").trim();var J=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var _=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(o,l,s)=>s?s.toUpperCase():l.toLowerCase());var E=t=>{let o=_(t);return o.charAt(0).toUpperCase()+o.slice(1)};import{forwardRef as ie,createElement as Y}from"react";var U={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var j=t=>{for(let o in t)if(o.startsWith("aria-")||o==="role"||o==="title")return!0;return!1};import{createContext as fe,useContext as se,useMemo as ve,createElement as Ue}from"react";var re=fe({});var $=()=>se(re);var ee=ie(({color:t,size:o,strokeWidth:l,absoluteStrokeWidth:s,className:p="",children:f,iconNode:m,...L},R)=>{let{size:I=24,strokeWidth:x=2,absoluteStrokeWidth:O=!1,color:h="currentColor",className:q=""}=$()??{},S=s??O?Number(l??x)*24/Number(o??I):l??x;return Y("svg",{ref:R,...U,width:o??I??U.width,height:o??I??U.height,stroke:t??h,strokeWidth:S,className:v("lucide",q,p),...!f&&!j(L)&&{"aria-hidden":"true"},...L},[...m.map(([T,g])=>Y(T,g)),...Array.isArray(f)?f:[f]])});var d=(t,o)=>{let l=ce(({className:s,...p},f)=>ne(ee,{ref:f,iconNode:o,className:v(`lucide-${J(E(t))}`,`lucide-${t}`,s),...p}));return l.displayName=E(t),l};var pe=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],w=d("chevron-down",pe);var me=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],P=d("chevron-right",me);var Le=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],C=d("hash",Le);var Ie=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],n=d("loader-circle",Ie);var xe=[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15",key:"dxknvb"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68",key:"1x7qb5"}],["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],A=d("power-off",xe);var Ce=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],B=d("power",Ce);var he=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],M=d("refresh-cw",he);var Se=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],D=d("server",Se);var ge=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],F=d("wifi-off",ge);var ke=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],y=d("wifi",ke);import{Fragment as Ae,jsx as a,jsxs as u}from"react/jsx-runtime";function V(){let[t,o]=c([]),[l,s]=c(!0),[p,f]=c(""),[m,L]=c("overview"),[R,I]=c({}),[x,O]=c(""),[h,q]=c([]),[S,T]=c(!1),[g,H]=c(null),[G,z]=c({}),[ae,N]=c(null),b=Pe(async()=>{s(!0),f("");try{let i=await(await k("/api/qq/endpoints")).json();i.success?o(i.data):f(i.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{f("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{s(!1)}},[]);we(()=>{b()},[b]);let te=async(e,i)=>{I(r=>({...r,[e]:!0}));try{let r=i?"disconnect":"connect",Z=await(await k(`/api/qq/endpoints/${encodeURIComponent(e)}/${r}`,{method:"POST"})).json();Z.success||f(Z.error||"\u64CD\u4F5C\u5931\u8D25"),await b()}catch{f("\u64CD\u4F5C\u5931\u8D25")}finally{I(r=>({...r,[e]:!1}))}},X=async e=>{O(e),T(!0),q([]),H(null),z({});try{let r=await(await k(`/api/qq/endpoints/${encodeURIComponent(e)}/guilds`)).json();r.success?q(r.data):f(r.error||"\u83B7\u53D6\u9891\u9053\u5931\u8D25")}catch{f("\u83B7\u53D6\u9891\u9053\u5931\u8D25")}finally{T(!1)}},oe=async e=>{if(g===e){H(null);return}if(H(e),!G[e]){N(e);try{let r=await(await k(`/api/qq/endpoints/${encodeURIComponent(x)}/guilds/${encodeURIComponent(e)}/channels`)).json();r.success&&z(K=>({...K,[e]:r.data}))}catch{}finally{N(null)}}},W=t.filter(e=>e.connected);return u("div",{className:"p-6 max-w-5xl mx-auto",children:[u("div",{className:"flex items-center justify-between mb-6",children:[u("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[a(D,{className:"w-6 h-6"})," QQ \u5B98\u65B9\u673A\u5668\u4EBA"]}),u("button",{onClick:b,disabled:l,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm",children:[a(M,{className:`w-4 h-4 ${l?"animate-spin":""}`})," \u5237\u65B0"]})]}),p&&a("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200",children:p}),u("div",{className:"flex gap-1 mb-6 border-b",children:[a("button",{onClick:()=>L("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${m==="overview"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u6982\u89C8"}),a("button",{onClick:()=>L("guilds"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${m==="guilds"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u9891\u9053\u6D4F\u89C8"})]}),m==="overview"&&u(Ae,{children:[!l&&!t.length&&!p&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 QQ Endpoint \u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:t.map(e=>u("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[u("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?u("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(y,{className:"w-4 h-4"})," \u5728\u7EBF"]}):u("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(F,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),a("div",{className:"grid grid-cols-1 gap-2 text-sm text-gray-600 mb-3",children:u("div",{className:"flex justify-between",children:[a("span",{children:"\u9891\u9053\u6570"}),a("span",{className:"font-mono",children:e.guildCount})]})}),u("div",{className:"flex gap-2",children:[u("button",{onClick:()=>te(e.name,e.connected),disabled:R[e.name],className:`flex items-center gap-1 px-3 py-1.5 rounded text-sm text-white ${e.connected?"bg-red-500 hover:bg-red-600":"bg-green-500 hover:bg-green-600"} disabled:opacity-50`,children:[R[e.name]?a(n,{className:"w-3.5 h-3.5 animate-spin"}):e.connected?a(A,{className:"w-3.5 h-3.5"}):a(B,{className:"w-3.5 h-3.5"}),e.connected?"\u65AD\u5F00":"\u8FDE\u63A5"]}),e.connected&&u("button",{onClick:()=>{L("guilds"),X(e.name)},className:"flex items-center gap-1 px-3 py-1.5 rounded text-sm bg-gray-100 hover:bg-gray-200 text-gray-700",children:[a(C,{className:"w-3.5 h-3.5"})," \u6D4F\u89C8\u9891\u9053"]})]})]},e.name))})]}),m==="guilds"&&u("div",{children:[W.length>0&&u("div",{className:"mb-4 flex items-center gap-2",children:[a("label",{className:"text-sm text-gray-500",children:"\u9009\u62E9\u673A\u5668\u4EBA\uFF1A"}),u("select",{value:x,onChange:e=>X(e.target.value),className:"border rounded px-2 py-1 text-sm",children:[a("option",{value:"",children:"--"}),W.map(e=>a("option",{value:e.name,children:e.name},e.name))]})]}),!W.length&&a("div",{className:"text-center text-gray-500 py-8",children:"\u6682\u65E0\u5728\u7EBF Endpoint"}),S&&a("div",{className:"flex justify-center py-8",children:a(n,{className:"w-6 h-6 animate-spin text-blue-500"})}),!S&&h.length>0&&a("div",{className:"border rounded-lg bg-card shadow-sm divide-y",children:h.map(e=>u("div",{children:[u("button",{onClick:()=>oe(e.id),className:"w-full flex items-center gap-2 px-4 py-3 hover:bg-gray-50 text-left",children:[g===e.id?a(w,{className:"w-4 h-4 text-gray-400"}):a(P,{className:"w-4 h-4 text-gray-400"}),a("span",{className:"font-medium",children:e.name}),a("span",{className:"text-xs text-gray-400 ml-auto",children:e.id})]}),g===e.id&&a("div",{className:"px-4 pb-3",children:ae===e.id?u("div",{className:"flex items-center gap-2 text-gray-400 text-sm py-2 pl-6",children:[a(n,{className:"w-4 h-4 animate-spin"})," \u52A0\u8F7D\u4E2D\u2026"]}):G[e.id]?.length?a("div",{className:"pl-6 space-y-1",children:G[e.id].map(i=>u("div",{className:"flex items-center gap-2 text-sm text-gray-600 py-1",children:[a(C,{className:"w-3.5 h-3.5 text-gray-400"}),a("span",{children:i.name}),a("span",{className:"text-xs text-gray-400 ml-auto",children:i.id})]},i.id))}):a("div",{className:"pl-6 text-sm text-gray-400 py-1",children:"\u65E0\u5B50\u9891\u9053"})})]},e.id))}),!S&&x&&!h.length&&a("div",{className:"text-center text-gray-400 py-8",children:"\u8BE5\u673A\u5668\u4EBA\u672A\u52A0\u5165\u4EFB\u4F55\u9891\u9053"})]})]})}function Ta(t){t.addRoute({path:"/console/qq",name:"QQ\u5B98\u65B9",element:t.React.createElement(V,{hostReact:t.React})}),t.addTool({id:"qq",name:"QQ\u5B98\u65B9",path:"/console/qq"})}export{Ta as register};
|
|
2
|
-
/*! 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/chevron-down.mjs:
|
|
14
|
-
lucide-react/dist/esm/icons/chevron-right.mjs:
|
|
15
|
-
lucide-react/dist/esm/icons/hash.mjs:
|
|
16
|
-
lucide-react/dist/esm/icons/loader-circle.mjs:
|
|
17
|
-
lucide-react/dist/esm/icons/power-off.mjs:
|
|
18
|
-
lucide-react/dist/esm/icons/power.mjs:
|
|
19
|
-
lucide-react/dist/esm/icons/refresh-cw.mjs:
|
|
20
|
-
lucide-react/dist/esm/icons/server.mjs:
|
|
21
|
-
lucide-react/dist/esm/icons/wifi-off.mjs:
|
|
22
|
-
lucide-react/dist/esm/icons/wifi.mjs:
|
|
23
|
-
lucide-react/dist/esm/lucide-react.mjs:
|
|
24
|
-
(**
|
|
25
|
-
* @license lucide-react v1.23.0 - ISC
|
|
26
|
-
*
|
|
27
|
-
* This source code is licensed under the ISC license.
|
|
28
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
29
|
-
*)
|
|
30
|
-
*/
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
-
export default defineTool({
|
|
6
|
-
description: '给成员添加 QQ 频道角色',
|
|
7
|
-
inputSchema: z.object({
|
|
8
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
-
guild_id: z.string().describe('频道 ID'),
|
|
10
|
-
channel_id: z.string().describe('子频道 ID'),
|
|
11
|
-
user_id: z.string().describe('用户 ID'),
|
|
12
|
-
role_id: z.string().describe('角色 ID'),
|
|
13
|
-
}),
|
|
14
|
-
platforms: ['qq'],
|
|
15
|
-
tags: ['qq'],
|
|
16
|
-
permissions: [platformPermit('manage_roles')],
|
|
17
|
-
async execute({ endpoint_id, guild_id, channel_id, user_id, role_id }) {
|
|
18
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
19
|
-
const success = await endpoint.addMemberRole(guild_id, channel_id, user_id, role_id);
|
|
20
|
-
return { success, message: success ? '已给成员添加角色' : '操作失败' };
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=add_role.js.map
|
|
@@ -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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAAkG;IACzH,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAoG;QACrK,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACrF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,19 +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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
-
export default defineTool({
|
|
6
|
-
description: '获取 QQ 频道中指定子频道的详细信息',
|
|
7
|
-
inputSchema: z.object({
|
|
8
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
-
channel_id: z.string().describe('子频道 ID'),
|
|
10
|
-
}),
|
|
11
|
-
platforms: ['qq'],
|
|
12
|
-
tags: ['qq'],
|
|
13
|
-
permissions: [platformPermit('guild_admin')],
|
|
14
|
-
async execute({ endpoint_id, channel_id }) {
|
|
15
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
-
return endpoint.getChannelInfo(channel_id);
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
//# sourceMappingURL=channel_info.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel_info.js","sourceRoot":"","sources":["../../../agent/tools/channel_info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA8C;IACrE,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAC1C,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAgD;QACrF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
-
export default defineTool({
|
|
6
|
-
description: '创建 QQ 频道角色',
|
|
7
|
-
inputSchema: z.object({
|
|
8
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
-
guild_id: z.string().describe('频道 ID'),
|
|
10
|
-
name: z.string().describe('角色名称'),
|
|
11
|
-
color: z.number().optional().describe('颜色(RGB 十进制数值)'),
|
|
12
|
-
}),
|
|
13
|
-
platforms: ['qq'],
|
|
14
|
-
tags: ['qq'],
|
|
15
|
-
permissions: [platformPermit('guild_owner')],
|
|
16
|
-
async execute({ endpoint_id, guild_id, name, color }) {
|
|
17
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
18
|
-
const role = await endpoint.createGuildRole(guild_id, name, color);
|
|
19
|
-
return { success: !!role, role, message: role ? `角色 "${name}" 创建成功` : '创建失败' };
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
//# sourceMappingURL=create_role.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create_role.js","sourceRoot":"","sources":["../../../agent/tools/create_role.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA0E;IACjG,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KACvD,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAA4E;QAC5H,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjF,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
-
export default defineTool({
|
|
6
|
-
description: '获取 QQ 频道下的子频道列表',
|
|
7
|
-
inputSchema: z.object({
|
|
8
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
-
guild_id: z.string().describe('频道 ID'),
|
|
10
|
-
}),
|
|
11
|
-
platforms: ['qq'],
|
|
12
|
-
tags: ['qq'],
|
|
13
|
-
permissions: [platformPermit('manage_channels')],
|
|
14
|
-
async execute({ endpoint_id, guild_id }) {
|
|
15
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
-
const channels = await endpoint.getChannels(guild_id);
|
|
17
|
-
return { channels, count: channels.length };
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
//# sourceMappingURL=list_channels.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list_channels.js","sourceRoot":"","sources":["../../../agent/tools/list_channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA4C;IACnE,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAA8C;QACjF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
4
|
-
export default defineTool({
|
|
5
|
-
description: '获取 QQ 频道列表',
|
|
6
|
-
inputSchema: z.object({
|
|
7
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
8
|
-
}),
|
|
9
|
-
platforms: ['qq'],
|
|
10
|
-
tags: ['qq'],
|
|
11
|
-
async execute({ endpoint_id }) {
|
|
12
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
13
|
-
const guilds = await endpoint.getGuilds();
|
|
14
|
-
return { guilds, count: guilds.length };
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=list_guilds.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list_guilds.js","sourceRoot":"","sources":["../../../agent/tools/list_guilds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA0B;IACjD,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;KAChD,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAA4B;QACrD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
-
export default defineTool({
|
|
6
|
-
description: '获取 QQ 频道角色列表',
|
|
7
|
-
inputSchema: z.object({
|
|
8
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
-
guild_id: z.string().describe('频道 ID'),
|
|
10
|
-
}),
|
|
11
|
-
platforms: ['qq'],
|
|
12
|
-
tags: ['qq'],
|
|
13
|
-
permissions: [platformPermit('manage_roles')],
|
|
14
|
-
async execute({ endpoint_id, guild_id }) {
|
|
15
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
16
|
-
const roles = await endpoint.getGuildRoles(guild_id);
|
|
17
|
-
return { roles, count: roles.length };
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
//# sourceMappingURL=list_roles.js.map
|
|
@@ -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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA4C;IACnE,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAA8C;QACjF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
-
export default defineTool({
|
|
6
|
-
description: '获取 QQ 频道中指定成员的详细信息',
|
|
7
|
-
inputSchema: z.object({
|
|
8
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
-
guild_id: z.string().describe('频道 ID'),
|
|
10
|
-
user_id: z.string().describe('用户 ID'),
|
|
11
|
-
}),
|
|
12
|
-
platforms: ['qq'],
|
|
13
|
-
tags: ['qq'],
|
|
14
|
-
permissions: [platformPermit('guild_admin')],
|
|
15
|
-
async execute({ endpoint_id, guild_id, user_id }) {
|
|
16
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
17
|
-
return endpoint.getGuildMember(guild_id, user_id);
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
//# sourceMappingURL=member_detail.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"member_detail.js","sourceRoot":"","sources":["../../../agent/tools/member_detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA6D;IACpF,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAA+D;QAC3G,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 { getQqAgentDeps } from '../../src/qq-agent-deps.js';
|
|
5
|
-
export default defineTool({
|
|
6
|
-
description: '移除成员的 QQ 频道角色',
|
|
7
|
-
inputSchema: z.object({
|
|
8
|
-
endpoint_id: z.string().describe('Endpoint 名称'),
|
|
9
|
-
guild_id: z.string().describe('频道 ID'),
|
|
10
|
-
channel_id: z.string().describe('子频道 ID'),
|
|
11
|
-
user_id: z.string().describe('用户 ID'),
|
|
12
|
-
role_id: z.string().describe('角色 ID'),
|
|
13
|
-
}),
|
|
14
|
-
platforms: ['qq'],
|
|
15
|
-
tags: ['qq'],
|
|
16
|
-
permissions: [platformPermit('manage_roles')],
|
|
17
|
-
async execute({ endpoint_id, guild_id, channel_id, user_id, role_id }) {
|
|
18
|
-
const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
|
|
19
|
-
const success = await endpoint.removeMemberRole(guild_id, channel_id, user_id, role_id);
|
|
20
|
-
return { success, message: success ? '已移除成员的角色' : '操作失败' };
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=remove_role.js.map
|
|
@@ -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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAAkG;IACzH,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAoG;QACrK,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
|