@zhin.js/adapter-discord 1.0.87 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +949 -66
- package/PERMITS.md +25 -0
- package/README.md +60 -67
- package/adapters/discord/index.js +41 -0
- package/adapters/discord/index.ts +57 -0
- package/agents/discord/agent.json +20 -0
- package/agents/discord/boundaries.md +3 -0
- package/agents/discord/conventions.md +3 -0
- package/agents/discord/skills/discord/SKILL.md +21 -0
- package/agents/discord/skills/discord/tools/add_role/index.js +24 -0
- package/agents/discord/skills/discord/tools/add_role/index.ts +26 -0
- package/agents/discord/skills/discord/tools/create_thread/index.js +29 -0
- package/agents/discord/skills/discord/tools/create_thread/index.ts +28 -0
- package/agents/discord/skills/discord/tools/forum_post/index.js +33 -0
- package/agents/discord/skills/discord/tools/forum_post/index.ts +33 -0
- package/agents/discord/skills/discord/tools/list_roles/index.js +28 -0
- package/agents/discord/skills/discord/tools/list_roles/index.ts +34 -0
- package/agents/discord/skills/discord/tools/react/index.js +24 -0
- package/agents/discord/skills/discord/tools/react/index.ts +24 -0
- package/agents/discord/skills/discord/tools/remove_role/index.js +24 -0
- package/agents/discord/skills/discord/tools/remove_role/index.ts +26 -0
- package/agents/discord/skills/discord/tools/send_embed/index.js +43 -0
- package/agents/discord/skills/discord/tools/send_embed/index.ts +38 -0
- package/agents/discord/system.md +3 -0
- package/commands/discord/endpoint/add/[id]/index.js +3 -0
- package/commands/discord/endpoint/add/[id]/index.ts +3 -0
- package/commands/discord/endpoint/definition.js +19 -0
- package/commands/discord/endpoint/definition.ts +19 -0
- package/commands/discord/endpoint/list/index.js +3 -0
- package/commands/discord/endpoint/list/index.ts +3 -0
- package/commands/discord/endpoint/remove/[id]/index.js +3 -0
- package/commands/discord/endpoint/remove/[id]/index.ts +3 -0
- package/lib/client.d.ts +16 -0
- package/lib/client.js +8 -0
- package/lib/discord-runtime-state.d.ts +1 -0
- package/lib/discord-runtime-state.js +6 -0
- package/lib/endpoint.d.ts +72 -0
- package/lib/endpoint.js +458 -0
- package/lib/gateway.d.ts +144 -0
- package/lib/gateway.js +303 -0
- package/lib/index.d.ts +6 -18
- package/lib/index.js +6 -323
- package/lib/platform-permit.d.ts +14 -0
- package/lib/platform-permit.js +42 -0
- package/lib/protocol.d.ts +145 -0
- package/lib/protocol.js +320 -0
- package/lib/side-event-dispatch.d.ts +8 -0
- package/lib/side-event-dispatch.js +24 -0
- package/lib/webhook.d.ts +14 -0
- package/lib/webhook.js +88 -0
- package/package.json +74 -30
- package/plugin.js +19 -0
- package/schema.json +205 -0
- package/src/client.ts +24 -0
- package/src/discord-runtime-state.ts +7 -0
- package/src/endpoint.ts +562 -0
- package/src/gateway.ts +426 -0
- package/src/index.ts +57 -323
- package/src/platform-permit.ts +57 -0
- package/src/protocol.ts +475 -0
- package/src/side-event-dispatch.ts +37 -0
- package/src/webhook.ts +123 -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 -17
- package/dist/index.js +0 -29
- package/lib/adapter.d.ts +0 -19
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js +0 -90
- package/lib/adapter.js.map +0 -1
- package/lib/bot-interactions.d.ts +0 -33
- package/lib/bot-interactions.d.ts.map +0 -1
- package/lib/bot-interactions.js +0 -278
- package/lib/bot-interactions.js.map +0 -1
- package/lib/bot.d.ts +0 -117
- package/lib/bot.d.ts.map +0 -1
- package/lib/bot.js +0 -904
- package/lib/bot.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/types.d.ts +0 -49
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/plugin.yml +0 -3
- package/skills/discord/SKILL.md +0 -104
- package/src/adapter.ts +0 -107
- package/src/bot-interactions.ts +0 -348
- package/src/bot.ts +0 -1037
- 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 BotInfo {
|
|
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 [bots, setBots] = useState<BotInfo[]>([])
|
|
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 [selectedBot, setSelectedBot] = 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/bots')
|
|
41
|
-
const json = await res.json()
|
|
42
|
-
if (json.success) setBots(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/bots/${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 (botName: string) => {
|
|
69
|
-
setSelectedBot(botName)
|
|
70
|
-
setGuildsLoading(true)
|
|
71
|
-
setGuilds([])
|
|
72
|
-
try {
|
|
73
|
-
const res = await apiFetch(`/api/discord/bots/${encodeURIComponent(botName)}/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 gatewayBots = bots.filter(b => b.connected && b.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 && !bots.length && !error && (
|
|
116
|
-
<div className="text-center text-gray-500 py-12">暂无 Discord 机器人实例</div>
|
|
117
|
-
)}
|
|
118
|
-
<div className="grid gap-4 md:grid-cols-2">
|
|
119
|
-
{bots.map((bot) => (
|
|
120
|
-
<div key={bot.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">{bot.name}</span>
|
|
123
|
-
{bot.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
|
-
{bot.user && <div className="text-sm text-gray-500 mb-2">@{bot.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">{bot.mode}</span></div>
|
|
130
|
-
<div className="flex justify-between"><span>服务器</span><span className="font-mono">{bot.guildCount}</span></div>
|
|
131
|
-
<div className="flex justify-between"><span>频道</span><span className="font-mono">{bot.channelCount}</span></div>
|
|
132
|
-
</div>
|
|
133
|
-
<div className="flex gap-2">
|
|
134
|
-
<button
|
|
135
|
-
onClick={() => toggleConnect(bot.name, bot.connected)}
|
|
136
|
-
disabled={actionLoading[bot.name]}
|
|
137
|
-
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`}>
|
|
138
|
-
{actionLoading[bot.name]
|
|
139
|
-
? <Loader2 className="w-3.5 h-3.5 animate-spin" />
|
|
140
|
-
: bot.connected ? <PowerOff className="w-3.5 h-3.5" /> : <Power className="w-3.5 h-3.5" />}
|
|
141
|
-
{bot.connected ? '断开' : '连接'}
|
|
142
|
-
</button>
|
|
143
|
-
{bot.connected && bot.mode === 'gateway' && (
|
|
144
|
-
<button onClick={() => { setTab('guilds'); loadGuilds(bot.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
|
-
{gatewayBots.length > 0 && (
|
|
160
|
-
<div className="mb-4 flex items-center gap-2">
|
|
161
|
-
<label className="text-sm text-gray-500">选择机器人:</label>
|
|
162
|
-
<select value={selectedBot} onChange={(e) => loadGuilds(e.target.value)}
|
|
163
|
-
className="border rounded px-2 py-1 text-sm">
|
|
164
|
-
<option value="">--</option>
|
|
165
|
-
{gatewayBots.map(b => <option key={b.name} value={b.name}>{b.name}</option>)}
|
|
166
|
-
</select>
|
|
167
|
-
<span className="text-xs text-gray-400 ml-2">仅 Gateway 模式支持</span>
|
|
168
|
-
</div>
|
|
169
|
-
)}
|
|
170
|
-
{!gatewayBots.length && <div className="text-center text-gray-500 py-8">暂无 Gateway 模式在线机器人</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 && selectedBot && !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/console-types'
|
|
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,17 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import{useEffect as ce,useState as n,useCallback as ne}from"react";var V="zhin_api_token";function J(){return localStorage.getItem(V)}async function T(t,u){let l=J(),f=new Headers(u?.headers);l&&f.set("Authorization",`Bearer ${l}`);let r=await fetch(t,{...u,headers:f});return r.status===401&&(localStorage.removeItem(V),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),r}import{forwardRef as ee,createElement as ae}from"react";var q=(...t)=>t.filter((u,l,f)=>!!u&&u.trim()!==""&&f.indexOf(u)===l).join(" ").trim();var E=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var z=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(u,l,f)=>f?f.toUpperCase():l.toLowerCase());var O=t=>{let u=z(t);return u.charAt(0).toUpperCase()+u.slice(1)};import{forwardRef as Y,createElement as K}from"react";var b={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var N=t=>{for(let u in t)if(u.startsWith("aria-")||u==="role"||u==="title")return!0;return!1};import{createContext as j,useContext as _,useMemo as Pe,createElement as Ae}from"react";var $=j({});var X=()=>_($);var Z=Y(({color:t,size:u,strokeWidth:l,absoluteStrokeWidth:f,className:r="",children:s,iconNode:p,...m},D)=>{let{size:L=24,strokeWidth:C=2,absoluteStrokeWidth:v=!1,color:h="currentColor",className:R=""}=X()??{},g=f??v?Number(l??C)*24/Number(u??L):l??C;return K("svg",{ref:D,...b,width:u??L??b.width,height:u??L??b.height,stroke:t??h,strokeWidth:g,className:q("lucide",R,r),...!s&&!N(m)&&{"aria-hidden":"true"},...m},[...p.map(([y,I])=>K(y,I)),...Array.isArray(s)?s:[s]])});var d=(t,u)=>{let l=ee(({className:f,...r},s)=>ae(Z,{ref:s,iconNode:u,className:q(`lucide-${E(O(t))}`,`lucide-${t}`,f),...r}));return l.displayName=O(t),l};var te=[["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",te);var oe=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],c=d("loader-circle",oe);var ue=[["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",ue);var de=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],w=d("power",de);var le=[["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",le);var fe=[["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",fe);var se=[["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",se);var re=[["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",re);var ie=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],F=d("wifi",ie);import{Fragment as pe,jsx as a,jsxs as o}from"react/jsx-runtime";function H(){let[t,u]=n([]),[l,f]=n(!0),[r,s]=n(""),[p,m]=n("overview"),[D,L]=n({}),[C,v]=n(""),[h,R]=n([]),[g,y]=n(!1),I=ne(async()=>{f(!0),s("");try{let x=await(await T("/api/discord/bots")).json();x.success?u(x.data):s(x.error||"\u83B7\u53D6\u6570\u636E\u5931\u8D25")}catch{s("\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668")}finally{f(!1)}},[]);ce(()=>{I()},[I]);let Q=async(e,x)=>{L(i=>({...i,[e]:!0}));try{let i=x?"disconnect":"connect",W=await(await T(`/api/discord/bots/${encodeURIComponent(e)}/${i}`,{method:"POST"})).json();W.success||s(W.error||"\u64CD\u4F5C\u5931\u8D25"),await I()}catch{s("\u64CD\u4F5C\u5931\u8D25")}finally{L(i=>({...i,[e]:!1}))}},G=async e=>{v(e),y(!0),R([]);try{let i=await(await T(`/api/discord/bots/${encodeURIComponent(e)}/guilds`)).json();i.success?R(i.data):s(i.error||"\u83B7\u53D6\u670D\u52A1\u5668\u5217\u8868\u5931\u8D25")}catch{s("\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 ${p==="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 ${p==="guilds"?"border-indigo-500 text-indigo-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:"\u670D\u52A1\u5668\u5217\u8868"})]}),p==="overview"&&o(pe,{children:[!l&&!t.length&&!r&&a("div",{className:"text-center text-gray-500 py-12",children:"\u6682\u65E0 Discord \u673A\u5668\u4EBA\u5B9E\u4F8B"}),a("div",{className:"grid gap-4 md:grid-cols-2",children:t.map(e=>o("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[o("div",{className:"flex items-center justify-between mb-3",children:[a("span",{className:"font-medium text-lg",children:e.name}),e.connected?o("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[a(F,{className:"w-4 h-4"})," \u5728\u7EBF"]}):o("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[a(M,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),e.user&&o("div",{className:"text-sm text-gray-500 mb-2",children:["@",e.user.tag]}),o("div",{className:"grid grid-cols-2 gap-2 text-sm text-gray-600 mb-3",children:[o("div",{className:"flex justify-between",children:[a("span",{children:"\u6A21\u5F0F"}),a("span",{className:"font-mono",children:e.mode})]}),o("div",{className:"flex justify-between",children:[a("span",{children:"\u670D\u52A1\u5668"}),a("span",{className:"font-mono",children:e.guildCount})]}),o("div",{className:"flex justify-between",children:[a("span",{children:"\u9891\u9053"}),a("span",{className:"font-mono",children:e.channelCount})]})]}),o("div",{className:"flex gap-2",children:[o("button",{onClick:()=>Q(e.name,e.connected),disabled:D[e.name],className:`flex items-center gap-1 px-3 py-1.5 rounded text-sm text-white ${e.connected?"bg-red-500 hover:bg-red-600":"bg-green-500 hover:bg-green-600"} disabled:opacity-50`,children:[D[e.name]?a(c,{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))})]}),p==="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\u673A\u5668\u4EBA"}),g&&a("div",{className:"flex justify-center py-8",children:a(c,{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 ha(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{ha 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.16.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
|
-
*/
|
package/lib/adapter.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Adapter, Plugin } from "zhin.js";
|
|
2
|
-
import { DiscordBot } from "./bot.js";
|
|
3
|
-
import { DiscordInteractionsBot } from "./bot-interactions.js";
|
|
4
|
-
import type { DiscordBotConfig } from "./types.js";
|
|
5
|
-
export type DiscordBotLike = DiscordBot | DiscordInteractionsBot;
|
|
6
|
-
export declare class DiscordAdapter extends Adapter<DiscordBotLike> {
|
|
7
|
-
#private;
|
|
8
|
-
constructor(plugin: Plugin);
|
|
9
|
-
createBot(config: DiscordBotConfig): DiscordBotLike;
|
|
10
|
-
kickMember(botId: string, sceneId: string, userId: string): Promise<boolean>;
|
|
11
|
-
banMember(botId: string, sceneId: string, userId: string, reason?: string): Promise<boolean>;
|
|
12
|
-
unbanMember(botId: string, sceneId: string, userId: string): Promise<boolean>;
|
|
13
|
-
muteMember(botId: string, sceneId: string, userId: string, duration?: number): Promise<boolean>;
|
|
14
|
-
setMemberNickname(botId: string, sceneId: string, userId: string, nickname: string): Promise<boolean>;
|
|
15
|
-
listMembers(botId: string, sceneId: string): Promise<any[]>;
|
|
16
|
-
getGroupInfo(botId: string, sceneId: string): Promise<any>;
|
|
17
|
-
start(): Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=adapter.d.ts.map
|
package/lib/adapter.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,OAAO,EACP,MAAM,EACP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,sBAAsB,CAAC;AAMjE,qBAAa,cAAe,SAAQ,OAAO,CAAC,cAAc,CAAC;;gBAG7C,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc;IAiB7C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOzD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAOzE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAO1D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAM;IAOzE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAOlF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAO1C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAO3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW7B"}
|
package/lib/adapter.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Adapter, } from "zhin.js";
|
|
2
|
-
import { DiscordBot } from "./bot.js";
|
|
3
|
-
import { DiscordInteractionsBot } from "./bot-interactions.js";
|
|
4
|
-
function isGatewayBot(bot) {
|
|
5
|
-
return bot.$config.connection === "gateway";
|
|
6
|
-
}
|
|
7
|
-
export class DiscordAdapter extends Adapter {
|
|
8
|
-
#router;
|
|
9
|
-
constructor(plugin) {
|
|
10
|
-
super(plugin, "discord", []);
|
|
11
|
-
}
|
|
12
|
-
createBot(config) {
|
|
13
|
-
const connection = config.connection ?? "gateway";
|
|
14
|
-
switch (connection) {
|
|
15
|
-
case "gateway":
|
|
16
|
-
return new DiscordBot(this, config);
|
|
17
|
-
case "interactions":
|
|
18
|
-
if (!this.#router) {
|
|
19
|
-
throw new Error("Discord connection: interactions 需要 router,请安装并在配置中启用 @zhin.js/http");
|
|
20
|
-
}
|
|
21
|
-
return new DiscordInteractionsBot(this, this.#router, config);
|
|
22
|
-
default:
|
|
23
|
-
throw new Error(`Unknown Discord connection: ${config.connection}`);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
async kickMember(botId, sceneId, userId) {
|
|
27
|
-
const bot = this.bots.get(botId);
|
|
28
|
-
if (!bot)
|
|
29
|
-
throw new Error(`Bot ${botId} 不存在`);
|
|
30
|
-
if (!isGatewayBot(bot))
|
|
31
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
32
|
-
return bot.kickMember(sceneId, userId);
|
|
33
|
-
}
|
|
34
|
-
async banMember(botId, sceneId, userId, reason) {
|
|
35
|
-
const bot = this.bots.get(botId);
|
|
36
|
-
if (!bot)
|
|
37
|
-
throw new Error(`Bot ${botId} 不存在`);
|
|
38
|
-
if (!isGatewayBot(bot))
|
|
39
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
40
|
-
return bot.banMember(sceneId, userId, reason);
|
|
41
|
-
}
|
|
42
|
-
async unbanMember(botId, sceneId, userId) {
|
|
43
|
-
const bot = this.bots.get(botId);
|
|
44
|
-
if (!bot)
|
|
45
|
-
throw new Error(`Bot ${botId} 不存在`);
|
|
46
|
-
if (!isGatewayBot(bot))
|
|
47
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
48
|
-
return bot.unbanMember(sceneId, userId);
|
|
49
|
-
}
|
|
50
|
-
async muteMember(botId, sceneId, userId, duration = 600) {
|
|
51
|
-
const bot = this.bots.get(botId);
|
|
52
|
-
if (!bot)
|
|
53
|
-
throw new Error(`Bot ${botId} 不存在`);
|
|
54
|
-
if (!isGatewayBot(bot))
|
|
55
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
56
|
-
return bot.timeoutMember(sceneId, userId, duration);
|
|
57
|
-
}
|
|
58
|
-
async setMemberNickname(botId, sceneId, userId, nickname) {
|
|
59
|
-
const bot = this.bots.get(botId);
|
|
60
|
-
if (!bot)
|
|
61
|
-
throw new Error(`Bot ${botId} 不存在`);
|
|
62
|
-
if (!isGatewayBot(bot))
|
|
63
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
64
|
-
return bot.setNickname(sceneId, userId, nickname);
|
|
65
|
-
}
|
|
66
|
-
async listMembers(botId, sceneId) {
|
|
67
|
-
const bot = this.bots.get(botId);
|
|
68
|
-
if (!bot)
|
|
69
|
-
throw new Error(`Bot ${botId} 不存在`);
|
|
70
|
-
if (!isGatewayBot(bot))
|
|
71
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
72
|
-
return bot.getMembers(sceneId);
|
|
73
|
-
}
|
|
74
|
-
async getGroupInfo(botId, sceneId) {
|
|
75
|
-
const bot = this.bots.get(botId);
|
|
76
|
-
if (!bot)
|
|
77
|
-
throw new Error(`Bot ${botId} 不存在`);
|
|
78
|
-
if (!isGatewayBot(bot))
|
|
79
|
-
throw new Error("群管仅支持 connection: gateway");
|
|
80
|
-
return bot.getGuildInfo(sceneId);
|
|
81
|
-
}
|
|
82
|
-
async start() {
|
|
83
|
-
this.#router = this.plugin.inject("router");
|
|
84
|
-
this.plugin.useContext("router", (router) => {
|
|
85
|
-
this.#router = router;
|
|
86
|
-
});
|
|
87
|
-
await super.start();
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=adapter.js.map
|
package/lib/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,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Discord Interactions Bot 实现
|
|
3
|
-
*/
|
|
4
|
-
import { Client } from "discord.js";
|
|
5
|
-
import { Bot, Message, SendOptions } from "zhin.js";
|
|
6
|
-
import type { DiscordInteractionsConfig } from "./types.js";
|
|
7
|
-
import type { DiscordAdapter } from "./adapter.js";
|
|
8
|
-
export declare class DiscordInteractionsBot extends Client implements Bot<DiscordInteractionsConfig, any> {
|
|
9
|
-
adapter: DiscordAdapter;
|
|
10
|
-
$config: DiscordInteractionsConfig;
|
|
11
|
-
$connected: boolean;
|
|
12
|
-
private router;
|
|
13
|
-
private slashCommandHandlers;
|
|
14
|
-
get pluginLogger(): import("zhin.js").Logger;
|
|
15
|
-
get $id(): string;
|
|
16
|
-
constructor(adapter: DiscordAdapter, router: import("@zhin.js/http").Router, $config: DiscordInteractionsConfig);
|
|
17
|
-
private setupInteractionsEndpoint;
|
|
18
|
-
private handleInteraction;
|
|
19
|
-
private verifyDiscordSignature;
|
|
20
|
-
private handleApplicationCommand;
|
|
21
|
-
private formatInteractionAsMessage;
|
|
22
|
-
private formatSendContent;
|
|
23
|
-
$connect(): Promise<void>;
|
|
24
|
-
$disconnect(): Promise<void>;
|
|
25
|
-
private registerSlashCommands;
|
|
26
|
-
addSlashCommandHandler(commandName: string, handler: (interaction: any) => Promise<void>): void;
|
|
27
|
-
removeSlashCommandHandler(commandName: string): boolean;
|
|
28
|
-
private getActivityType;
|
|
29
|
-
$formatMessage(msg: any): Message<any>;
|
|
30
|
-
$sendMessage(options: SendOptions): Promise<string>;
|
|
31
|
-
$recallMessage(id: string): Promise<void>;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=bot-interactions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bot-interactions.d.ts","sourceRoot":"","sources":["../src/bot-interactions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,MAAM,EAiBP,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAwC,MAAM,SAAS,CAAC;AAE1F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,qBAAa,sBACX,SAAQ,MACR,YAAW,GAAG,CAAC,yBAAyB,EAAE,GAAG,CAAC;IAgB3B,OAAO,EAAE,cAAc;IAAiD,OAAO,EAAE,yBAAyB;IAf7H,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,oBAAoB,CAGd;IAEd,IAAI,YAAY,6BAEf;IAED,IAAI,GAAG,WAEN;gBAEkB,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,eAAe,EAAE,MAAM,EAAS,OAAO,EAAE,yBAAyB;IAe7H,OAAO,CAAC,yBAAyB;YAOnB,iBAAiB;IAoC/B,OAAO,CAAC,sBAAsB;YAiBhB,wBAAwB;IA+BtC,OAAO,CAAC,0BAA0B;IAuClC,OAAO,CAAC,iBAAiB;IAuCnB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCzB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;YAgBpB,qBAAqB;IAsBnC,sBAAsB,CACpB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,WAAW,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAC3C,IAAI;IAKP,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKvD,OAAO,CAAC,eAAe;IAYvB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIhC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAChD"}
|