@zhin.js/adapter-kook 1.0.64 → 1.0.66
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 +23 -0
- package/client/Dashboard.tsx +255 -0
- package/client/index.tsx +11 -0
- package/client/tsconfig.json +7 -0
- package/client/utils/api.ts +17 -0
- package/dist/index.js +1 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +158 -7
- package/lib/index.js.map +1 -1
- package/package.json +26 -7
- package/plugin.yml +3 -0
- package/src/index.ts +125 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @zhin.js/adapter-kook
|
|
2
2
|
|
|
3
|
+
## 1.0.66
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9577eba: fix: tool 收集 bug,升级 ts 到 6.0.2
|
|
8
|
+
- Updated dependencies [9577eba]
|
|
9
|
+
- @zhin.js/logger@0.1.48
|
|
10
|
+
- @zhin.js/client@1.0.16
|
|
11
|
+
- zhin.js@1.0.64
|
|
12
|
+
- @zhin.js/console@2.0.6
|
|
13
|
+
- @zhin.js/http@1.0.59
|
|
14
|
+
|
|
15
|
+
## 1.0.65
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- ba30934: fix: web 优化
|
|
20
|
+
- Updated dependencies [ba30934]
|
|
21
|
+
- @zhin.js/console@2.0.5
|
|
22
|
+
- @zhin.js/http@1.0.58
|
|
23
|
+
- zhin.js@1.0.63
|
|
24
|
+
- @zhin.js/logger@0.1.47
|
|
25
|
+
|
|
3
26
|
## 1.0.64
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { useEffect, useState, useCallback } from 'react'
|
|
2
|
+
import { apiFetch } from './utils/api'
|
|
3
|
+
import { RefreshCw, Server, Wifi, WifiOff, Power, PowerOff, Loader2, Shield, Plus, Trash2, X } from 'lucide-react'
|
|
4
|
+
|
|
5
|
+
interface BotInfo {
|
|
6
|
+
name: string
|
|
7
|
+
connected: boolean
|
|
8
|
+
guildCount: number
|
|
9
|
+
status: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Role {
|
|
13
|
+
id: string
|
|
14
|
+
name: string
|
|
15
|
+
color: number
|
|
16
|
+
position: number
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type Tab = 'overview' | 'roles'
|
|
20
|
+
|
|
21
|
+
export default function KookDashboard() {
|
|
22
|
+
const [bots, setBots] = useState<BotInfo[]>([])
|
|
23
|
+
const [loading, setLoading] = useState(true)
|
|
24
|
+
const [error, setError] = useState('')
|
|
25
|
+
const [tab, setTab] = useState<Tab>('overview')
|
|
26
|
+
const [actionLoading, setActionLoading] = useState<Record<string, boolean>>({})
|
|
27
|
+
|
|
28
|
+
// Role management state
|
|
29
|
+
const [selectedBot, setSelectedBot] = useState('')
|
|
30
|
+
const [guildId, setGuildId] = useState('')
|
|
31
|
+
const [roles, setRoles] = useState<Role[]>([])
|
|
32
|
+
const [rolesLoading, setRolesLoading] = useState(false)
|
|
33
|
+
const [newRoleName, setNewRoleName] = useState('')
|
|
34
|
+
const [createLoading, setCreateLoading] = useState(false)
|
|
35
|
+
const [deleteLoading, setDeleteLoading] = useState<string | null>(null)
|
|
36
|
+
|
|
37
|
+
const fetchData = useCallback(async () => {
|
|
38
|
+
setLoading(true)
|
|
39
|
+
setError('')
|
|
40
|
+
try {
|
|
41
|
+
const res = await apiFetch('/api/kook/bots')
|
|
42
|
+
const json = await res.json()
|
|
43
|
+
if (json.success) setBots(json.data)
|
|
44
|
+
else setError(json.error || '获取数据失败')
|
|
45
|
+
} catch {
|
|
46
|
+
setError('无法连接服务器')
|
|
47
|
+
} finally {
|
|
48
|
+
setLoading(false)
|
|
49
|
+
}
|
|
50
|
+
}, [])
|
|
51
|
+
|
|
52
|
+
useEffect(() => { fetchData() }, [fetchData])
|
|
53
|
+
|
|
54
|
+
const toggleConnect = async (name: string, connected: boolean) => {
|
|
55
|
+
setActionLoading(prev => ({ ...prev, [name]: true }))
|
|
56
|
+
try {
|
|
57
|
+
const endpoint = connected ? 'disconnect' : 'connect'
|
|
58
|
+
const res = await apiFetch(`/api/kook/bots/${encodeURIComponent(name)}/${endpoint}`, { method: 'POST' })
|
|
59
|
+
const json = await res.json()
|
|
60
|
+
if (!json.success) setError(json.error || '操作失败')
|
|
61
|
+
await fetchData()
|
|
62
|
+
} catch {
|
|
63
|
+
setError('操作失败')
|
|
64
|
+
} finally {
|
|
65
|
+
setActionLoading(prev => ({ ...prev, [name]: false }))
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const loadRoles = async () => {
|
|
70
|
+
if (!selectedBot || !guildId) return
|
|
71
|
+
setRolesLoading(true)
|
|
72
|
+
setRoles([])
|
|
73
|
+
try {
|
|
74
|
+
const res = await apiFetch(`/api/kook/bots/${encodeURIComponent(selectedBot)}/guilds/${encodeURIComponent(guildId)}/roles`)
|
|
75
|
+
const json = await res.json()
|
|
76
|
+
if (json.success) setRoles(json.data)
|
|
77
|
+
else setError(json.error || '获取角色失败')
|
|
78
|
+
} catch {
|
|
79
|
+
setError('获取角色失败')
|
|
80
|
+
} finally {
|
|
81
|
+
setRolesLoading(false)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const createRole = async () => {
|
|
86
|
+
if (!selectedBot || !guildId || !newRoleName.trim()) return
|
|
87
|
+
setCreateLoading(true)
|
|
88
|
+
try {
|
|
89
|
+
const res = await apiFetch(`/api/kook/bots/${encodeURIComponent(selectedBot)}/guilds/${encodeURIComponent(guildId)}/roles`, {
|
|
90
|
+
method: 'POST',
|
|
91
|
+
headers: { 'Content-Type': 'application/json' },
|
|
92
|
+
body: JSON.stringify({ name: newRoleName.trim() }),
|
|
93
|
+
})
|
|
94
|
+
const json = await res.json()
|
|
95
|
+
if (json.success) {
|
|
96
|
+
setNewRoleName('')
|
|
97
|
+
await loadRoles()
|
|
98
|
+
} else {
|
|
99
|
+
setError(json.error || '创建角色失败')
|
|
100
|
+
}
|
|
101
|
+
} catch {
|
|
102
|
+
setError('创建角色失败')
|
|
103
|
+
} finally {
|
|
104
|
+
setCreateLoading(false)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const deleteRole = async (roleId: string) => {
|
|
109
|
+
if (!selectedBot || !guildId) return
|
|
110
|
+
setDeleteLoading(roleId)
|
|
111
|
+
try {
|
|
112
|
+
const res = await apiFetch(`/api/kook/bots/${encodeURIComponent(selectedBot)}/guilds/${encodeURIComponent(guildId)}/roles/${encodeURIComponent(roleId)}`, {
|
|
113
|
+
method: 'DELETE',
|
|
114
|
+
})
|
|
115
|
+
const json = await res.json()
|
|
116
|
+
if (json.success) {
|
|
117
|
+
setRoles(prev => prev.filter(r => r.id !== roleId))
|
|
118
|
+
} else {
|
|
119
|
+
setError(json.error || '删除角色失败')
|
|
120
|
+
}
|
|
121
|
+
} catch {
|
|
122
|
+
setError('删除角色失败')
|
|
123
|
+
} finally {
|
|
124
|
+
setDeleteLoading(null)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const onlineBots = bots.filter(b => b.connected)
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<div className="p-6 max-w-5xl mx-auto">
|
|
132
|
+
<div className="flex items-center justify-between mb-6">
|
|
133
|
+
<h1 className="text-2xl font-bold flex items-center gap-2">
|
|
134
|
+
<Server className="w-6 h-6" /> KOOK 机器人
|
|
135
|
+
</h1>
|
|
136
|
+
<button onClick={fetchData} disabled={loading}
|
|
137
|
+
className="flex items-center gap-1 px-3 py-1.5 rounded bg-sky-500 text-white hover:bg-sky-600 disabled:opacity-50 text-sm">
|
|
138
|
+
<RefreshCw className={`w-4 h-4 ${loading ? 'animate-spin' : ''}`} /> 刷新
|
|
139
|
+
</button>
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
{error && <div className="mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200 flex items-center justify-between">
|
|
143
|
+
<span>{error}</span>
|
|
144
|
+
<button onClick={() => setError('')} className="text-red-400 hover:text-red-600"><X className="w-4 h-4" /></button>
|
|
145
|
+
</div>}
|
|
146
|
+
|
|
147
|
+
{/* Tabs */}
|
|
148
|
+
<div className="flex gap-1 mb-6 border-b">
|
|
149
|
+
<button onClick={() => setTab('overview')}
|
|
150
|
+
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${tab === 'overview' ? 'border-sky-500 text-sky-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
|
151
|
+
概览
|
|
152
|
+
</button>
|
|
153
|
+
<button onClick={() => setTab('roles')}
|
|
154
|
+
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${tab === 'roles' ? 'border-sky-500 text-sky-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
|
155
|
+
角色管理
|
|
156
|
+
</button>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
{/* Overview Tab */}
|
|
160
|
+
{tab === 'overview' && (
|
|
161
|
+
<>
|
|
162
|
+
{!loading && !bots.length && !error && (
|
|
163
|
+
<div className="text-center text-gray-500 py-12">暂无 KOOK 机器人实例</div>
|
|
164
|
+
)}
|
|
165
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
166
|
+
{bots.map((bot) => (
|
|
167
|
+
<div key={bot.name} className="border rounded-lg p-4 bg-card shadow-sm">
|
|
168
|
+
<div className="flex items-center justify-between mb-3">
|
|
169
|
+
<span className="font-medium text-lg">{bot.name}</span>
|
|
170
|
+
{bot.connected
|
|
171
|
+
? <span className="flex items-center gap-1 text-green-600 text-sm"><Wifi className="w-4 h-4" /> 在线</span>
|
|
172
|
+
: <span className="flex items-center gap-1 text-gray-400 text-sm"><WifiOff className="w-4 h-4" /> 离线</span>}
|
|
173
|
+
</div>
|
|
174
|
+
<div className="text-sm text-gray-600 mb-3">
|
|
175
|
+
<div className="flex justify-between"><span>服务器</span><span className="font-mono">{bot.guildCount}</span></div>
|
|
176
|
+
</div>
|
|
177
|
+
<button
|
|
178
|
+
onClick={() => toggleConnect(bot.name, bot.connected)}
|
|
179
|
+
disabled={actionLoading[bot.name]}
|
|
180
|
+
className={`flex items-center gap-1 px-3 py-1.5 rounded text-sm text-white ${bot.connected ? 'bg-red-500 hover:bg-red-600' : 'bg-green-500 hover:bg-green-600'} disabled:opacity-50`}>
|
|
181
|
+
{actionLoading[bot.name]
|
|
182
|
+
? <Loader2 className="w-3.5 h-3.5 animate-spin" />
|
|
183
|
+
: bot.connected ? <PowerOff className="w-3.5 h-3.5" /> : <Power className="w-3.5 h-3.5" />}
|
|
184
|
+
{bot.connected ? '断开' : '连接'}
|
|
185
|
+
</button>
|
|
186
|
+
</div>
|
|
187
|
+
))}
|
|
188
|
+
</div>
|
|
189
|
+
</>
|
|
190
|
+
)}
|
|
191
|
+
|
|
192
|
+
{/* Roles Tab */}
|
|
193
|
+
{tab === 'roles' && (
|
|
194
|
+
<div className="space-y-4">
|
|
195
|
+
{/* Bot + Guild selector */}
|
|
196
|
+
<div className="flex flex-wrap items-end gap-3">
|
|
197
|
+
<div>
|
|
198
|
+
<label className="block text-xs text-gray-500 mb-1">机器人</label>
|
|
199
|
+
<select value={selectedBot} onChange={(e) => setSelectedBot(e.target.value)}
|
|
200
|
+
className="border rounded px-2 py-1.5 text-sm min-w-[140px]">
|
|
201
|
+
<option value="">--</option>
|
|
202
|
+
{onlineBots.map(b => <option key={b.name} value={b.name}>{b.name}</option>)}
|
|
203
|
+
</select>
|
|
204
|
+
</div>
|
|
205
|
+
<div>
|
|
206
|
+
<label className="block text-xs text-gray-500 mb-1">服务器 ID</label>
|
|
207
|
+
<input value={guildId} onChange={(e) => setGuildId(e.target.value)} placeholder="输入服务器 ID"
|
|
208
|
+
className="border rounded px-2 py-1.5 text-sm w-[180px]" />
|
|
209
|
+
</div>
|
|
210
|
+
<button onClick={loadRoles} disabled={!selectedBot || !guildId || rolesLoading}
|
|
211
|
+
className="px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600 disabled:opacity-50 flex items-center gap-1">
|
|
212
|
+
{rolesLoading ? <Loader2 className="w-3.5 h-3.5 animate-spin" /> : <Shield className="w-3.5 h-3.5" />} 查询角色
|
|
213
|
+
</button>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
{!onlineBots.length && <div className="text-center text-gray-500 py-4">暂无在线机器人</div>}
|
|
217
|
+
|
|
218
|
+
{/* Create Role */}
|
|
219
|
+
{selectedBot && guildId && roles.length > 0 && (
|
|
220
|
+
<div className="flex items-center gap-2">
|
|
221
|
+
<input value={newRoleName} onChange={(e) => setNewRoleName(e.target.value)} placeholder="新角色名称"
|
|
222
|
+
className="border rounded px-2 py-1.5 text-sm flex-1 max-w-[240px]"
|
|
223
|
+
onKeyDown={(e) => e.key === 'Enter' && createRole()} />
|
|
224
|
+
<button onClick={createRole} disabled={createLoading || !newRoleName.trim()}
|
|
225
|
+
className="px-3 py-1.5 rounded bg-green-500 text-white text-sm hover:bg-green-600 disabled:opacity-50 flex items-center gap-1">
|
|
226
|
+
{createLoading ? <Loader2 className="w-3.5 h-3.5 animate-spin" /> : <Plus className="w-3.5 h-3.5" />} 创建
|
|
227
|
+
</button>
|
|
228
|
+
</div>
|
|
229
|
+
)}
|
|
230
|
+
|
|
231
|
+
{/* Roles list */}
|
|
232
|
+
{rolesLoading && <div className="flex justify-center py-8"><Loader2 className="w-6 h-6 animate-spin text-sky-500" /></div>}
|
|
233
|
+
|
|
234
|
+
{!rolesLoading && roles.length > 0 && (
|
|
235
|
+
<div className="border rounded-lg bg-card shadow-sm divide-y">
|
|
236
|
+
{roles.map(role => (
|
|
237
|
+
<div key={role.id} className="flex items-center px-4 py-2.5 hover:bg-gray-50">
|
|
238
|
+
<div className="w-3 h-3 rounded-full mr-3" style={{ backgroundColor: role.color ? `#${role.color.toString(16).padStart(6, '0')}` : '#999' }} />
|
|
239
|
+
<span className="font-medium text-sm flex-1">{role.name}</span>
|
|
240
|
+
<span className="text-xs text-gray-400 mr-4">ID: {role.id}</span>
|
|
241
|
+
<button onClick={() => deleteRole(role.id)} disabled={deleteLoading === role.id}
|
|
242
|
+
className="text-gray-400 hover:text-red-500 disabled:opacity-50">
|
|
243
|
+
{deleteLoading === role.id ? <Loader2 className="w-4 h-4 animate-spin" /> : <Trash2 className="w-4 h-4" />}
|
|
244
|
+
</button>
|
|
245
|
+
</div>
|
|
246
|
+
))}
|
|
247
|
+
</div>
|
|
248
|
+
)}
|
|
249
|
+
|
|
250
|
+
{!rolesLoading && selectedBot && guildId && !roles.length && <div className="text-center text-gray-400 py-6">暂无角色数据,请先查询</div>}
|
|
251
|
+
</div>
|
|
252
|
+
)}
|
|
253
|
+
</div>
|
|
254
|
+
)
|
|
255
|
+
}
|
package/client/index.tsx
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { addPage } from '@zhin.js/client'
|
|
2
|
+
import { Headphones } from 'lucide-react'
|
|
3
|
+
import KookDashboard from './Dashboard'
|
|
4
|
+
|
|
5
|
+
addPage({
|
|
6
|
+
key: 'kook-management',
|
|
7
|
+
path: '/kook',
|
|
8
|
+
title: 'KOOK',
|
|
9
|
+
icon: <Headphones className="w-5 h-5" />,
|
|
10
|
+
element: <KookDashboard />,
|
|
11
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const TOKEN_KEY = "zhin_api_token";
|
|
2
|
+
|
|
3
|
+
export function getToken(): string | null {
|
|
4
|
+
return localStorage.getItem(TOKEN_KEY);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export async function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
|
|
8
|
+
const token = getToken();
|
|
9
|
+
const headers = new Headers(init?.headers);
|
|
10
|
+
if (token) headers.set("Authorization", `Bearer ${token}`);
|
|
11
|
+
const res = await fetch(input, { ...init, headers });
|
|
12
|
+
if (res.status === 401) {
|
|
13
|
+
localStorage.removeItem(TOKEN_KEY);
|
|
14
|
+
window.dispatchEvent(new CustomEvent("zhin:auth-required"));
|
|
15
|
+
}
|
|
16
|
+
return res;
|
|
17
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{addPage as e}from"@zhin.js/client";import{Headphones as t,Loader2 as n,Plus as r,Power as i,PowerOff as a,RefreshCw as o,Server as s,Shield as c,Trash2 as l,Wifi as u,WifiOff as d,X as f}from"lucide-react";import{useCallback as p,useEffect as m,useState as h}from"react";import{Fragment as g,jsx as _,jsxs as v}from"react/jsx-runtime";var y="zhin_api_token";function b(){return localStorage.getItem(y)}async function x(e2,t2){let n2=b(),r2=new Headers(t2?.headers);n2&&r2.set("Authorization",`Bearer ${n2}`);let i2=await fetch(e2,{...t2,headers:r2});return i2.status===401&&(localStorage.removeItem(y),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),i2}function S(){let[e2,t2]=h([]),[y2,b2]=h(true),[S2,C]=h(""),[w,T]=h("overview"),[E,D]=h({}),[O,k]=h(""),[A,j]=h(""),[M,N]=h([]),[P,F]=h(false),[I,L]=h(""),[R,z]=h(false),[B,V]=h(null),H=p(async()=>{b2(true),C("");try{let e3=await(await x("/api/kook/bots")).json();e3.success?t2(e3.data):C(e3.error||"获取数据失败")}catch{C("无法连接服务器")}finally{b2(false)}},[]);m(()=>{H()},[H]);let U=async(e3,t3)=>{D(t4=>({...t4,[e3]:true}));try{let n2=t3?"disconnect":"connect",r2=await(await x(`/api/kook/bots/${encodeURIComponent(e3)}/${n2}`,{method:"POST"})).json();r2.success||C(r2.error||"操作失败"),await H()}catch{C("操作失败")}finally{D(t4=>({...t4,[e3]:false}))}},W=async()=>{if(!(!O||!A)){F(true),N([]);try{let e3=await(await x(`/api/kook/bots/${encodeURIComponent(O)}/guilds/${encodeURIComponent(A)}/roles`)).json();e3.success?N(e3.data):C(e3.error||"获取角色失败")}catch{C("获取角色失败")}finally{F(false)}}},G=async()=>{if(!(!O||!A||!I.trim())){z(true);try{let e3=await(await x(`/api/kook/bots/${encodeURIComponent(O)}/guilds/${encodeURIComponent(A)}/roles`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:I.trim()})})).json();e3.success?(L(""),await W()):C(e3.error||"创建角色失败")}catch{C("创建角色失败")}finally{z(false)}}},K=async e3=>{if(!(!O||!A)){V(e3);try{let t3=await(await x(`/api/kook/bots/${encodeURIComponent(O)}/guilds/${encodeURIComponent(A)}/roles/${encodeURIComponent(e3)}`,{method:"DELETE"})).json();t3.success?N(t4=>t4.filter(t5=>t5.id!==e3)):C(t3.error||"删除角色失败")}catch{C("删除角色失败")}finally{V(null)}}},q=e2.filter(e3=>e3.connected);return v("div",{className:"p-6 max-w-5xl mx-auto",children:[v("div",{className:"flex items-center justify-between mb-6",children:[v("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[_(s,{className:"w-6 h-6"})," KOOK 机器人"]}),v("button",{onClick:H,disabled:y2,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-sky-500 text-white hover:bg-sky-600 disabled:opacity-50 text-sm",children:[_(o,{className:`w-4 h-4 ${y2?"animate-spin":""}`})," 刷新"]})]}),S2&&v("div",{className:"mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200 flex items-center justify-between",children:[_("span",{children:S2}),_("button",{onClick:()=>C(""),className:"text-red-400 hover:text-red-600",children:_(f,{className:"w-4 h-4"})})]}),v("div",{className:"flex gap-1 mb-6 border-b",children:[_("button",{onClick:()=>T("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${w==="overview"?"border-sky-500 text-sky-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"概览"}),_("button",{onClick:()=>T("roles"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${w==="roles"?"border-sky-500 text-sky-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"角色管理"})]}),w==="overview"&&v(g,{children:[!y2&&!e2.length&&!S2&&_("div",{className:"text-center text-gray-500 py-12",children:"暂无 KOOK 机器人实例"}),_("div",{className:"grid gap-4 md:grid-cols-2",children:e2.map(e3=>v("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[v("div",{className:"flex items-center justify-between mb-3",children:[_("span",{className:"font-medium text-lg",children:e3.name}),e3.connected?v("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[_(u,{className:"w-4 h-4"})," 在线"]}):v("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[_(d,{className:"w-4 h-4"})," 离线"]})]}),_("div",{className:"text-sm text-gray-600 mb-3",children:v("div",{className:"flex justify-between",children:[_("span",{children:"服务器"}),_("span",{className:"font-mono",children:e3.guildCount})]})}),v("button",{onClick:()=>U(e3.name,e3.connected),disabled:E[e3.name],className:`flex items-center gap-1 px-3 py-1.5 rounded text-sm text-white ${e3.connected?"bg-red-500 hover:bg-red-600":"bg-green-500 hover:bg-green-600"} disabled:opacity-50`,children:[E[e3.name]?_(n,{className:"w-3.5 h-3.5 animate-spin"}):e3.connected?_(a,{className:"w-3.5 h-3.5"}):_(i,{className:"w-3.5 h-3.5"}),e3.connected?"断开":"连接"]})]},e3.name))})]}),w==="roles"&&v("div",{className:"space-y-4",children:[v("div",{className:"flex flex-wrap items-end gap-3",children:[v("div",{children:[_("label",{className:"block text-xs text-gray-500 mb-1",children:"机器人"}),v("select",{value:O,onChange:e3=>k(e3.target.value),className:"border rounded px-2 py-1.5 text-sm min-w-[140px]",children:[_("option",{value:"",children:"--"}),q.map(e3=>_("option",{value:e3.name,children:e3.name},e3.name))]})]}),v("div",{children:[_("label",{className:"block text-xs text-gray-500 mb-1",children:"服务器 ID"}),_("input",{value:A,onChange:e3=>j(e3.target.value),placeholder:"输入服务器 ID",className:"border rounded px-2 py-1.5 text-sm w-[180px]"})]}),v("button",{onClick:W,disabled:!O||!A||P,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600 disabled:opacity-50 flex items-center gap-1",children:[P?_(n,{className:"w-3.5 h-3.5 animate-spin"}):_(c,{className:"w-3.5 h-3.5"})," 查询角色"]})]}),!q.length&&_("div",{className:"text-center text-gray-500 py-4",children:"暂无在线机器人"}),O&&A&&M.length>0&&v("div",{className:"flex items-center gap-2",children:[_("input",{value:I,onChange:e3=>L(e3.target.value),placeholder:"新角色名称",className:"border rounded px-2 py-1.5 text-sm flex-1 max-w-[240px]",onKeyDown:e3=>e3.key==="Enter"&&G()}),v("button",{onClick:G,disabled:R||!I.trim(),className:"px-3 py-1.5 rounded bg-green-500 text-white text-sm hover:bg-green-600 disabled:opacity-50 flex items-center gap-1",children:[R?_(n,{className:"w-3.5 h-3.5 animate-spin"}):_(r,{className:"w-3.5 h-3.5"})," 创建"]})]}),P&&_("div",{className:"flex justify-center py-8",children:_(n,{className:"w-6 h-6 animate-spin text-sky-500"})}),!P&&M.length>0&&_("div",{className:"border rounded-lg bg-card shadow-sm divide-y",children:M.map(e3=>v("div",{className:"flex items-center px-4 py-2.5 hover:bg-gray-50",children:[_("div",{className:"w-3 h-3 rounded-full mr-3",style:{backgroundColor:e3.color?`#${e3.color.toString(16).padStart(6,"0")}`:"#999"}}),_("span",{className:"font-medium text-sm flex-1",children:e3.name}),v("span",{className:"text-xs text-gray-400 mr-4",children:["ID: ",e3.id]}),_("button",{onClick:()=>K(e3.id),disabled:B===e3.id,className:"text-gray-400 hover:text-red-500 disabled:opacity-50",children:B===e3.id?_(n,{className:"w-4 h-4 animate-spin"}):_(l,{className:"w-4 h-4"})})]},e3.id))}),!P&&O&&A&&!M.length&&_("div",{className:"text-center text-gray-400 py-6",children:"暂无角色数据,请先查询"})]})]})}e({key:"kook-management",path:"/kook",title:"KOOK",icon:_(t,{className:"w-5 h-5"}),element:_(S,{})});
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { KookAdapter } from "./adapter.js";
|
|
2
|
+
import type { WebServer } from "@zhin.js/console";
|
|
3
|
+
declare module "zhin.js" {
|
|
4
|
+
namespace Plugin {
|
|
5
|
+
interface Contexts {
|
|
6
|
+
web: WebServer;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
2
10
|
declare module "zhin.js" {
|
|
3
11
|
interface Adapters {
|
|
4
12
|
kook: KookAdapter;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,MAAM,CAAC;QACf,UAAU,QAAQ;YAChB,GAAG,EAAE,SAAS,CAAC;SAChB;KACF;CACF;AAED,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,QAAQ;QAChB,IAAI,EAAE,WAAW,CAAC;KACnB;CACF;AAED,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KOOK 适配器入口:类型扩展、导出、注册
|
|
3
3
|
*/
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import { usePlugin, createGroupManagementTools } from "zhin.js";
|
|
5
6
|
import { KookAdapter } from "./adapter.js";
|
|
6
7
|
export * from "./types.js";
|
|
@@ -22,7 +23,7 @@ provide({
|
|
|
22
23
|
});
|
|
23
24
|
useContext('tool', 'kook', (toolService, kook) => {
|
|
24
25
|
const groupTools = createGroupManagementTools(kook, 'kook');
|
|
25
|
-
const disposers = groupTools.map(t => toolService.addTool(t,
|
|
26
|
+
const disposers = groupTools.map(t => toolService.addTool(t, plugin.name));
|
|
26
27
|
disposers.push(toolService.addTool({
|
|
27
28
|
name: 'kook_grant_role',
|
|
28
29
|
description: '给用户授予 KOOK 服务器角色',
|
|
@@ -45,7 +46,7 @@ useContext('tool', 'kook', (toolService, kook) => {
|
|
|
45
46
|
const success = await bot.grantRole(args.guild_id, args.user_id, args.role_id);
|
|
46
47
|
return { success, message: success ? `已授予用户 ${args.user_id} 角色 ${args.role_id}` : '授予角色失败' };
|
|
47
48
|
},
|
|
48
|
-
},
|
|
49
|
+
}, plugin.name));
|
|
49
50
|
disposers.push(toolService.addTool({
|
|
50
51
|
name: 'kook_revoke_role',
|
|
51
52
|
description: '撤销用户的 KOOK 服务器角色',
|
|
@@ -68,7 +69,7 @@ useContext('tool', 'kook', (toolService, kook) => {
|
|
|
68
69
|
const success = await bot.revokeRole(args.guild_id, args.user_id, args.role_id);
|
|
69
70
|
return { success, message: success ? `已撤销用户 ${args.user_id} 的角色 ${args.role_id}` : '撤销角色失败' };
|
|
70
71
|
},
|
|
71
|
-
},
|
|
72
|
+
}, plugin.name));
|
|
72
73
|
disposers.push(toolService.addTool({
|
|
73
74
|
name: 'kook_list_roles',
|
|
74
75
|
description: '获取 KOOK 服务器的角色列表',
|
|
@@ -98,7 +99,7 @@ useContext('tool', 'kook', (toolService, kook) => {
|
|
|
98
99
|
count: roles.length,
|
|
99
100
|
};
|
|
100
101
|
},
|
|
101
|
-
},
|
|
102
|
+
}, plugin.name));
|
|
102
103
|
disposers.push(toolService.addTool({
|
|
103
104
|
name: 'kook_create_role',
|
|
104
105
|
description: '在 KOOK 服务器中创建新角色',
|
|
@@ -124,7 +125,7 @@ useContext('tool', 'kook', (toolService, kook) => {
|
|
|
124
125
|
role: { id: role.role_id, name: role.name },
|
|
125
126
|
};
|
|
126
127
|
},
|
|
127
|
-
},
|
|
128
|
+
}, plugin.name));
|
|
128
129
|
disposers.push(toolService.addTool({
|
|
129
130
|
name: 'kook_delete_role',
|
|
130
131
|
description: '删除 KOOK 服务器中的角色',
|
|
@@ -146,7 +147,7 @@ useContext('tool', 'kook', (toolService, kook) => {
|
|
|
146
147
|
const success = await bot.deleteRole(args.guild_id, args.role_id);
|
|
147
148
|
return { success, message: success ? `已删除角色 ${args.role_id}` : '删除角色失败' };
|
|
148
149
|
},
|
|
149
|
-
},
|
|
150
|
+
}, plugin.name));
|
|
150
151
|
disposers.push(toolService.addTool({
|
|
151
152
|
name: 'kook_blacklist',
|
|
152
153
|
description: 'KOOK 服务器黑名单管理:添加/移除',
|
|
@@ -180,7 +181,157 @@ useContext('tool', 'kook', (toolService, kook) => {
|
|
|
180
181
|
return { success: false, message: `未知操作: ${args.action}` };
|
|
181
182
|
}
|
|
182
183
|
},
|
|
183
|
-
},
|
|
184
|
+
}, plugin.name));
|
|
184
185
|
return () => disposers.forEach(d => d());
|
|
185
186
|
});
|
|
187
|
+
// ── Web 控制台 ─────────────────────────────────────────────────────────
|
|
188
|
+
useContext("web", (web) => {
|
|
189
|
+
return web.addEntry(path.resolve(import.meta.dirname, "../client/index.tsx"));
|
|
190
|
+
});
|
|
191
|
+
useContext("router", "kook", (router, kook) => {
|
|
192
|
+
router.get("/api/kook/bots", async (ctx) => {
|
|
193
|
+
try {
|
|
194
|
+
const bots = Array.from(kook.bots.values());
|
|
195
|
+
const result = bots.map((bot) => {
|
|
196
|
+
try {
|
|
197
|
+
return {
|
|
198
|
+
name: bot.$config.name,
|
|
199
|
+
connected: bot.$connected || false,
|
|
200
|
+
guildCount: bot.guilds?.size || 0,
|
|
201
|
+
status: bot.$connected ? "online" : "offline",
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return { name: bot.$config.name, connected: false, guildCount: 0, status: "error" };
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
ctx.body = { success: true, data: result };
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
ctx.status = 500;
|
|
212
|
+
ctx.body = { success: false, error: "获取机器人数据失败" };
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
// Bot 连接/断开
|
|
216
|
+
router.post("/api/kook/bots/:name/connect", async (ctx) => {
|
|
217
|
+
try {
|
|
218
|
+
const bot = kook.bots.get(ctx.params.name);
|
|
219
|
+
if (!bot) {
|
|
220
|
+
ctx.status = 404;
|
|
221
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (bot.$connected) {
|
|
225
|
+
ctx.body = { success: true, message: "已经在线" };
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
await bot.$connect();
|
|
229
|
+
ctx.body = { success: true, message: "连接成功" };
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
ctx.status = 500;
|
|
233
|
+
ctx.body = { success: false, error: e?.message || "连接失败" };
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
router.post("/api/kook/bots/:name/disconnect", async (ctx) => {
|
|
237
|
+
try {
|
|
238
|
+
const bot = kook.bots.get(ctx.params.name);
|
|
239
|
+
if (!bot) {
|
|
240
|
+
ctx.status = 404;
|
|
241
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (!bot.$connected) {
|
|
245
|
+
ctx.body = { success: true, message: "已经离线" };
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
await bot.$disconnect();
|
|
249
|
+
ctx.body = { success: true, message: "已断开" };
|
|
250
|
+
}
|
|
251
|
+
catch (e) {
|
|
252
|
+
ctx.status = 500;
|
|
253
|
+
ctx.body = { success: false, error: e?.message || "断开失败" };
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
// 角色列表
|
|
257
|
+
router.get("/api/kook/bots/:name/guilds/:guildId/roles", async (ctx) => {
|
|
258
|
+
try {
|
|
259
|
+
const bot = kook.bots.get(ctx.params.name);
|
|
260
|
+
if (!bot) {
|
|
261
|
+
ctx.status = 404;
|
|
262
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (!bot.$connected) {
|
|
266
|
+
ctx.status = 400;
|
|
267
|
+
ctx.body = { success: false, error: "Bot 未连接" };
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const roles = await bot.getRoleList(ctx.params.guildId);
|
|
271
|
+
ctx.body = {
|
|
272
|
+
success: true,
|
|
273
|
+
data: roles.map((r) => ({
|
|
274
|
+
id: r.role_id,
|
|
275
|
+
name: r.name,
|
|
276
|
+
color: r.color,
|
|
277
|
+
position: r.position,
|
|
278
|
+
})),
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
catch (e) {
|
|
282
|
+
ctx.status = 500;
|
|
283
|
+
ctx.body = { success: false, error: e?.message || "获取角色列表失败" };
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
// 创建角色
|
|
287
|
+
router.post("/api/kook/bots/:name/guilds/:guildId/roles", async (ctx) => {
|
|
288
|
+
try {
|
|
289
|
+
const bot = kook.bots.get(ctx.params.name);
|
|
290
|
+
if (!bot) {
|
|
291
|
+
ctx.status = 404;
|
|
292
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (!bot.$connected) {
|
|
296
|
+
ctx.status = 400;
|
|
297
|
+
ctx.body = { success: false, error: "Bot 未连接" };
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
const { name } = ctx.request.body || {};
|
|
301
|
+
if (!name) {
|
|
302
|
+
ctx.status = 400;
|
|
303
|
+
ctx.body = { success: false, error: "缺少角色名称" };
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
const role = await bot.createRole(ctx.params.guildId, name);
|
|
307
|
+
ctx.body = { success: true, data: { id: role.role_id, name: role.name } };
|
|
308
|
+
}
|
|
309
|
+
catch (e) {
|
|
310
|
+
ctx.status = 500;
|
|
311
|
+
ctx.body = { success: false, error: e?.message || "创建角色失败" };
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
// 删除角色
|
|
315
|
+
router.delete("/api/kook/bots/:name/guilds/:guildId/roles/:roleId", async (ctx) => {
|
|
316
|
+
try {
|
|
317
|
+
const bot = kook.bots.get(ctx.params.name);
|
|
318
|
+
if (!bot) {
|
|
319
|
+
ctx.status = 404;
|
|
320
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
if (!bot.$connected) {
|
|
324
|
+
ctx.status = 400;
|
|
325
|
+
ctx.body = { success: false, error: "Bot 未连接" };
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
const success = await bot.deleteRole(ctx.params.guildId, ctx.params.roleId);
|
|
329
|
+
ctx.body = { success, message: success ? "角色已删除" : "删除失败" };
|
|
330
|
+
}
|
|
331
|
+
catch (e) {
|
|
332
|
+
ctx.status = 500;
|
|
333
|
+
ctx.body = { success: false, error: e?.message || "删除角色失败" };
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
});
|
|
186
337
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/adapter-kook",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.66",
|
|
4
4
|
"description": "Zhin.js adapter for KOOK (开黑啦)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -36,12 +36,30 @@
|
|
|
36
36
|
"kook-client": "latest"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"
|
|
40
|
-
"
|
|
39
|
+
"@types/react": "^19.2.2",
|
|
40
|
+
"@types/react-dom": "^19.2.1",
|
|
41
|
+
"lucide-react": "^0.469.0",
|
|
42
|
+
"typescript": "^6.0.0",
|
|
43
|
+
"@zhin.js/console": "2.0.6",
|
|
44
|
+
"zhin.js": "1.0.64"
|
|
41
45
|
},
|
|
42
46
|
"peerDependencies": {
|
|
43
|
-
"zhin.js": "1.0.
|
|
44
|
-
"@zhin.js/
|
|
47
|
+
"@zhin.js/client": "1.0.16",
|
|
48
|
+
"@zhin.js/console": "2.0.6",
|
|
49
|
+
"@zhin.js/http": "1.0.59",
|
|
50
|
+
"@zhin.js/logger": "0.1.48",
|
|
51
|
+
"zhin.js": "1.0.64"
|
|
52
|
+
},
|
|
53
|
+
"peerDependenciesMeta": {
|
|
54
|
+
"@zhin.js/client": {
|
|
55
|
+
"optional": true
|
|
56
|
+
},
|
|
57
|
+
"@zhin.js/http": {
|
|
58
|
+
"optional": true
|
|
59
|
+
},
|
|
60
|
+
"@zhin.js/console": {
|
|
61
|
+
"optional": true
|
|
62
|
+
}
|
|
45
63
|
},
|
|
46
64
|
"files": [
|
|
47
65
|
"src",
|
|
@@ -49,6 +67,7 @@
|
|
|
49
67
|
"client",
|
|
50
68
|
"dist",
|
|
51
69
|
"skills",
|
|
70
|
+
"plugin.yml",
|
|
52
71
|
"README.md",
|
|
53
72
|
"node",
|
|
54
73
|
"CHANGELOG.md"
|
|
@@ -58,8 +77,8 @@
|
|
|
58
77
|
"registry": "https://registry.npmjs.org"
|
|
59
78
|
},
|
|
60
79
|
"scripts": {
|
|
61
|
-
"build": "
|
|
62
|
-
"clean": "rimraf lib",
|
|
80
|
+
"build": "tsc && (test -f ../../services/console/lib/bin.js && node ../../services/console/lib/bin.js build || echo 'Skipping client build: console not built yet')",
|
|
81
|
+
"clean": "rimraf lib dist",
|
|
63
82
|
"build:node": "tsc"
|
|
64
83
|
}
|
|
65
84
|
}
|
package/plugin.yml
ADDED
package/src/index.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KOOK 适配器入口:类型扩展、导出、注册
|
|
3
3
|
*/
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import { usePlugin, type Plugin, type IGroupManagement, createGroupManagementTools, type ToolFeature } from "zhin.js";
|
|
5
6
|
import { KookAdapter } from "./adapter.js";
|
|
7
|
+
import type { WebServer } from "@zhin.js/console";
|
|
8
|
+
|
|
9
|
+
declare module "zhin.js" {
|
|
10
|
+
namespace Plugin {
|
|
11
|
+
interface Contexts {
|
|
12
|
+
web: WebServer;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
6
16
|
|
|
7
17
|
declare module "zhin.js" {
|
|
8
18
|
interface Adapters {
|
|
@@ -35,7 +45,7 @@ useContext('tool', 'kook', (toolService: ToolFeature, kook: KookAdapter) => {
|
|
|
35
45
|
kook as unknown as IGroupManagement,
|
|
36
46
|
'kook',
|
|
37
47
|
);
|
|
38
|
-
const disposers: (() => void)[] = groupTools.map(t => toolService.addTool(t,
|
|
48
|
+
const disposers: (() => void)[] = groupTools.map(t => toolService.addTool(t, plugin.name));
|
|
39
49
|
|
|
40
50
|
disposers.push(toolService.addTool({
|
|
41
51
|
name: 'kook_grant_role',
|
|
@@ -58,7 +68,7 @@ useContext('tool', 'kook', (toolService: ToolFeature, kook: KookAdapter) => {
|
|
|
58
68
|
const success = await bot.grantRole(args.guild_id, args.user_id, args.role_id);
|
|
59
69
|
return { success, message: success ? `已授予用户 ${args.user_id} 角色 ${args.role_id}` : '授予角色失败' };
|
|
60
70
|
},
|
|
61
|
-
},
|
|
71
|
+
}, plugin.name));
|
|
62
72
|
|
|
63
73
|
disposers.push(toolService.addTool({
|
|
64
74
|
name: 'kook_revoke_role',
|
|
@@ -81,7 +91,7 @@ useContext('tool', 'kook', (toolService: ToolFeature, kook: KookAdapter) => {
|
|
|
81
91
|
const success = await bot.revokeRole(args.guild_id, args.user_id, args.role_id);
|
|
82
92
|
return { success, message: success ? `已撤销用户 ${args.user_id} 的角色 ${args.role_id}` : '撤销角色失败' };
|
|
83
93
|
},
|
|
84
|
-
},
|
|
94
|
+
}, plugin.name));
|
|
85
95
|
|
|
86
96
|
disposers.push(toolService.addTool({
|
|
87
97
|
name: 'kook_list_roles',
|
|
@@ -111,7 +121,7 @@ useContext('tool', 'kook', (toolService: ToolFeature, kook: KookAdapter) => {
|
|
|
111
121
|
count: roles.length,
|
|
112
122
|
};
|
|
113
123
|
},
|
|
114
|
-
},
|
|
124
|
+
}, plugin.name));
|
|
115
125
|
|
|
116
126
|
disposers.push(toolService.addTool({
|
|
117
127
|
name: 'kook_create_role',
|
|
@@ -137,7 +147,7 @@ useContext('tool', 'kook', (toolService: ToolFeature, kook: KookAdapter) => {
|
|
|
137
147
|
role: { id: role.role_id, name: role.name },
|
|
138
148
|
};
|
|
139
149
|
},
|
|
140
|
-
},
|
|
150
|
+
}, plugin.name));
|
|
141
151
|
|
|
142
152
|
disposers.push(toolService.addTool({
|
|
143
153
|
name: 'kook_delete_role',
|
|
@@ -159,7 +169,7 @@ useContext('tool', 'kook', (toolService: ToolFeature, kook: KookAdapter) => {
|
|
|
159
169
|
const success = await bot.deleteRole(args.guild_id, args.role_id);
|
|
160
170
|
return { success, message: success ? `已删除角色 ${args.role_id}` : '删除角色失败' };
|
|
161
171
|
},
|
|
162
|
-
},
|
|
172
|
+
}, plugin.name));
|
|
163
173
|
|
|
164
174
|
disposers.push(toolService.addTool({
|
|
165
175
|
name: 'kook_blacklist',
|
|
@@ -193,7 +203,115 @@ useContext('tool', 'kook', (toolService: ToolFeature, kook: KookAdapter) => {
|
|
|
193
203
|
return { success: false, message: `未知操作: ${args.action}` };
|
|
194
204
|
}
|
|
195
205
|
},
|
|
196
|
-
},
|
|
206
|
+
}, plugin.name));
|
|
197
207
|
|
|
198
208
|
return () => disposers.forEach(d => d());
|
|
199
209
|
});
|
|
210
|
+
|
|
211
|
+
// ── Web 控制台 ─────────────────────────────────────────────────────────
|
|
212
|
+
useContext("web", (web: WebServer) => {
|
|
213
|
+
return web.addEntry(path.resolve(import.meta.dirname, "../client/index.tsx"));
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
useContext("router", "kook", (router: any, kook: KookAdapter) => {
|
|
217
|
+
router.get("/api/kook/bots", async (ctx: any) => {
|
|
218
|
+
try {
|
|
219
|
+
const bots = Array.from(kook.bots.values());
|
|
220
|
+
const result = bots.map((bot: any) => {
|
|
221
|
+
try {
|
|
222
|
+
return {
|
|
223
|
+
name: bot.$config.name,
|
|
224
|
+
connected: bot.$connected || false,
|
|
225
|
+
guildCount: bot.guilds?.size || 0,
|
|
226
|
+
status: bot.$connected ? "online" : "offline",
|
|
227
|
+
};
|
|
228
|
+
} catch {
|
|
229
|
+
return { name: bot.$config.name, connected: false, guildCount: 0, status: "error" };
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
ctx.body = { success: true, data: result };
|
|
233
|
+
} catch {
|
|
234
|
+
ctx.status = 500;
|
|
235
|
+
ctx.body = { success: false, error: "获取机器人数据失败" };
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// Bot 连接/断开
|
|
240
|
+
router.post("/api/kook/bots/:name/connect", async (ctx: any) => {
|
|
241
|
+
try {
|
|
242
|
+
const bot = kook.bots.get(ctx.params.name);
|
|
243
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
244
|
+
if (bot.$connected) { ctx.body = { success: true, message: "已经在线" }; return; }
|
|
245
|
+
await bot.$connect();
|
|
246
|
+
ctx.body = { success: true, message: "连接成功" };
|
|
247
|
+
} catch (e: any) {
|
|
248
|
+
ctx.status = 500;
|
|
249
|
+
ctx.body = { success: false, error: e?.message || "连接失败" };
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
router.post("/api/kook/bots/:name/disconnect", async (ctx: any) => {
|
|
254
|
+
try {
|
|
255
|
+
const bot = kook.bots.get(ctx.params.name);
|
|
256
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
257
|
+
if (!bot.$connected) { ctx.body = { success: true, message: "已经离线" }; return; }
|
|
258
|
+
await bot.$disconnect();
|
|
259
|
+
ctx.body = { success: true, message: "已断开" };
|
|
260
|
+
} catch (e: any) {
|
|
261
|
+
ctx.status = 500;
|
|
262
|
+
ctx.body = { success: false, error: e?.message || "断开失败" };
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// 角色列表
|
|
267
|
+
router.get("/api/kook/bots/:name/guilds/:guildId/roles", async (ctx: any) => {
|
|
268
|
+
try {
|
|
269
|
+
const bot: any = kook.bots.get(ctx.params.name);
|
|
270
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
271
|
+
if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
|
|
272
|
+
const roles = await bot.getRoleList(ctx.params.guildId);
|
|
273
|
+
ctx.body = {
|
|
274
|
+
success: true,
|
|
275
|
+
data: roles.map((r: any) => ({
|
|
276
|
+
id: r.role_id,
|
|
277
|
+
name: r.name,
|
|
278
|
+
color: r.color,
|
|
279
|
+
position: r.position,
|
|
280
|
+
})),
|
|
281
|
+
};
|
|
282
|
+
} catch (e: any) {
|
|
283
|
+
ctx.status = 500;
|
|
284
|
+
ctx.body = { success: false, error: e?.message || "获取角色列表失败" };
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
// 创建角色
|
|
289
|
+
router.post("/api/kook/bots/:name/guilds/:guildId/roles", async (ctx: any) => {
|
|
290
|
+
try {
|
|
291
|
+
const bot: any = kook.bots.get(ctx.params.name);
|
|
292
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
293
|
+
if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
|
|
294
|
+
const { name } = ctx.request.body || {};
|
|
295
|
+
if (!name) { ctx.status = 400; ctx.body = { success: false, error: "缺少角色名称" }; return; }
|
|
296
|
+
const role = await bot.createRole(ctx.params.guildId, name);
|
|
297
|
+
ctx.body = { success: true, data: { id: role.role_id, name: role.name } };
|
|
298
|
+
} catch (e: any) {
|
|
299
|
+
ctx.status = 500;
|
|
300
|
+
ctx.body = { success: false, error: e?.message || "创建角色失败" };
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
// 删除角色
|
|
305
|
+
router.delete("/api/kook/bots/:name/guilds/:guildId/roles/:roleId", async (ctx: any) => {
|
|
306
|
+
try {
|
|
307
|
+
const bot: any = kook.bots.get(ctx.params.name);
|
|
308
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
309
|
+
if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
|
|
310
|
+
const success = await bot.deleteRole(ctx.params.guildId, ctx.params.roleId);
|
|
311
|
+
ctx.body = { success, message: success ? "角色已删除" : "删除失败" };
|
|
312
|
+
} catch (e: any) {
|
|
313
|
+
ctx.status = 500;
|
|
314
|
+
ctx.body = { success: false, error: e?.message || "删除角色失败" };
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
});
|