@zhin.js/adapter-icqq 2.0.4 → 2.0.6
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/ICQQManagement.tsx +78 -70
- package/client/LoginAssistPanel.tsx +153 -181
- package/client/tsconfig.json +1 -1
- package/dist/index.js +1 -1
- package/lib/index.js +9 -9
- package/lib/index.js.map +1 -1
- package/package.json +10 -9
- package/plugin.yml +3 -0
- package/skills/icqq/SKILL.md +6 -0
- package/src/index.ts +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @zhin.js/adapter-icqq
|
|
2
2
|
|
|
3
|
+
## 2.0.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9577eba: fix: tool 收集 bug,升级 ts 到 6.0.2
|
|
8
|
+
- Updated dependencies [9577eba]
|
|
9
|
+
- @zhin.js/client@1.0.16
|
|
10
|
+
- @zhin.js/core@1.1.6
|
|
11
|
+
- zhin.js@1.0.64
|
|
12
|
+
- @zhin.js/console@2.0.6
|
|
13
|
+
- @zhin.js/http@1.0.59
|
|
14
|
+
|
|
15
|
+
## 2.0.5
|
|
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/core@1.1.5
|
|
25
|
+
|
|
3
26
|
## 2.0.4
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
|
@@ -1,29 +1,8 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState
|
|
2
|
-
import { Activity, Bot, LogIn, Users } from "lucide-react";
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { Activity, Bot, LogIn, Users, RefreshCw, Wifi, WifiOff, Loader2 } from "lucide-react";
|
|
3
3
|
import LoginAssistPanel from "./LoginAssistPanel";
|
|
4
4
|
import { apiFetch } from "./utils/api";
|
|
5
5
|
|
|
6
|
-
const shell: CSSProperties = { display: "flex", flexDirection: "column", gap: "1.25rem" };
|
|
7
|
-
const title: CSSProperties = { fontSize: "1.5rem", fontWeight: 700, margin: 0 };
|
|
8
|
-
const sub: CSSProperties = { color: "hsl(var(--muted-foreground))", fontSize: "0.875rem", margin: "0.25rem 0 0" };
|
|
9
|
-
const tabsRow: CSSProperties = { display: "flex", gap: "0.25rem", borderBottom: "1px solid hsl(var(--border))", paddingBottom: 2 };
|
|
10
|
-
const tabBtn = (active: boolean): CSSProperties => ({
|
|
11
|
-
padding: "0.5rem 1rem",
|
|
12
|
-
fontSize: "0.875rem",
|
|
13
|
-
fontWeight: 500,
|
|
14
|
-
border: "none",
|
|
15
|
-
borderRadius: "calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0",
|
|
16
|
-
cursor: "pointer",
|
|
17
|
-
background: active ? "hsl(var(--muted))" : "transparent",
|
|
18
|
-
color: active ? "hsl(var(--foreground))" : "hsl(var(--muted-foreground))",
|
|
19
|
-
});
|
|
20
|
-
const card: CSSProperties = {
|
|
21
|
-
background: "hsl(var(--card))",
|
|
22
|
-
border: "1px solid hsl(var(--border))",
|
|
23
|
-
borderRadius: "var(--radius)",
|
|
24
|
-
padding: "1rem",
|
|
25
|
-
};
|
|
26
|
-
|
|
27
6
|
interface BotRow {
|
|
28
7
|
name: string;
|
|
29
8
|
connected: boolean;
|
|
@@ -33,8 +12,10 @@ interface BotRow {
|
|
|
33
12
|
status: string;
|
|
34
13
|
}
|
|
35
14
|
|
|
15
|
+
type Tab = "overview" | "login";
|
|
16
|
+
|
|
36
17
|
export default function ICQQManagement() {
|
|
37
|
-
const [tab, setTab] = useState<
|
|
18
|
+
const [tab, setTab] = useState<Tab>("overview");
|
|
38
19
|
const [bots, setBots] = useState<BotRow[]>([]);
|
|
39
20
|
const [loading, setLoading] = useState(true);
|
|
40
21
|
const [err, setErr] = useState<string | null>(null);
|
|
@@ -60,79 +41,106 @@ export default function ICQQManagement() {
|
|
|
60
41
|
}, [tab, loadBots]);
|
|
61
42
|
|
|
62
43
|
return (
|
|
63
|
-
<div
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
<
|
|
44
|
+
<div className="p-6 max-w-5xl mx-auto space-y-5">
|
|
45
|
+
{/* Header */}
|
|
46
|
+
<div className="flex items-center justify-between">
|
|
47
|
+
<div>
|
|
48
|
+
<h1 className="text-2xl font-bold flex items-center gap-2">
|
|
49
|
+
<Bot className="w-6 h-6" /> ICQQ 管理
|
|
50
|
+
</h1>
|
|
51
|
+
<p className="text-sm text-muted-foreground mt-1">
|
|
52
|
+
机器人概览与登录辅助(扫码 / 验证码 / 滑块)
|
|
53
|
+
</p>
|
|
54
|
+
</div>
|
|
55
|
+
{tab === "overview" && (
|
|
56
|
+
<button
|
|
57
|
+
onClick={loadBots}
|
|
58
|
+
disabled={loading}
|
|
59
|
+
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"
|
|
60
|
+
>
|
|
61
|
+
<RefreshCw className={`w-4 h-4 ${loading ? "animate-spin" : ""}`} /> 刷新
|
|
62
|
+
</button>
|
|
63
|
+
)}
|
|
67
64
|
</div>
|
|
68
65
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
{/* Tabs */}
|
|
67
|
+
<div className="flex gap-1 border-b">
|
|
68
|
+
<button
|
|
69
|
+
onClick={() => setTab("overview")}
|
|
70
|
+
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${
|
|
71
|
+
tab === "overview"
|
|
72
|
+
? "border-blue-500 text-blue-600"
|
|
73
|
+
: "border-transparent text-gray-500 hover:text-gray-700"
|
|
74
|
+
}`}
|
|
75
|
+
>
|
|
76
|
+
<span className="flex items-center gap-1.5">
|
|
77
|
+
<Bot className="w-4 h-4" /> 概览
|
|
74
78
|
</span>
|
|
75
79
|
</button>
|
|
76
|
-
<button
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
<button
|
|
81
|
+
onClick={() => setTab("login")}
|
|
82
|
+
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${
|
|
83
|
+
tab === "login"
|
|
84
|
+
? "border-blue-500 text-blue-600"
|
|
85
|
+
: "border-transparent text-gray-500 hover:text-gray-700"
|
|
86
|
+
}`}
|
|
87
|
+
>
|
|
88
|
+
<span className="flex items-center gap-1.5">
|
|
89
|
+
<LogIn className="w-4 h-4" /> 登录辅助
|
|
80
90
|
</span>
|
|
81
91
|
</button>
|
|
82
92
|
</div>
|
|
83
93
|
|
|
94
|
+
{/* Overview Tab */}
|
|
84
95
|
{tab === "overview" && (
|
|
85
|
-
|
|
96
|
+
<>
|
|
86
97
|
{err && (
|
|
87
|
-
<div
|
|
98
|
+
<div className="p-3 bg-red-50 text-red-600 rounded border border-red-200 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800">
|
|
99
|
+
{err}
|
|
100
|
+
</div>
|
|
88
101
|
)}
|
|
89
102
|
{loading ? (
|
|
90
|
-
<div
|
|
103
|
+
<div className="flex justify-center py-12">
|
|
104
|
+
<Loader2 className="w-6 h-6 animate-spin text-blue-500" />
|
|
105
|
+
</div>
|
|
91
106
|
) : bots.length === 0 ? (
|
|
92
|
-
<div
|
|
107
|
+
<div className="text-center text-muted-foreground py-12">
|
|
93
108
|
暂无 ICQQ 机器人实例
|
|
94
109
|
</div>
|
|
95
110
|
) : (
|
|
96
|
-
<div
|
|
97
|
-
style={{
|
|
98
|
-
display: "grid",
|
|
99
|
-
gridTemplateColumns: "repeat(auto-fill, minmax(260px, 1fr))",
|
|
100
|
-
gap: "1rem",
|
|
101
|
-
}}
|
|
102
|
-
>
|
|
111
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
103
112
|
{bots.map((b) => (
|
|
104
|
-
<div key={b.name}
|
|
105
|
-
<div
|
|
106
|
-
<
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
{b.connected ? "在线" : "离线"}
|
|
117
|
-
</span>
|
|
113
|
+
<div key={b.name} className="border rounded-lg p-4 bg-card shadow-sm">
|
|
114
|
+
<div className="flex items-center justify-between mb-3">
|
|
115
|
+
<span className="font-medium text-lg">{b.name}</span>
|
|
116
|
+
{b.connected ? (
|
|
117
|
+
<span className="flex items-center gap-1 text-green-600 text-sm">
|
|
118
|
+
<Wifi className="w-4 h-4" /> 在线
|
|
119
|
+
</span>
|
|
120
|
+
) : (
|
|
121
|
+
<span className="flex items-center gap-1 text-gray-400 text-sm">
|
|
122
|
+
<WifiOff className="w-4 h-4" /> 离线
|
|
123
|
+
</span>
|
|
124
|
+
)}
|
|
118
125
|
</div>
|
|
119
|
-
<div
|
|
120
|
-
<
|
|
121
|
-
<Users
|
|
126
|
+
<div className="space-y-2 text-sm text-muted-foreground">
|
|
127
|
+
<div className="flex items-center gap-1.5">
|
|
128
|
+
<Users className="w-3.5 h-3.5" />
|
|
122
129
|
群 {b.groupCount} · 好友 {b.friendCount}
|
|
123
|
-
</
|
|
124
|
-
<
|
|
125
|
-
<Activity
|
|
130
|
+
</div>
|
|
131
|
+
<div className="flex items-center gap-1.5">
|
|
132
|
+
<Activity className="w-3.5 h-3.5" />
|
|
126
133
|
登录方式 {b.loginMode} · {b.status}
|
|
127
|
-
</
|
|
134
|
+
</div>
|
|
128
135
|
</div>
|
|
129
136
|
</div>
|
|
130
137
|
))}
|
|
131
138
|
</div>
|
|
132
139
|
)}
|
|
133
|
-
|
|
140
|
+
</>
|
|
134
141
|
)}
|
|
135
142
|
|
|
143
|
+
{/* Login Tab */}
|
|
136
144
|
{tab === "login" && <LoginAssistPanel />}
|
|
137
145
|
</div>
|
|
138
146
|
);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useEffect,
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
import {
|
|
3
3
|
LogIn,
|
|
4
4
|
QrCode,
|
|
@@ -6,35 +6,11 @@ import {
|
|
|
6
6
|
MousePointer,
|
|
7
7
|
Smartphone,
|
|
8
8
|
AlertCircle,
|
|
9
|
+
Loader2,
|
|
10
|
+
X,
|
|
9
11
|
} from "lucide-react";
|
|
10
12
|
import { apiFetch } from "./utils/api";
|
|
11
13
|
|
|
12
|
-
const card: CSSProperties = {
|
|
13
|
-
background: "hsl(var(--card))",
|
|
14
|
-
color: "hsl(var(--card-foreground))",
|
|
15
|
-
border: "1px solid hsl(var(--border))",
|
|
16
|
-
borderRadius: "var(--radius)",
|
|
17
|
-
};
|
|
18
|
-
const muted: CSSProperties = { color: "hsl(var(--muted-foreground))", fontSize: "0.875rem" };
|
|
19
|
-
const btn: CSSProperties = {
|
|
20
|
-
padding: "0.375rem 0.75rem",
|
|
21
|
-
borderRadius: "calc(var(--radius) - 2px)",
|
|
22
|
-
border: "1px solid hsl(var(--border))",
|
|
23
|
-
background: "hsl(var(--primary))",
|
|
24
|
-
color: "hsl(var(--primary-foreground))",
|
|
25
|
-
cursor: "pointer",
|
|
26
|
-
fontSize: "0.875rem",
|
|
27
|
-
};
|
|
28
|
-
const btnOutline: CSSProperties = { ...btn, background: "transparent", color: "hsl(var(--foreground))" };
|
|
29
|
-
const inputStyle: CSSProperties = {
|
|
30
|
-
padding: "0.5rem 0.75rem",
|
|
31
|
-
borderRadius: "calc(var(--radius) - 2px)",
|
|
32
|
-
border: "1px solid hsl(var(--input))",
|
|
33
|
-
background: "hsl(var(--background))",
|
|
34
|
-
color: "hsl(var(--foreground))",
|
|
35
|
-
maxWidth: "18rem",
|
|
36
|
-
};
|
|
37
|
-
|
|
38
14
|
interface PendingLoginTask {
|
|
39
15
|
id: string;
|
|
40
16
|
adapter: string;
|
|
@@ -49,7 +25,15 @@ interface PendingLoginTask {
|
|
|
49
25
|
createdAt: number;
|
|
50
26
|
}
|
|
51
27
|
|
|
52
|
-
const
|
|
28
|
+
const POLL_BASE_MS = 2_000;
|
|
29
|
+
const POLL_MAX_MS = 15_000;
|
|
30
|
+
|
|
31
|
+
const TYPE_META: Record<string, { icon: React.ReactNode; label: string }> = {
|
|
32
|
+
qrcode: { icon: <QrCode className="w-4 h-4" />, label: "扫码登录" },
|
|
33
|
+
sms: { icon: <MessageSquare className="w-4 h-4" />, label: "短信验证码" },
|
|
34
|
+
device: { icon: <Smartphone className="w-4 h-4" />, label: "设备验证" },
|
|
35
|
+
slider: { icon: <MousePointer className="w-4 h-4" />, label: "滑块验证" },
|
|
36
|
+
};
|
|
53
37
|
|
|
54
38
|
export default function LoginAssistPanel() {
|
|
55
39
|
const [pending, setPending] = useState<PendingLoginTask[]>([]);
|
|
@@ -58,27 +42,45 @@ export default function LoginAssistPanel() {
|
|
|
58
42
|
const [submitting, setSubmitting] = useState<Record<string, boolean>>({});
|
|
59
43
|
const [inputValues, setInputValues] = useState<Record<string, string>>({});
|
|
60
44
|
|
|
45
|
+
/* ── Exponential-backoff polling ── */
|
|
46
|
+
const consecutiveEmptyRef = useRef(0);
|
|
47
|
+
const timerRef = useRef<ReturnType<typeof setTimeout>>();
|
|
48
|
+
|
|
61
49
|
const fetchPending = useCallback(async () => {
|
|
62
50
|
try {
|
|
63
51
|
const res = await apiFetch("/api/login-assist/pending");
|
|
64
52
|
if (!res.ok) throw new Error("获取待办失败");
|
|
65
53
|
const data = (await res.json()) as unknown;
|
|
66
54
|
const list = Array.isArray(data) ? (data as PendingLoginTask[]) : [];
|
|
67
|
-
|
|
55
|
+
const filtered = list.filter((t) => t.adapter === "icqq");
|
|
56
|
+
setPending(filtered);
|
|
68
57
|
setError(null);
|
|
58
|
+
consecutiveEmptyRef.current = filtered.length > 0 ? 0 : consecutiveEmptyRef.current + 1;
|
|
69
59
|
} catch (err) {
|
|
70
60
|
setError((err as Error).message);
|
|
61
|
+
consecutiveEmptyRef.current++;
|
|
71
62
|
} finally {
|
|
72
63
|
setLoading(false);
|
|
73
64
|
}
|
|
74
65
|
}, []);
|
|
75
66
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
const scheduleNext = useCallback(() => {
|
|
68
|
+
const delay = Math.min(
|
|
69
|
+
POLL_BASE_MS * Math.pow(1.5, consecutiveEmptyRef.current),
|
|
70
|
+
POLL_MAX_MS,
|
|
71
|
+
);
|
|
72
|
+
timerRef.current = setTimeout(async () => {
|
|
73
|
+
await fetchPending();
|
|
74
|
+
scheduleNext();
|
|
75
|
+
}, delay);
|
|
80
76
|
}, [fetchPending]);
|
|
81
77
|
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
fetchPending().then(scheduleNext);
|
|
80
|
+
return () => clearTimeout(timerRef.current);
|
|
81
|
+
}, [fetchPending, scheduleNext]);
|
|
82
|
+
|
|
83
|
+
/* ── Actions ── */
|
|
82
84
|
const handleSubmit = async (id: string, value: string | Record<string, unknown>) => {
|
|
83
85
|
setSubmitting((s) => ({ ...s, [id]: true }));
|
|
84
86
|
try {
|
|
@@ -93,6 +95,7 @@ export default function LoginAssistPanel() {
|
|
|
93
95
|
delete next[id];
|
|
94
96
|
return next;
|
|
95
97
|
});
|
|
98
|
+
consecutiveEmptyRef.current = 0;
|
|
96
99
|
await fetchPending();
|
|
97
100
|
} catch (err) {
|
|
98
101
|
setError((err as Error).message);
|
|
@@ -114,178 +117,147 @@ export default function LoginAssistPanel() {
|
|
|
114
117
|
}
|
|
115
118
|
};
|
|
116
119
|
|
|
117
|
-
|
|
118
|
-
qrcode: <QrCode style={{ width: 16, height: 16 }} />,
|
|
119
|
-
sms: <MessageSquare style={{ width: 16, height: 16 }} />,
|
|
120
|
-
device: <Smartphone style={{ width: 16, height: 16 }} />,
|
|
121
|
-
slider: <MousePointer style={{ width: 16, height: 16 }} />,
|
|
122
|
-
};
|
|
123
|
-
const typeLabel: Record<string, string> = {
|
|
124
|
-
qrcode: "扫码登录",
|
|
125
|
-
sms: "短信验证码",
|
|
126
|
-
device: "设备验证",
|
|
127
|
-
slider: "滑块验证",
|
|
128
|
-
other: "其他",
|
|
129
|
-
};
|
|
130
|
-
|
|
120
|
+
/* ── Loading skeleton ── */
|
|
131
121
|
if (loading && pending.length === 0) {
|
|
132
122
|
return (
|
|
133
|
-
<div
|
|
134
|
-
<
|
|
135
|
-
<div style={{ ...card, height: "8rem", opacity: 0.5 }} />
|
|
123
|
+
<div className="flex justify-center py-12">
|
|
124
|
+
<Loader2 className="w-6 h-6 animate-spin text-blue-500" />
|
|
136
125
|
</div>
|
|
137
126
|
);
|
|
138
127
|
}
|
|
139
128
|
|
|
140
129
|
return (
|
|
141
|
-
<div
|
|
142
|
-
<p
|
|
130
|
+
<div className="space-y-4">
|
|
131
|
+
<p className="text-sm text-muted-foreground">
|
|
143
132
|
扫码、短信或滑块等验证会出现在下方;刷新页面后仍可继续处理(仅 ICQQ 待办)。
|
|
144
133
|
</p>
|
|
145
134
|
|
|
146
135
|
{error && (
|
|
147
|
-
<div
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
display: "flex",
|
|
154
|
-
alignItems: "center",
|
|
155
|
-
gap: "0.5rem",
|
|
156
|
-
}}
|
|
157
|
-
>
|
|
158
|
-
<AlertCircle style={{ width: 16, height: 16, flexShrink: 0 }} />
|
|
159
|
-
<span style={{ fontSize: "0.875rem" }}>{error}</span>
|
|
136
|
+
<div className="flex items-center gap-2 p-3 rounded border border-red-200 bg-red-50 text-red-600 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800">
|
|
137
|
+
<AlertCircle className="w-4 h-4 shrink-0" />
|
|
138
|
+
<span>{error}</span>
|
|
139
|
+
<button onClick={() => setError(null)} className="ml-auto">
|
|
140
|
+
<X className="w-3.5 h-3.5" />
|
|
141
|
+
</button>
|
|
160
142
|
</div>
|
|
161
143
|
)}
|
|
162
144
|
|
|
163
145
|
{pending.length === 0 ? (
|
|
164
|
-
<div
|
|
165
|
-
<LogIn
|
|
166
|
-
<h3
|
|
167
|
-
<p
|
|
146
|
+
<div className="border rounded-lg bg-card p-12 text-center">
|
|
147
|
+
<LogIn className="w-16 h-16 mx-auto mb-4 opacity-25" />
|
|
148
|
+
<h3 className="text-lg font-semibold mb-1">暂无待办</h3>
|
|
149
|
+
<p className="text-sm text-muted-foreground">机器人需要验证时,待办将显示在此处</p>
|
|
168
150
|
</div>
|
|
169
151
|
) : (
|
|
170
|
-
<div
|
|
171
|
-
{pending.map((task) =>
|
|
172
|
-
|
|
173
|
-
<
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
gap
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
152
|
+
<div className="space-y-4">
|
|
153
|
+
{pending.map((task) => {
|
|
154
|
+
const meta = TYPE_META[task.type] ?? {
|
|
155
|
+
icon: <LogIn className="w-4 h-4" />,
|
|
156
|
+
label: task.type,
|
|
157
|
+
};
|
|
158
|
+
return (
|
|
159
|
+
<div key={task.id} className="border rounded-lg bg-card p-4 shadow-sm">
|
|
160
|
+
{/* Header */}
|
|
161
|
+
<div className="flex items-start justify-between flex-wrap gap-2 mb-2">
|
|
162
|
+
<div className="flex items-center gap-2 font-semibold">
|
|
163
|
+
{meta.icon} {meta.label}
|
|
164
|
+
</div>
|
|
165
|
+
<div className="flex gap-1 text-xs">
|
|
166
|
+
<span className="px-2 py-0.5 rounded border">{task.adapter}</span>
|
|
167
|
+
<span className="px-2 py-0.5 rounded bg-muted">{task.botId}</span>
|
|
168
|
+
</div>
|
|
186
169
|
</div>
|
|
187
|
-
<div style={{ display: "flex", gap: "0.5rem", fontSize: "0.75rem" }}>
|
|
188
|
-
<span
|
|
189
|
-
style={{
|
|
190
|
-
padding: "0.125rem 0.5rem",
|
|
191
|
-
borderRadius: 4,
|
|
192
|
-
border: "1px solid hsl(var(--border))",
|
|
193
|
-
}}
|
|
194
|
-
>
|
|
195
|
-
{task.adapter}
|
|
196
|
-
</span>
|
|
197
|
-
<span
|
|
198
|
-
style={{
|
|
199
|
-
padding: "0.125rem 0.5rem",
|
|
200
|
-
borderRadius: 4,
|
|
201
|
-
background: "hsl(var(--muted))",
|
|
202
|
-
}}
|
|
203
|
-
>
|
|
204
|
-
{task.botId}
|
|
205
|
-
</span>
|
|
206
|
-
</div>
|
|
207
|
-
</div>
|
|
208
|
-
{task.payload?.message && <p style={{ ...muted, margin: "0 0 1rem" }}>{task.payload.message}</p>}
|
|
209
170
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
justifyContent: "center",
|
|
215
|
-
padding: "1rem",
|
|
216
|
-
background: "hsl(var(--muted) / 0.3)",
|
|
217
|
-
borderRadius: "var(--radius)",
|
|
218
|
-
marginBottom: "1rem",
|
|
219
|
-
}}
|
|
220
|
-
>
|
|
221
|
-
<img
|
|
222
|
-
src={String(task.payload.image)}
|
|
223
|
-
alt="登录二维码"
|
|
224
|
-
style={{ maxWidth: 200, width: "100%", height: "auto" }}
|
|
225
|
-
/>
|
|
226
|
-
</div>
|
|
227
|
-
)}
|
|
171
|
+
{/* Message */}
|
|
172
|
+
{task.payload?.message && (
|
|
173
|
+
<p className="text-sm text-muted-foreground mb-3">{task.payload.message}</p>
|
|
174
|
+
)}
|
|
228
175
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
<
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
>
|
|
238
|
-
|
|
239
|
-
</a>
|
|
240
|
-
</p>
|
|
241
|
-
)}
|
|
176
|
+
{/* QR Code */}
|
|
177
|
+
{task.type === "qrcode" && task.payload?.image && (
|
|
178
|
+
<div className="flex justify-center p-4 bg-muted/30 rounded-lg mb-3">
|
|
179
|
+
<img
|
|
180
|
+
src={String(task.payload.image)}
|
|
181
|
+
alt="登录二维码"
|
|
182
|
+
className="max-w-[200px] w-full h-auto"
|
|
183
|
+
/>
|
|
184
|
+
</div>
|
|
185
|
+
)}
|
|
242
186
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
187
|
+
{/* Slider URL */}
|
|
188
|
+
{task.type === "slider" && task.payload?.url && (
|
|
189
|
+
<p className="text-sm break-all mb-3">
|
|
190
|
+
<span className="text-muted-foreground">滑块链接:</span>{" "}
|
|
191
|
+
<a
|
|
192
|
+
href={String(task.payload.url)}
|
|
193
|
+
target="_blank"
|
|
194
|
+
rel="noopener noreferrer"
|
|
195
|
+
className="text-primary hover:underline"
|
|
196
|
+
>
|
|
197
|
+
{String(task.payload.url)}
|
|
198
|
+
</a>
|
|
199
|
+
</p>
|
|
200
|
+
)}
|
|
201
|
+
|
|
202
|
+
{/* Text input (sms / device / slider ticket) */}
|
|
203
|
+
{(task.type === "sms" || task.type === "device" || task.type === "slider") && (
|
|
204
|
+
<div className="flex flex-wrap gap-2 items-center">
|
|
205
|
+
<input
|
|
206
|
+
className="h-9 px-3 rounded-md border border-input bg-background text-sm max-w-[18rem] flex-1"
|
|
207
|
+
placeholder={task.type === "slider" ? "输入 ticket" : "输入验证码"}
|
|
208
|
+
value={inputValues[task.id] ?? ""}
|
|
209
|
+
onChange={(e) =>
|
|
210
|
+
setInputValues((v) => ({ ...v, [task.id]: e.target.value }))
|
|
211
|
+
}
|
|
212
|
+
onKeyDown={(e) => {
|
|
213
|
+
if (e.key === "Enter") {
|
|
214
|
+
const val = inputValues[task.id]?.trim();
|
|
215
|
+
if (val)
|
|
216
|
+
void handleSubmit(
|
|
217
|
+
task.id,
|
|
218
|
+
task.type === "slider" ? { ticket: val } : val,
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
}}
|
|
222
|
+
/>
|
|
223
|
+
<button
|
|
224
|
+
className="h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50"
|
|
225
|
+
disabled={submitting[task.id] || !inputValues[task.id]?.trim()}
|
|
226
|
+
onClick={() => {
|
|
252
227
|
const val = inputValues[task.id]?.trim();
|
|
253
228
|
if (val)
|
|
254
|
-
void handleSubmit(
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
if (val) void handleSubmit(task.id, task.type === "slider" ? { ticket: val } : val);
|
|
265
|
-
}}
|
|
266
|
-
>
|
|
267
|
-
{submitting[task.id] ? "提交中…" : "提交"}
|
|
268
|
-
</button>
|
|
269
|
-
</div>
|
|
270
|
-
)}
|
|
229
|
+
void handleSubmit(
|
|
230
|
+
task.id,
|
|
231
|
+
task.type === "slider" ? { ticket: val } : val,
|
|
232
|
+
);
|
|
233
|
+
}}
|
|
234
|
+
>
|
|
235
|
+
{submitting[task.id] ? "提交中…" : "提交"}
|
|
236
|
+
</button>
|
|
237
|
+
</div>
|
|
238
|
+
)}
|
|
271
239
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
<
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
240
|
+
{/* QR code actions */}
|
|
241
|
+
{task.type === "qrcode" && (
|
|
242
|
+
<div className="flex gap-2 mt-3">
|
|
243
|
+
<button
|
|
244
|
+
className="h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50"
|
|
245
|
+
disabled={!!submitting[task.id]}
|
|
246
|
+
onClick={() => void handleSubmit(task.id, { done: true })}
|
|
247
|
+
>
|
|
248
|
+
{submitting[task.id] ? "提交中…" : "我已扫码"}
|
|
249
|
+
</button>
|
|
250
|
+
<button
|
|
251
|
+
className="h-9 px-4 rounded-md border text-sm hover:bg-accent transition-colors"
|
|
252
|
+
onClick={() => void handleCancel(task.id)}
|
|
253
|
+
>
|
|
254
|
+
取消
|
|
255
|
+
</button>
|
|
256
|
+
</div>
|
|
257
|
+
)}
|
|
258
|
+
</div>
|
|
259
|
+
);
|
|
260
|
+
})}
|
|
289
261
|
</div>
|
|
290
262
|
)}
|
|
291
263
|
</div>
|
package/client/tsconfig.json
CHANGED
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{addPage as e}from"@zhin.js/client";import{Activity as t,AlertCircle as n,Bot as r,
|
|
1
|
+
import{addPage as e}from"@zhin.js/client";import{Activity as t,AlertCircle as n,Bot as r,Loader2 as i,LogIn as a,MessageSquare as o,MousePointer as s,QrCode as c,RefreshCw as l,Smartphone as u,Users as d,Wifi as f,WifiOff as p,X as m}from"lucide-react";import{useCallback as h,useEffect as g,useRef as _,useState as v}from"react";import{Fragment as y,jsx as b,jsxs as x}from"react/jsx-runtime";var S="zhin_api_token";function C(){return localStorage.getItem(S)}async function w(e2,t2){let n2=C(),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(S),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),i2}var T=2e3,E=15e3,D={qrcode:{icon:b(c,{className:"w-4 h-4"}),label:"扫码登录"},sms:{icon:b(o,{className:"w-4 h-4"}),label:"短信验证码"},device:{icon:b(u,{className:"w-4 h-4"}),label:"设备验证"},slider:{icon:b(s,{className:"w-4 h-4"}),label:"滑块验证"}};function O(){let[e2,t2]=v([]),[r2,o2]=v(true),[s2,c2]=v(null),[l2,u2]=v({}),[d2,f2]=v({}),p2=_(0),y2=_(),S2=h(async()=>{try{let e3=await w("/api/login-assist/pending");if(!e3.ok)throw Error("获取待办失败");let n2=await e3.json(),r3=(Array.isArray(n2)?n2:[]).filter(e4=>e4.adapter==="icqq");t2(r3),c2(null),p2.current=r3.length>0?0:p2.current+1}catch(e3){c2(e3.message),p2.current++}finally{o2(false)}},[]),C2=h(()=>{let e3=Math.min(T*1.5**p2.current,E);y2.current=setTimeout(async()=>{await S2(),C2()},e3)},[S2]);g(()=>(S2().then(C2),()=>clearTimeout(y2.current)),[S2,C2]);let O2=async(e3,t3)=>{u2(t4=>({...t4,[e3]:true}));try{if(!(await w("/api/login-assist/submit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e3,value:t3})})).ok)throw Error("提交失败");f2(t4=>{let n2={...t4};return delete n2[e3],n2}),p2.current=0,await S2()}catch(e4){c2(e4.message)}finally{u2(t4=>({...t4,[e3]:false}))}},k2=async e3=>{try{(await w("/api/login-assist/cancel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e3})})).ok&&await S2()}catch{}};return r2&&e2.length===0?b("div",{className:"flex justify-center py-12",children:b(i,{className:"w-6 h-6 animate-spin text-blue-500"})}):x("div",{className:"space-y-4",children:[b("p",{className:"text-sm text-muted-foreground",children:"扫码、短信或滑块等验证会出现在下方;刷新页面后仍可继续处理(仅 ICQQ 待办)。"}),s2&&x("div",{className:"flex items-center gap-2 p-3 rounded border border-red-200 bg-red-50 text-red-600 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800",children:[b(n,{className:"w-4 h-4 shrink-0"}),b("span",{children:s2}),b("button",{onClick:()=>c2(null),className:"ml-auto",children:b(m,{className:"w-3.5 h-3.5"})})]}),e2.length===0?x("div",{className:"border rounded-lg bg-card p-12 text-center",children:[b(a,{className:"w-16 h-16 mx-auto mb-4 opacity-25"}),b("h3",{className:"text-lg font-semibold mb-1",children:"暂无待办"}),b("p",{className:"text-sm text-muted-foreground",children:"机器人需要验证时,待办将显示在此处"})]}):b("div",{className:"space-y-4",children:e2.map(e3=>{let t3=D[e3.type]??{icon:b(a,{className:"w-4 h-4"}),label:e3.type};return x("div",{className:"border rounded-lg bg-card p-4 shadow-sm",children:[x("div",{className:"flex items-start justify-between flex-wrap gap-2 mb-2",children:[x("div",{className:"flex items-center gap-2 font-semibold",children:[t3.icon," ",t3.label]}),x("div",{className:"flex gap-1 text-xs",children:[b("span",{className:"px-2 py-0.5 rounded border",children:e3.adapter}),b("span",{className:"px-2 py-0.5 rounded bg-muted",children:e3.botId})]})]}),e3.payload?.message&&b("p",{className:"text-sm text-muted-foreground mb-3",children:e3.payload.message}),e3.type==="qrcode"&&e3.payload?.image&&b("div",{className:"flex justify-center p-4 bg-muted/30 rounded-lg mb-3",children:b("img",{src:String(e3.payload.image),alt:"登录二维码",className:"max-w-[200px] w-full h-auto"})}),e3.type==="slider"&&e3.payload?.url&&x("p",{className:"text-sm break-all mb-3",children:[b("span",{className:"text-muted-foreground",children:"滑块链接:"})," ",b("a",{href:String(e3.payload.url),target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:String(e3.payload.url)})]}),(e3.type==="sms"||e3.type==="device"||e3.type==="slider")&&x("div",{className:"flex flex-wrap gap-2 items-center",children:[b("input",{className:"h-9 px-3 rounded-md border border-input bg-background text-sm max-w-[18rem] flex-1",placeholder:e3.type==="slider"?"输入 ticket":"输入验证码",value:d2[e3.id]??"",onChange:t4=>f2(n2=>({...n2,[e3.id]:t4.target.value})),onKeyDown:t4=>{if(t4.key==="Enter"){let t5=d2[e3.id]?.trim();t5&&O2(e3.id,e3.type==="slider"?{ticket:t5}:t5)}}}),b("button",{className:"h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",disabled:l2[e3.id]||!d2[e3.id]?.trim(),onClick:()=>{let t4=d2[e3.id]?.trim();t4&&O2(e3.id,e3.type==="slider"?{ticket:t4}:t4)},children:l2[e3.id]?"提交中…":"提交"})]}),e3.type==="qrcode"&&x("div",{className:"flex gap-2 mt-3",children:[b("button",{className:"h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",disabled:!!l2[e3.id],onClick:()=>void O2(e3.id,{done:true}),children:l2[e3.id]?"提交中…":"我已扫码"}),b("button",{className:"h-9 px-4 rounded-md border text-sm hover:bg-accent transition-colors",onClick:()=>void k2(e3.id),children:"取消"})]})]},e3.id)})})]})}function k(){let[e2,n2]=v("overview"),[o2,s2]=v([]),[c2,u2]=v(true),[m2,_2]=v(null),S2=h(async()=>{u2(true),_2(null);try{let e3=await w("/api/icqq/bots"),t2=await e3.json();if(!e3.ok||!t2.success)throw Error(t2.message||"加载失败");s2(Array.isArray(t2.data)?t2.data:[])}catch(e3){_2(e3.message),s2([])}finally{u2(false)}},[]);return g(()=>{e2==="overview"&&S2()},[e2,S2]),x("div",{className:"p-6 max-w-5xl mx-auto space-y-5",children:[x("div",{className:"flex items-center justify-between",children:[x("div",{children:[x("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[b(r,{className:"w-6 h-6"})," ICQQ 管理"]}),b("p",{className:"text-sm text-muted-foreground mt-1",children:"机器人概览与登录辅助(扫码 / 验证码 / 滑块)"})]}),e2==="overview"&&x("button",{onClick:S2,disabled:c2,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:[b(l,{className:`w-4 h-4 ${c2?"animate-spin":""}`})," 刷新"]})]}),x("div",{className:"flex gap-1 border-b",children:[b("button",{onClick:()=>n2("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${e2==="overview"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:x("span",{className:"flex items-center gap-1.5",children:[b(r,{className:"w-4 h-4"})," 概览"]})}),b("button",{onClick:()=>n2("login"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${e2==="login"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:x("span",{className:"flex items-center gap-1.5",children:[b(a,{className:"w-4 h-4"})," 登录辅助"]})})]}),e2==="overview"&&x(y,{children:[m2&&b("div",{className:"p-3 bg-red-50 text-red-600 rounded border border-red-200 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800",children:m2}),c2?b("div",{className:"flex justify-center py-12",children:b(i,{className:"w-6 h-6 animate-spin text-blue-500"})}):o2.length===0?b("div",{className:"text-center text-muted-foreground py-12",children:"暂无 ICQQ 机器人实例"}):b("div",{className:"grid gap-4 md:grid-cols-2",children:o2.map(e3=>x("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[x("div",{className:"flex items-center justify-between mb-3",children:[b("span",{className:"font-medium text-lg",children:e3.name}),e3.connected?x("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[b(f,{className:"w-4 h-4"})," 在线"]}):x("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[b(p,{className:"w-4 h-4"})," 离线"]})]}),x("div",{className:"space-y-2 text-sm text-muted-foreground",children:[x("div",{className:"flex items-center gap-1.5",children:[b(d,{className:"w-3.5 h-3.5"}),"群 ",e3.groupCount," · 好友 ",e3.friendCount]}),x("div",{className:"flex items-center gap-1.5",children:[b(t,{className:"w-3.5 h-3.5"}),"登录方式 ",e3.loginMode," · ",e3.status]})]})]},e3.name))})]}),e2==="login"&&b(O,{})]})}e({key:"icqq-management",path:"/icqq",title:"ICQQ管理",icon:b(r,{className:"w-5 h-5"}),element:b(k,{})});
|
package/lib/index.js
CHANGED
|
@@ -43,7 +43,7 @@ useContext("icqq", (icqq) => {
|
|
|
43
43
|
});
|
|
44
44
|
useContext("tool", "icqq", (toolService, icqq) => {
|
|
45
45
|
const groupTools = createGroupManagementTools(icqq, "icqq");
|
|
46
|
-
const disposers = groupTools.map(t => toolService.addTool(t,
|
|
46
|
+
const disposers = groupTools.map(t => toolService.addTool(t, plugin.name));
|
|
47
47
|
// 设置头衔
|
|
48
48
|
disposers.push(toolService.addTool({
|
|
49
49
|
name: "icqq_set_title",
|
|
@@ -68,7 +68,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
68
68
|
const success = await bot.setTitle(args.group_id, args.user_id, args.title, args.duration ?? -1);
|
|
69
69
|
return { success, message: success ? `已将 ${args.user_id} 的头衔设为 "${args.title}"` : "设置失败" };
|
|
70
70
|
},
|
|
71
|
-
},
|
|
71
|
+
}, plugin.name));
|
|
72
72
|
// 发送群公告
|
|
73
73
|
disposers.push(toolService.addTool({
|
|
74
74
|
name: "icqq_announce",
|
|
@@ -91,7 +91,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
91
91
|
const success = await bot.sendAnnounce(args.group_id, args.content);
|
|
92
92
|
return { success, message: success ? "群公告已发送" : "发送失败" };
|
|
93
93
|
},
|
|
94
|
-
},
|
|
94
|
+
}, plugin.name));
|
|
95
95
|
// 戳一戳
|
|
96
96
|
disposers.push(toolService.addTool({
|
|
97
97
|
name: "icqq_poke",
|
|
@@ -114,7 +114,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
114
114
|
const success = await bot.pokeMember(args.group_id, args.user_id);
|
|
115
115
|
return { success, message: success ? `已戳了戳 ${args.user_id}` : "戳一戳失败" };
|
|
116
116
|
},
|
|
117
|
-
},
|
|
117
|
+
}, plugin.name));
|
|
118
118
|
// 获取被禁言列表
|
|
119
119
|
disposers.push(toolService.addTool({
|
|
120
120
|
name: "icqq_list_muted",
|
|
@@ -137,7 +137,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
137
137
|
const filtered = mutedList.filter((m) => m !== null);
|
|
138
138
|
return { muted_members: filtered, count: filtered.length };
|
|
139
139
|
},
|
|
140
|
-
},
|
|
140
|
+
}, plugin.name));
|
|
141
141
|
// 给用户点赞
|
|
142
142
|
disposers.push(toolService.addTool({
|
|
143
143
|
name: "icqq_send_user_like",
|
|
@@ -160,7 +160,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
160
160
|
const success = await bot.sendLike(args.user_id, Math.min(args.times ?? 1, 20));
|
|
161
161
|
return { success, message: success ? `已给 ${args.user_id} 点赞` : "发送失败" };
|
|
162
162
|
},
|
|
163
|
-
},
|
|
163
|
+
}, plugin.name));
|
|
164
164
|
// 设置匿名聊天
|
|
165
165
|
disposers.push(toolService.addTool({
|
|
166
166
|
name: "icqq_set_anonymous",
|
|
@@ -184,7 +184,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
184
184
|
const success = await bot.setAnonymous(args.group_id, enable);
|
|
185
185
|
return { success, message: success ? (enable ? "已开启匿名聊天" : "已关闭匿名聊天") : "操作失败" };
|
|
186
186
|
},
|
|
187
|
-
},
|
|
187
|
+
}, plugin.name));
|
|
188
188
|
// 群文件列表
|
|
189
189
|
disposers.push(toolService.addTool({
|
|
190
190
|
name: "icqq_group_files",
|
|
@@ -216,7 +216,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
216
216
|
count: files.length,
|
|
217
217
|
};
|
|
218
218
|
},
|
|
219
|
-
},
|
|
219
|
+
}, plugin.name));
|
|
220
220
|
// 好友列表
|
|
221
221
|
disposers.push(toolService.addTool({
|
|
222
222
|
name: "icqq_friend_list",
|
|
@@ -242,7 +242,7 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
242
242
|
}));
|
|
243
243
|
return { friends: friends.slice(0, 50), count: fl.size };
|
|
244
244
|
},
|
|
245
|
-
},
|
|
245
|
+
}, plugin.name));
|
|
246
246
|
return () => disposers.forEach(d => d());
|
|
247
247
|
});
|
|
248
248
|
useContext("web", (web) => {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAsC,0BAA0B,EAAoB,MAAM,SAAS,CAAC;AAEtH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAe3C,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;AAEzD,OAAO,CAAC;IACN,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,cAAc;IAC3B,OAAO,EAAE,KAAK,EAAE,CAAS,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;QACtC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;CACK,CAAC,CAAC;AAEV,UAAU,CAAC,MAAM,EAAE,CAAC,IAAiB,EAAE,EAAE;IACvC,UAAU,CACR,IAAI,cAAc,CAAS,mBAAmB,CAAC;SAC5C,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACzF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,WAAW;YAAE,KAAK,IAAI,EAAE,CAAC;QAC7B,IAAI,WAAW;YAAE,KAAK,IAAI,EAAE,CAAC;QAC7B,IAAI,WAAW;YAAE,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO,eAAe,KAAK,IAAI,CAAC;IAClC,CAAC,CAAC,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,WAAwB,EAAE,IAAiB,EAAE,EAAE;IACzE,MAAM,UAAU,GAAG,0BAA0B,CAC3C,IAAI,EACJ,MAAM,CACP,CAAC;IACF,MAAM,SAAS,GAAmB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtF,OAAO;IACP,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;gBAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;gBACjD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;gBACpD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;gBAC9C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;aAC1D;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;SAClD;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;YACjG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,WAAW,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7F,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,QAAQ;IACR,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oBAAoB;QACjC,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;gBAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;gBACjD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;aACjD;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;SACzC;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,MAAM;IACN,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;gBAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;gBACjD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;aACxD;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;SACzC;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1E,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,UAAU;IACV,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,oBAAoB;QACjC,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;gBAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;aAClD;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;SAC9B;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC1D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7D,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,QAAQ;IACR,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,yBAAyB;QACtC,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;gBAC/C,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACxD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;aAC1D;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;SAC7B;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1E,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,SAAS;IACT,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;gBAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;gBACjD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE;aACrE;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;SAC9B;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACnF,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,QAAQ;IACR,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;gBAC9C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE;aAChD;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;SAC9B;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,EAAE,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC3D,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBACzC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,CAAC,CAAC,YAAY;oBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC3B,CAAC,CAAC;gBACH,KAAK,EAAE,KAAK,CAAC,MAAM;aACpB,CAAC;QACJ,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,OAAO;IACP,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,YAAY;QACzB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;aAC/C;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;QACD,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBACvD,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3D,CAAC;KACF,EAAE,MAAM,CAAC,CAAC,CAAC;IAEZ,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,KAAK,EAAE,CAAC,GAAc,EAAE,EAAE;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CACzD,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAc,EAAE,IAAiB,EAAE,EAAE;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAoB,CAMvC,CAAC;IACd,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,GAAQ,EAAE,EAAE;YACnD,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,IAAgE,CAAC;YAC3F,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;gBACd,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjB,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACzD,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,IAAuC,CAAC;YAClE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;gBACd,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjB,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;gBAC/D,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,CAAC;oBACH,OAAO;wBACL,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;wBACtB,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;wBAClC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;wBAC7B,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;wBAC9B,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC;wBACzC,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC;wBACtC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;wBACvD,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;wBAC7C,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACvC,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO;wBACL,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;wBACtB,SAAS,EAAE,KAAK;wBAChB,UAAU,EAAE,CAAC;wBACb,WAAW,EAAE,CAAC;wBACd,YAAY,EAAE,CAAC;wBACf,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,SAAS;wBACpB,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,QAAQ;qBAChB,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;YACjB,GAAG,CAAC,IAAI,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBACtF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
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-icqq",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"description": "Zhin.js adapter for ICQQ (QQ Bot)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"client",
|
|
40
40
|
"dist",
|
|
41
41
|
"skills",
|
|
42
|
+
"plugin.yml",
|
|
42
43
|
"README.md",
|
|
43
44
|
"CHANGELOG.md"
|
|
44
45
|
],
|
|
@@ -51,16 +52,16 @@
|
|
|
51
52
|
"@types/react-dom": "^19.2.1",
|
|
52
53
|
"lucide-react": "^0.469.0",
|
|
53
54
|
"radix-ui": "^1.4.3",
|
|
54
|
-
"typescript": "^
|
|
55
|
-
"@zhin.js/console": "2.0.
|
|
56
|
-
"zhin.js": "1.0.
|
|
55
|
+
"typescript": "^6.0.0",
|
|
56
|
+
"@zhin.js/console": "2.0.6",
|
|
57
|
+
"zhin.js": "1.0.64"
|
|
57
58
|
},
|
|
58
59
|
"peerDependencies": {
|
|
59
|
-
"@zhin.js/client": "1.0.
|
|
60
|
-
"@zhin.js/console": "2.0.
|
|
61
|
-
"@zhin.js/core": "1.1.
|
|
62
|
-
"@zhin.js/http": "1.0.
|
|
63
|
-
"zhin.js": "1.0.
|
|
60
|
+
"@zhin.js/client": "1.0.16",
|
|
61
|
+
"@zhin.js/console": "2.0.6",
|
|
62
|
+
"@zhin.js/core": "1.1.6",
|
|
63
|
+
"@zhin.js/http": "1.0.59",
|
|
64
|
+
"zhin.js": "1.0.64"
|
|
64
65
|
},
|
|
65
66
|
"peerDependenciesMeta": {
|
|
66
67
|
"@zhin.js/client": {
|
package/plugin.yml
ADDED
package/skills/icqq/SKILL.md
CHANGED
|
@@ -26,6 +26,9 @@ tools:
|
|
|
26
26
|
- icqq_poke
|
|
27
27
|
- icqq_list_muted
|
|
28
28
|
- icqq_send_user_like
|
|
29
|
+
- icqq_set_anonymous
|
|
30
|
+
- icqq_group_files
|
|
31
|
+
- icqq_friend_list
|
|
29
32
|
# 通用群管工具
|
|
30
33
|
- icqq_kick_member
|
|
31
34
|
- icqq_mute_member
|
|
@@ -47,6 +50,9 @@ tools:
|
|
|
47
50
|
| `icqq_poke` | 戳一戳互动 | user |
|
|
48
51
|
| `icqq_list_muted` | 查询禁言列表 | user |
|
|
49
52
|
| `icqq_send_user_like` | 给用户点赞 | user |
|
|
53
|
+
| `icqq_set_anonymous` | 开启/关闭匿名聊天 | group_admin |
|
|
54
|
+
| `icqq_group_files` | 获取群文件列表 | user |
|
|
55
|
+
| `icqq_friend_list` | 获取好友列表 | user |
|
|
50
56
|
|
|
51
57
|
### 通用群管
|
|
52
58
|
|
package/src/index.ts
CHANGED
|
@@ -64,7 +64,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
64
64
|
icqq,
|
|
65
65
|
"icqq",
|
|
66
66
|
);
|
|
67
|
-
const disposers: (() => void)[] = groupTools.map(t => toolService.addTool(t,
|
|
67
|
+
const disposers: (() => void)[] = groupTools.map(t => toolService.addTool(t, plugin.name));
|
|
68
68
|
|
|
69
69
|
// 设置头衔
|
|
70
70
|
disposers.push(toolService.addTool({
|
|
@@ -89,7 +89,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
89
89
|
const success = await bot.setTitle(args.group_id, args.user_id, args.title, args.duration ?? -1);
|
|
90
90
|
return { success, message: success ? `已将 ${args.user_id} 的头衔设为 "${args.title}"` : "设置失败" };
|
|
91
91
|
},
|
|
92
|
-
},
|
|
92
|
+
}, plugin.name));
|
|
93
93
|
|
|
94
94
|
// 发送群公告
|
|
95
95
|
disposers.push(toolService.addTool({
|
|
@@ -112,7 +112,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
112
112
|
const success = await bot.sendAnnounce(args.group_id, args.content);
|
|
113
113
|
return { success, message: success ? "群公告已发送" : "发送失败" };
|
|
114
114
|
},
|
|
115
|
-
},
|
|
115
|
+
}, plugin.name));
|
|
116
116
|
|
|
117
117
|
// 戳一戳
|
|
118
118
|
disposers.push(toolService.addTool({
|
|
@@ -135,7 +135,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
135
135
|
const success = await bot.pokeMember(args.group_id, args.user_id);
|
|
136
136
|
return { success, message: success ? `已戳了戳 ${args.user_id}` : "戳一戳失败" };
|
|
137
137
|
},
|
|
138
|
-
},
|
|
138
|
+
}, plugin.name));
|
|
139
139
|
|
|
140
140
|
// 获取被禁言列表
|
|
141
141
|
disposers.push(toolService.addTool({
|
|
@@ -158,7 +158,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
158
158
|
const filtered = mutedList.filter((m: any) => m !== null);
|
|
159
159
|
return { muted_members: filtered, count: filtered.length };
|
|
160
160
|
},
|
|
161
|
-
},
|
|
161
|
+
}, plugin.name));
|
|
162
162
|
|
|
163
163
|
// 给用户点赞
|
|
164
164
|
disposers.push(toolService.addTool({
|
|
@@ -181,7 +181,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
181
181
|
const success = await bot.sendLike(args.user_id, Math.min(args.times ?? 1, 20));
|
|
182
182
|
return { success, message: success ? `已给 ${args.user_id} 点赞` : "发送失败" };
|
|
183
183
|
},
|
|
184
|
-
},
|
|
184
|
+
}, plugin.name));
|
|
185
185
|
|
|
186
186
|
// 设置匿名聊天
|
|
187
187
|
disposers.push(toolService.addTool({
|
|
@@ -205,7 +205,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
205
205
|
const success = await bot.setAnonymous(args.group_id, enable);
|
|
206
206
|
return { success, message: success ? (enable ? "已开启匿名聊天" : "已关闭匿名聊天") : "操作失败" };
|
|
207
207
|
},
|
|
208
|
-
},
|
|
208
|
+
}, plugin.name));
|
|
209
209
|
|
|
210
210
|
// 群文件列表
|
|
211
211
|
disposers.push(toolService.addTool({
|
|
@@ -236,7 +236,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
236
236
|
count: files.length,
|
|
237
237
|
};
|
|
238
238
|
},
|
|
239
|
-
},
|
|
239
|
+
}, plugin.name));
|
|
240
240
|
|
|
241
241
|
// 好友列表
|
|
242
242
|
disposers.push(toolService.addTool({
|
|
@@ -262,7 +262,7 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
262
262
|
}));
|
|
263
263
|
return { friends: friends.slice(0, 50), count: fl.size };
|
|
264
264
|
},
|
|
265
|
-
},
|
|
265
|
+
}, plugin.name));
|
|
266
266
|
|
|
267
267
|
return () => disposers.forEach(d => d());
|
|
268
268
|
});
|