@zhin.js/adapter-telegram 1.0.49 → 1.0.51
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 +295 -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 +180 -11
- package/lib/index.js.map +1 -1
- package/package.json +26 -7
- package/plugin.yml +3 -0
- package/src/index.ts +137 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.51
|
|
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.50
|
|
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.49
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { useEffect, useState, useCallback } from 'react'
|
|
2
|
+
import { apiFetch } from './utils/api'
|
|
3
|
+
import { RefreshCw, Server, Wifi, WifiOff, Power, PowerOff, Loader2, Link2, BarChart3, ShieldCheck, Plus, X } from 'lucide-react'
|
|
4
|
+
|
|
5
|
+
interface BotInfo {
|
|
6
|
+
name: string
|
|
7
|
+
connected: boolean
|
|
8
|
+
mode: string
|
|
9
|
+
status: string
|
|
10
|
+
botInfo: { username: string; firstName: string } | null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface Admin {
|
|
14
|
+
user_id: number
|
|
15
|
+
username: string
|
|
16
|
+
first_name: string
|
|
17
|
+
status: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type Tab = 'overview' | 'actions'
|
|
21
|
+
|
|
22
|
+
export default function TelegramDashboard() {
|
|
23
|
+
const [bots, setBots] = useState<BotInfo[]>([])
|
|
24
|
+
const [loading, setLoading] = useState(true)
|
|
25
|
+
const [error, setError] = useState('')
|
|
26
|
+
const [tab, setTab] = useState<Tab>('overview')
|
|
27
|
+
const [actionLoading, setActionLoading] = useState<Record<string, boolean>>({})
|
|
28
|
+
|
|
29
|
+
// Quick actions state
|
|
30
|
+
const [selectedBot, setSelectedBot] = useState('')
|
|
31
|
+
const [chatId, setChatId] = useState('')
|
|
32
|
+
const [inviteResult, setInviteResult] = useState('')
|
|
33
|
+
const [admins, setAdmins] = useState<Admin[]>([])
|
|
34
|
+
const [adminsLoading, setAdminsLoading] = useState(false)
|
|
35
|
+
|
|
36
|
+
// Poll state
|
|
37
|
+
const [pollQuestion, setPollQuestion] = useState('')
|
|
38
|
+
const [pollOptions, setPollOptions] = useState(['', ''])
|
|
39
|
+
const [pollAnonymous, setPollAnonymous] = useState(true)
|
|
40
|
+
const [pollMultiple, setPollMultiple] = useState(false)
|
|
41
|
+
const [pollResult, setPollResult] = useState('')
|
|
42
|
+
const [pollLoading, setPollLoading] = useState(false)
|
|
43
|
+
|
|
44
|
+
const fetchData = useCallback(async () => {
|
|
45
|
+
setLoading(true)
|
|
46
|
+
setError('')
|
|
47
|
+
try {
|
|
48
|
+
const res = await apiFetch('/api/telegram/bots')
|
|
49
|
+
const json = await res.json()
|
|
50
|
+
if (json.success) setBots(json.data)
|
|
51
|
+
else setError(json.error || '获取数据失败')
|
|
52
|
+
} catch {
|
|
53
|
+
setError('无法连接服务器')
|
|
54
|
+
} finally {
|
|
55
|
+
setLoading(false)
|
|
56
|
+
}
|
|
57
|
+
}, [])
|
|
58
|
+
|
|
59
|
+
useEffect(() => { fetchData() }, [fetchData])
|
|
60
|
+
|
|
61
|
+
const toggleConnect = async (name: string, connected: boolean) => {
|
|
62
|
+
setActionLoading(prev => ({ ...prev, [name]: true }))
|
|
63
|
+
try {
|
|
64
|
+
const endpoint = connected ? 'disconnect' : 'connect'
|
|
65
|
+
const res = await apiFetch(`/api/telegram/bots/${encodeURIComponent(name)}/${endpoint}`, { method: 'POST' })
|
|
66
|
+
const json = await res.json()
|
|
67
|
+
if (!json.success) setError(json.error || '操作失败')
|
|
68
|
+
await fetchData()
|
|
69
|
+
} catch {
|
|
70
|
+
setError('操作失败')
|
|
71
|
+
} finally {
|
|
72
|
+
setActionLoading(prev => ({ ...prev, [name]: false }))
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const createInvite = async () => {
|
|
77
|
+
if (!selectedBot || !chatId) return
|
|
78
|
+
setInviteResult('')
|
|
79
|
+
try {
|
|
80
|
+
const res = await apiFetch(`/api/telegram/bots/${encodeURIComponent(selectedBot)}/invite`, {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
headers: { 'Content-Type': 'application/json' },
|
|
83
|
+
body: JSON.stringify({ chat_id: chatId }),
|
|
84
|
+
})
|
|
85
|
+
const json = await res.json()
|
|
86
|
+
if (json.success && json.data?.invite_link) setInviteResult(json.data.invite_link)
|
|
87
|
+
else setError(json.error || '创建失败')
|
|
88
|
+
} catch {
|
|
89
|
+
setError('创建邀请链接失败')
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const fetchAdmins = async () => {
|
|
94
|
+
if (!selectedBot || !chatId) return
|
|
95
|
+
setAdminsLoading(true)
|
|
96
|
+
setAdmins([])
|
|
97
|
+
try {
|
|
98
|
+
const res = await apiFetch(`/api/telegram/bots/${encodeURIComponent(selectedBot)}/admins?chat_id=${encodeURIComponent(chatId)}`)
|
|
99
|
+
const json = await res.json()
|
|
100
|
+
if (json.success && Array.isArray(json.data)) setAdmins(json.data)
|
|
101
|
+
else setError(json.error || '获取管理员失败')
|
|
102
|
+
} catch {
|
|
103
|
+
setError('获取管理员失败')
|
|
104
|
+
} finally {
|
|
105
|
+
setAdminsLoading(false)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const sendPoll = async () => {
|
|
110
|
+
if (!selectedBot || !chatId || !pollQuestion) return
|
|
111
|
+
const validOptions = pollOptions.filter(o => o.trim())
|
|
112
|
+
if (validOptions.length < 2) { setError('至少需要 2 个选项'); return }
|
|
113
|
+
setPollLoading(true)
|
|
114
|
+
setPollResult('')
|
|
115
|
+
try {
|
|
116
|
+
const res = await apiFetch(`/api/telegram/bots/${encodeURIComponent(selectedBot)}/poll`, {
|
|
117
|
+
method: 'POST',
|
|
118
|
+
headers: { 'Content-Type': 'application/json' },
|
|
119
|
+
body: JSON.stringify({ chat_id: chatId, question: pollQuestion, options: validOptions, is_anonymous: pollAnonymous, allows_multiple: pollMultiple }),
|
|
120
|
+
})
|
|
121
|
+
const json = await res.json()
|
|
122
|
+
if (json.success) setPollResult(`投票已发送 (ID: ${json.data?.message_id ?? '未知'})`)
|
|
123
|
+
else setError(json.error || '发送失败')
|
|
124
|
+
} catch {
|
|
125
|
+
setError('发送投票失败')
|
|
126
|
+
} finally {
|
|
127
|
+
setPollLoading(false)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const onlineBots = bots.filter(b => b.connected)
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
<div className="p-6 max-w-5xl mx-auto">
|
|
135
|
+
<div className="flex items-center justify-between mb-6">
|
|
136
|
+
<h1 className="text-2xl font-bold flex items-center gap-2">
|
|
137
|
+
<Server className="w-6 h-6" /> Telegram 机器人
|
|
138
|
+
</h1>
|
|
139
|
+
<button onClick={fetchData} disabled={loading}
|
|
140
|
+
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">
|
|
141
|
+
<RefreshCw className={`w-4 h-4 ${loading ? 'animate-spin' : ''}`} /> 刷新
|
|
142
|
+
</button>
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
{error && <div className="mb-4 p-3 bg-red-50 text-red-600 rounded border border-red-200 flex items-center justify-between">
|
|
146
|
+
<span>{error}</span>
|
|
147
|
+
<button onClick={() => setError('')} className="text-red-400 hover:text-red-600"><X className="w-4 h-4" /></button>
|
|
148
|
+
</div>}
|
|
149
|
+
|
|
150
|
+
{/* Tabs */}
|
|
151
|
+
<div className="flex gap-1 mb-6 border-b">
|
|
152
|
+
<button onClick={() => setTab('overview')}
|
|
153
|
+
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'}`}>
|
|
154
|
+
概览
|
|
155
|
+
</button>
|
|
156
|
+
<button onClick={() => setTab('actions')}
|
|
157
|
+
className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${tab === 'actions' ? 'border-sky-500 text-sky-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
|
158
|
+
快捷操作
|
|
159
|
+
</button>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
{/* Overview Tab */}
|
|
163
|
+
{tab === 'overview' && (
|
|
164
|
+
<>
|
|
165
|
+
{!loading && !bots.length && !error && (
|
|
166
|
+
<div className="text-center text-gray-500 py-12">暂无 Telegram 机器人实例</div>
|
|
167
|
+
)}
|
|
168
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
169
|
+
{bots.map((bot) => (
|
|
170
|
+
<div key={bot.name} className="border rounded-lg p-4 bg-card shadow-sm">
|
|
171
|
+
<div className="flex items-center justify-between mb-3">
|
|
172
|
+
<span className="font-medium text-lg">{bot.name}</span>
|
|
173
|
+
{bot.connected
|
|
174
|
+
? <span className="flex items-center gap-1 text-green-600 text-sm"><Wifi className="w-4 h-4" /> 在线</span>
|
|
175
|
+
: <span className="flex items-center gap-1 text-gray-400 text-sm"><WifiOff className="w-4 h-4" /> 离线</span>}
|
|
176
|
+
</div>
|
|
177
|
+
{bot.botInfo && <div className="text-sm text-gray-500 mb-2">@{bot.botInfo.username} ({bot.botInfo.firstName})</div>}
|
|
178
|
+
<div className="text-sm text-gray-600 mb-3">
|
|
179
|
+
<div className="flex justify-between"><span>模式</span><span className="font-mono">{bot.mode}</span></div>
|
|
180
|
+
</div>
|
|
181
|
+
<button
|
|
182
|
+
onClick={() => toggleConnect(bot.name, bot.connected)}
|
|
183
|
+
disabled={actionLoading[bot.name]}
|
|
184
|
+
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`}>
|
|
185
|
+
{actionLoading[bot.name]
|
|
186
|
+
? <Loader2 className="w-3.5 h-3.5 animate-spin" />
|
|
187
|
+
: bot.connected ? <PowerOff className="w-3.5 h-3.5" /> : <Power className="w-3.5 h-3.5" />}
|
|
188
|
+
{bot.connected ? '断开' : '连接'}
|
|
189
|
+
</button>
|
|
190
|
+
</div>
|
|
191
|
+
))}
|
|
192
|
+
</div>
|
|
193
|
+
</>
|
|
194
|
+
)}
|
|
195
|
+
|
|
196
|
+
{/* Quick Actions Tab */}
|
|
197
|
+
{tab === 'actions' && (
|
|
198
|
+
<div className="space-y-6">
|
|
199
|
+
{/* Bot + Chat selector */}
|
|
200
|
+
<div className="flex flex-wrap items-end gap-3">
|
|
201
|
+
<div>
|
|
202
|
+
<label className="block text-xs text-gray-500 mb-1">机器人</label>
|
|
203
|
+
<select value={selectedBot} onChange={(e) => setSelectedBot(e.target.value)}
|
|
204
|
+
className="border rounded px-2 py-1.5 text-sm min-w-[140px]">
|
|
205
|
+
<option value="">--</option>
|
|
206
|
+
{onlineBots.map(b => <option key={b.name} value={b.name}>{b.name}</option>)}
|
|
207
|
+
</select>
|
|
208
|
+
</div>
|
|
209
|
+
<div>
|
|
210
|
+
<label className="block text-xs text-gray-500 mb-1">Chat ID</label>
|
|
211
|
+
<input value={chatId} onChange={(e) => setChatId(e.target.value)} placeholder="-100xxxxxxxxxx"
|
|
212
|
+
className="border rounded px-2 py-1.5 text-sm w-[180px]" />
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
{!onlineBots.length && <div className="text-center text-gray-500 py-4">暂无在线机器人</div>}
|
|
217
|
+
|
|
218
|
+
{selectedBot && chatId && (
|
|
219
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
220
|
+
{/* Invite Link */}
|
|
221
|
+
<div className="border rounded-lg p-4 bg-card shadow-sm">
|
|
222
|
+
<h3 className="font-medium flex items-center gap-2 mb-3"><Link2 className="w-4 h-4 text-sky-500" /> 创建邀请链接</h3>
|
|
223
|
+
<button onClick={createInvite} className="px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600">
|
|
224
|
+
生成链接
|
|
225
|
+
</button>
|
|
226
|
+
{inviteResult && (
|
|
227
|
+
<div className="mt-2 p-2 bg-gray-50 rounded text-sm break-all">
|
|
228
|
+
<a href={inviteResult} target="_blank" rel="noreferrer" className="text-sky-600 hover:underline">{inviteResult}</a>
|
|
229
|
+
</div>
|
|
230
|
+
)}
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
{/* Admin List */}
|
|
234
|
+
<div className="border rounded-lg p-4 bg-card shadow-sm">
|
|
235
|
+
<h3 className="font-medium flex items-center gap-2 mb-3"><ShieldCheck className="w-4 h-4 text-sky-500" /> 管理员列表</h3>
|
|
236
|
+
<button onClick={fetchAdmins} disabled={adminsLoading}
|
|
237
|
+
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">
|
|
238
|
+
{adminsLoading && <Loader2 className="w-3.5 h-3.5 animate-spin" />} 查询
|
|
239
|
+
</button>
|
|
240
|
+
{admins.length > 0 && (
|
|
241
|
+
<div className="mt-2 space-y-1">
|
|
242
|
+
{admins.map(a => (
|
|
243
|
+
<div key={a.user_id} className="flex items-center justify-between text-sm py-1 border-b last:border-0">
|
|
244
|
+
<span>{a.first_name} {a.username ? `(@${a.username})` : ''}</span>
|
|
245
|
+
<span className="text-xs text-gray-400">{a.status}</span>
|
|
246
|
+
</div>
|
|
247
|
+
))}
|
|
248
|
+
</div>
|
|
249
|
+
)}
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
{/* Send Poll */}
|
|
253
|
+
<div className="border rounded-lg p-4 bg-card shadow-sm md:col-span-2">
|
|
254
|
+
<h3 className="font-medium flex items-center gap-2 mb-3"><BarChart3 className="w-4 h-4 text-sky-500" /> 发起投票</h3>
|
|
255
|
+
<div className="space-y-2">
|
|
256
|
+
<input value={pollQuestion} onChange={(e) => setPollQuestion(e.target.value)} placeholder="投票问题"
|
|
257
|
+
className="border rounded px-2 py-1.5 text-sm w-full" />
|
|
258
|
+
{pollOptions.map((opt, i) => (
|
|
259
|
+
<div key={i} className="flex items-center gap-2">
|
|
260
|
+
<input value={opt} onChange={(e) => {
|
|
261
|
+
const next = [...pollOptions]; next[i] = e.target.value; setPollOptions(next)
|
|
262
|
+
}} placeholder={`选项 ${i + 1}`}
|
|
263
|
+
className="border rounded px-2 py-1.5 text-sm flex-1" />
|
|
264
|
+
{pollOptions.length > 2 && (
|
|
265
|
+
<button onClick={() => setPollOptions(pollOptions.filter((_, j) => j !== i))}
|
|
266
|
+
className="text-gray-400 hover:text-red-500"><X className="w-4 h-4" /></button>
|
|
267
|
+
)}
|
|
268
|
+
</div>
|
|
269
|
+
))}
|
|
270
|
+
<button onClick={() => setPollOptions([...pollOptions, ''])}
|
|
271
|
+
className="flex items-center gap-1 text-sm text-sky-500 hover:text-sky-600">
|
|
272
|
+
<Plus className="w-3.5 h-3.5" /> 添加选项
|
|
273
|
+
</button>
|
|
274
|
+
<div className="flex items-center gap-4 text-sm text-gray-600">
|
|
275
|
+
<label className="flex items-center gap-1">
|
|
276
|
+
<input type="checkbox" checked={pollAnonymous} onChange={(e) => setPollAnonymous(e.target.checked)} /> 匿名
|
|
277
|
+
</label>
|
|
278
|
+
<label className="flex items-center gap-1">
|
|
279
|
+
<input type="checkbox" checked={pollMultiple} onChange={(e) => setPollMultiple(e.target.checked)} /> 多选
|
|
280
|
+
</label>
|
|
281
|
+
</div>
|
|
282
|
+
<button onClick={sendPoll} disabled={pollLoading || !pollQuestion}
|
|
283
|
+
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">
|
|
284
|
+
{pollLoading && <Loader2 className="w-3.5 h-3.5 animate-spin" />} 发送投票
|
|
285
|
+
</button>
|
|
286
|
+
{pollResult && <div className="text-sm text-green-600">{pollResult}</div>}
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
)}
|
|
291
|
+
</div>
|
|
292
|
+
)}
|
|
293
|
+
</div>
|
|
294
|
+
)
|
|
295
|
+
}
|
package/client/index.tsx
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { addPage } from '@zhin.js/client'
|
|
2
|
+
import { Send } from 'lucide-react'
|
|
3
|
+
import TelegramDashboard from './Dashboard'
|
|
4
|
+
|
|
5
|
+
addPage({
|
|
6
|
+
key: 'telegram-management',
|
|
7
|
+
path: '/telegram',
|
|
8
|
+
title: 'Telegram',
|
|
9
|
+
icon: <Send className="w-5 h-5" />,
|
|
10
|
+
element: <TelegramDashboard />,
|
|
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{BarChart3 as t,Link2 as n,Loader2 as r,Plus as i,Power as a,PowerOff as o,RefreshCw as s,Send as c,Server as l,ShieldCheck as ee,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,c2]=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([]),[I,L]=h(false),[R,z]=h(""),[B,V]=h(["",""]),[H,U]=h(true),[W,G]=h(false),[K,q]=h(""),[J,Y]=h(false),X=p(async()=>{b2(true),C("");try{let e3=await(await x("/api/telegram/bots")).json();e3.success?c2(e3.data):C(e3.error||"获取数据失败")}catch{C("无法连接服务器")}finally{b2(false)}},[]);m(()=>{X()},[X]);let Z=async(e3,t2)=>{D(t3=>({...t3,[e3]:true}));try{let n2=t2?"disconnect":"connect",r2=await(await x(`/api/telegram/bots/${encodeURIComponent(e3)}/${n2}`,{method:"POST"})).json();r2.success||C(r2.error||"操作失败"),await X()}catch{C("操作失败")}finally{D(t3=>({...t3,[e3]:false}))}},Q=async()=>{if(!(!O||!A)){N("");try{let e3=await(await x(`/api/telegram/bots/${encodeURIComponent(O)}/invite`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:A})})).json();e3.success&&e3.data?.invite_link?N(e3.data.invite_link):C(e3.error||"创建失败")}catch{C("创建邀请链接失败")}}},te=async()=>{if(!(!O||!A)){L(true),F([]);try{let e3=await(await x(`/api/telegram/bots/${encodeURIComponent(O)}/admins?chat_id=${encodeURIComponent(A)}`)).json();e3.success&&Array.isArray(e3.data)?F(e3.data):C(e3.error||"获取管理员失败")}catch{C("获取管理员失败")}finally{L(false)}}},ne=async()=>{if(!O||!A||!R)return;let e3=B.filter(e4=>e4.trim());if(e3.length<2){C("至少需要 2 个选项");return}Y(true),q("");try{let t2=await(await x(`/api/telegram/bots/${encodeURIComponent(O)}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:A,question:R,options:e3,is_anonymous:H,allows_multiple:W})})).json();t2.success?q(`投票已发送 (ID: ${t2.data?.message_id??"未知"})`):C(t2.error||"发送失败")}catch{C("发送投票失败")}finally{Y(false)}},$=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:[_(l,{className:"w-6 h-6"})," Telegram 机器人"]}),v("button",{onClick:X,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:[_(s,{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("actions"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${w==="actions"?"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:"暂无 Telegram 机器人实例"}),_("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"})," 离线"]})]}),e3.botInfo&&v("div",{className:"text-sm text-gray-500 mb-2",children:["@",e3.botInfo.username," (",e3.botInfo.firstName,")"]}),_("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.mode})]})}),v("button",{onClick:()=>Z(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]?_(r,{className:"w-3.5 h-3.5 animate-spin"}):e3.connected?_(o,{className:"w-3.5 h-3.5"}):_(a,{className:"w-3.5 h-3.5"}),e3.connected?"断开":"连接"]})]},e3.name))})]}),w==="actions"&&v("div",{className:"space-y-6",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:"--"}),$.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:"Chat ID"}),_("input",{value:A,onChange:e3=>j(e3.target.value),placeholder:"-100xxxxxxxxxx",className:"border rounded px-2 py-1.5 text-sm w-[180px]"})]})]}),!$.length&&_("div",{className:"text-center text-gray-500 py-4",children:"暂无在线机器人"}),O&&A&&v("div",{className:"grid gap-4 md:grid-cols-2",children:[v("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[v("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[_(n,{className:"w-4 h-4 text-sky-500"})," 创建邀请链接"]}),_("button",{onClick:Q,className:"px-3 py-1.5 rounded bg-sky-500 text-white text-sm hover:bg-sky-600",children:"生成链接"}),M&&_("div",{className:"mt-2 p-2 bg-gray-50 rounded text-sm break-all",children:_("a",{href:M,target:"_blank",rel:"noreferrer",className:"text-sky-600 hover:underline",children:M})})]}),v("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[v("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[_(ee,{className:"w-4 h-4 text-sky-500"})," 管理员列表"]}),v("button",{onClick:te,disabled:I,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:[I&&_(r,{className:"w-3.5 h-3.5 animate-spin"})," 查询"]}),P.length>0&&_("div",{className:"mt-2 space-y-1",children:P.map(e3=>v("div",{className:"flex items-center justify-between text-sm py-1 border-b last:border-0",children:[v("span",{children:[e3.first_name," ",e3.username?`(@${e3.username})`:""]}),_("span",{className:"text-xs text-gray-400",children:e3.status})]},e3.user_id))})]}),v("div",{className:"border rounded-lg p-4 bg-card shadow-sm md:col-span-2",children:[v("h3",{className:"font-medium flex items-center gap-2 mb-3",children:[_(t,{className:"w-4 h-4 text-sky-500"})," 发起投票"]}),v("div",{className:"space-y-2",children:[_("input",{value:R,onChange:e3=>z(e3.target.value),placeholder:"投票问题",className:"border rounded px-2 py-1.5 text-sm w-full"}),B.map((e3,t2)=>v("div",{className:"flex items-center gap-2",children:[_("input",{value:e3,onChange:e4=>{let n2=[...B];n2[t2]=e4.target.value,V(n2)},placeholder:`选项 ${t2+1}`,className:"border rounded px-2 py-1.5 text-sm flex-1"}),B.length>2&&_("button",{onClick:()=>V(B.filter((e4,n2)=>n2!==t2)),className:"text-gray-400 hover:text-red-500",children:_(f,{className:"w-4 h-4"})})]},t2)),v("button",{onClick:()=>V([...B,""]),className:"flex items-center gap-1 text-sm text-sky-500 hover:text-sky-600",children:[_(i,{className:"w-3.5 h-3.5"})," 添加选项"]}),v("div",{className:"flex items-center gap-4 text-sm text-gray-600",children:[v("label",{className:"flex items-center gap-1",children:[_("input",{type:"checkbox",checked:H,onChange:e3=>U(e3.target.checked)})," 匿名"]}),v("label",{className:"flex items-center gap-1",children:[_("input",{type:"checkbox",checked:W,onChange:e3=>G(e3.target.checked)})," 多选"]})]}),v("button",{onClick:ne,disabled:J||!R,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:[J&&_(r,{className:"w-3.5 h-3.5 animate-spin"})," 发送投票"]}),K&&_("div",{className:"text-sm text-green-600",children:K})]})]})]})]})]})}e({key:"telegram-management",path:"/telegram",title:"Telegram",icon:_(c,{className:"w-5 h-5"}),element:_(S,{})});
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { TelegramAdapter } 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
|
telegram: TelegramAdapter;
|
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,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,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,QAAQ,EAAE,eAAe,CAAC;KAC3B;CACF;AAED,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telegram 适配器入口:类型扩展、导出、注册
|
|
3
3
|
*/
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import { usePlugin, createGroupManagementTools } from "zhin.js";
|
|
5
6
|
import { TelegramAdapter } from "./adapter.js";
|
|
6
7
|
export * from "./types.js";
|
|
@@ -22,7 +23,7 @@ provide({
|
|
|
22
23
|
});
|
|
23
24
|
useContext('tool', 'telegram', (toolService, telegram) => {
|
|
24
25
|
const groupTools = createGroupManagementTools(telegram, 'telegram');
|
|
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: 'telegram_pin_message',
|
|
28
29
|
description: '置顶 Telegram 群组消息',
|
|
@@ -44,7 +45,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
44
45
|
const success = await bot.pinMessage(Number(args.chat_id), Number(args.message_id));
|
|
45
46
|
return { success, message: success ? '消息已置顶' : '操作失败' };
|
|
46
47
|
},
|
|
47
|
-
},
|
|
48
|
+
}, plugin.name));
|
|
48
49
|
disposers.push(toolService.addTool({
|
|
49
50
|
name: 'telegram_unpin_message',
|
|
50
51
|
description: '取消置顶 Telegram 群组消息',
|
|
@@ -66,7 +67,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
66
67
|
const success = await bot.unpinMessage(Number(args.chat_id), args.message_id ? Number(args.message_id) : undefined);
|
|
67
68
|
return { success, message: success ? '已取消置顶' : '操作失败' };
|
|
68
69
|
},
|
|
69
|
-
},
|
|
70
|
+
}, plugin.name));
|
|
70
71
|
disposers.push(toolService.addTool({
|
|
71
72
|
name: 'telegram_list_admins',
|
|
72
73
|
description: '获取 Telegram 群组管理员列表',
|
|
@@ -95,7 +96,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
95
96
|
count: admins.length,
|
|
96
97
|
};
|
|
97
98
|
},
|
|
98
|
-
},
|
|
99
|
+
}, plugin.name));
|
|
99
100
|
disposers.push(toolService.addTool({
|
|
100
101
|
name: 'telegram_member_count',
|
|
101
102
|
description: '获取 Telegram 群组成员数量',
|
|
@@ -116,7 +117,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
116
117
|
const count = await bot.getChatMemberCount(Number(args.chat_id));
|
|
117
118
|
return { count, message: `群组共有 ${count} 名成员` };
|
|
118
119
|
},
|
|
119
|
-
},
|
|
120
|
+
}, plugin.name));
|
|
120
121
|
disposers.push(toolService.addTool({
|
|
121
122
|
name: 'telegram_create_invite',
|
|
122
123
|
description: '创建 Telegram 群组邀请链接',
|
|
@@ -137,7 +138,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
137
138
|
const link = await bot.createInviteLink(Number(args.chat_id));
|
|
138
139
|
return { invite_link: link, message: `邀请链接: ${link}` };
|
|
139
140
|
},
|
|
140
|
-
},
|
|
141
|
+
}, plugin.name));
|
|
141
142
|
disposers.push(toolService.addTool({
|
|
142
143
|
name: 'telegram_send_poll',
|
|
143
144
|
description: '在 Telegram 群组中发起投票',
|
|
@@ -172,7 +173,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
172
173
|
const result = await bot.sendPoll(Number(args.chat_id), args.question, optList, args.is_anonymous ?? true, args.allows_multiple ?? false);
|
|
173
174
|
return { success: true, message_id: result.message_id, message: '投票已发送' };
|
|
174
175
|
},
|
|
175
|
-
},
|
|
176
|
+
}, plugin.name));
|
|
176
177
|
disposers.push(toolService.addTool({
|
|
177
178
|
name: 'telegram_react',
|
|
178
179
|
description: '对 Telegram 消息添加表情反应',
|
|
@@ -195,7 +196,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
195
196
|
const success = await bot.setMessageReaction(Number(args.chat_id), Number(args.message_id), args.reaction);
|
|
196
197
|
return { success, message: success ? `已添加反应 ${args.reaction}` : '操作失败' };
|
|
197
198
|
},
|
|
198
|
-
},
|
|
199
|
+
}, plugin.name));
|
|
199
200
|
disposers.push(toolService.addTool({
|
|
200
201
|
name: 'telegram_send_sticker',
|
|
201
202
|
description: '发送 Telegram 贴纸',
|
|
@@ -217,7 +218,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
217
218
|
const result = await bot.sendStickerMessage(Number(args.chat_id), args.sticker);
|
|
218
219
|
return { success: true, message_id: result.message_id, message: '贴纸已发送' };
|
|
219
220
|
},
|
|
220
|
-
},
|
|
221
|
+
}, plugin.name));
|
|
221
222
|
disposers.push(toolService.addTool({
|
|
222
223
|
name: 'telegram_set_permissions',
|
|
223
224
|
description: '设置 Telegram 群组的默认成员权限',
|
|
@@ -253,7 +254,7 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
253
254
|
const success = await bot.setChatPermissionsAll(Number(chat_id), permissions);
|
|
254
255
|
return { success, message: success ? '群权限已更新' : '操作失败' };
|
|
255
256
|
},
|
|
256
|
-
},
|
|
257
|
+
}, plugin.name));
|
|
257
258
|
disposers.push(toolService.addTool({
|
|
258
259
|
name: 'telegram_set_description',
|
|
259
260
|
description: '设置 Telegram 群组描述',
|
|
@@ -275,7 +276,175 @@ useContext('tool', 'telegram', (toolService, telegram) => {
|
|
|
275
276
|
const success = await bot.setChatDescription(Number(args.chat_id), args.description);
|
|
276
277
|
return { success, message: success ? '群描述已更新' : '操作失败' };
|
|
277
278
|
},
|
|
278
|
-
},
|
|
279
|
+
}, plugin.name));
|
|
279
280
|
return () => disposers.forEach(d => d());
|
|
280
281
|
});
|
|
282
|
+
// ── Web 控制台 ─────────────────────────────────────────────────────────
|
|
283
|
+
useContext("web", (web) => {
|
|
284
|
+
return web.addEntry(path.resolve(import.meta.dirname, "../client/index.tsx"));
|
|
285
|
+
});
|
|
286
|
+
useContext("router", "telegram", (router, telegram) => {
|
|
287
|
+
router.get("/api/telegram/bots", async (ctx) => {
|
|
288
|
+
try {
|
|
289
|
+
const bots = Array.from(telegram.bots.values());
|
|
290
|
+
const result = bots.map((bot) => {
|
|
291
|
+
try {
|
|
292
|
+
return {
|
|
293
|
+
name: bot.$config.name,
|
|
294
|
+
connected: bot.$connected || false,
|
|
295
|
+
mode: bot.$config.polling !== false ? "polling" : "webhook",
|
|
296
|
+
status: bot.$connected ? "online" : "offline",
|
|
297
|
+
botInfo: bot.botInfo ? { username: bot.botInfo.username, firstName: bot.botInfo.first_name } : null,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return { name: bot.$config.name, connected: false, mode: "unknown", status: "error", botInfo: null };
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
ctx.body = { success: true, data: result };
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
ctx.status = 500;
|
|
308
|
+
ctx.body = { success: false, error: "获取机器人数据失败" };
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
// Bot 连接/断开
|
|
312
|
+
router.post("/api/telegram/bots/:name/connect", async (ctx) => {
|
|
313
|
+
try {
|
|
314
|
+
const bot = telegram.bots.get(ctx.params.name);
|
|
315
|
+
if (!bot) {
|
|
316
|
+
ctx.status = 404;
|
|
317
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (bot.$connected) {
|
|
321
|
+
ctx.body = { success: true, message: "已经在线" };
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
await bot.$connect();
|
|
325
|
+
ctx.body = { success: true, message: "连接成功" };
|
|
326
|
+
}
|
|
327
|
+
catch (e) {
|
|
328
|
+
ctx.status = 500;
|
|
329
|
+
ctx.body = { success: false, error: e?.message || "连接失败" };
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
router.post("/api/telegram/bots/:name/disconnect", async (ctx) => {
|
|
333
|
+
try {
|
|
334
|
+
const bot = telegram.bots.get(ctx.params.name);
|
|
335
|
+
if (!bot) {
|
|
336
|
+
ctx.status = 404;
|
|
337
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (!bot.$connected) {
|
|
341
|
+
ctx.body = { success: true, message: "已经离线" };
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
await bot.$disconnect();
|
|
345
|
+
ctx.body = { success: true, message: "已断开" };
|
|
346
|
+
}
|
|
347
|
+
catch (e) {
|
|
348
|
+
ctx.status = 500;
|
|
349
|
+
ctx.body = { success: false, error: e?.message || "断开失败" };
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
// 快捷操作:创建邀请链接
|
|
353
|
+
router.post("/api/telegram/bots/:name/invite", async (ctx) => {
|
|
354
|
+
try {
|
|
355
|
+
const bot = telegram.bots.get(ctx.params.name);
|
|
356
|
+
if (!bot) {
|
|
357
|
+
ctx.status = 404;
|
|
358
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
if (!bot.$connected) {
|
|
362
|
+
ctx.status = 400;
|
|
363
|
+
ctx.body = { success: false, error: "Bot 未连接" };
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
const { chat_id } = ctx.request.body || {};
|
|
367
|
+
if (!chat_id) {
|
|
368
|
+
ctx.status = 400;
|
|
369
|
+
ctx.body = { success: false, error: "缺少 chat_id" };
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const link = await bot.createInviteLink(Number(chat_id));
|
|
373
|
+
ctx.body = { success: true, data: { invite_link: link } };
|
|
374
|
+
}
|
|
375
|
+
catch (e) {
|
|
376
|
+
ctx.status = 500;
|
|
377
|
+
ctx.body = { success: false, error: e?.message || "创建邀请链接失败" };
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
// 快捷操作:发起投票
|
|
381
|
+
router.post("/api/telegram/bots/:name/poll", async (ctx) => {
|
|
382
|
+
try {
|
|
383
|
+
const bot = telegram.bots.get(ctx.params.name);
|
|
384
|
+
if (!bot) {
|
|
385
|
+
ctx.status = 404;
|
|
386
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
if (!bot.$connected) {
|
|
390
|
+
ctx.status = 400;
|
|
391
|
+
ctx.body = { success: false, error: "Bot 未连接" };
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
const { chat_id, question, options, is_anonymous, allows_multiple } = ctx.request.body || {};
|
|
395
|
+
if (!chat_id || !question || !options?.length) {
|
|
396
|
+
ctx.status = 400;
|
|
397
|
+
ctx.body = { success: false, error: "缺少 chat_id, question 或 options" };
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
if (options.length < 2) {
|
|
401
|
+
ctx.status = 400;
|
|
402
|
+
ctx.body = { success: false, error: "至少需要 2 个选项" };
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
const result = await bot.sendPoll(Number(chat_id), question, options, is_anonymous ?? true, allows_multiple ?? false);
|
|
406
|
+
ctx.body = { success: true, data: { message_id: result.message_id } };
|
|
407
|
+
}
|
|
408
|
+
catch (e) {
|
|
409
|
+
ctx.status = 500;
|
|
410
|
+
ctx.body = { success: false, error: e?.message || "发起投票失败" };
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
// 快捷操作:获取群管理员
|
|
414
|
+
router.get("/api/telegram/bots/:name/admins", async (ctx) => {
|
|
415
|
+
try {
|
|
416
|
+
const bot = telegram.bots.get(ctx.params.name);
|
|
417
|
+
if (!bot) {
|
|
418
|
+
ctx.status = 404;
|
|
419
|
+
ctx.body = { success: false, error: "Bot 不存在" };
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
if (!bot.$connected) {
|
|
423
|
+
ctx.status = 400;
|
|
424
|
+
ctx.body = { success: false, error: "Bot 未连接" };
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
const chat_id = ctx.query.chat_id;
|
|
428
|
+
if (!chat_id) {
|
|
429
|
+
ctx.status = 400;
|
|
430
|
+
ctx.body = { success: false, error: "缺少 chat_id" };
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
const admins = await bot.getChatAdmins(Number(chat_id));
|
|
434
|
+
ctx.body = {
|
|
435
|
+
success: true,
|
|
436
|
+
data: admins.map((a) => ({
|
|
437
|
+
user_id: a.user.id,
|
|
438
|
+
username: a.user.username,
|
|
439
|
+
first_name: a.user.first_name,
|
|
440
|
+
status: a.status,
|
|
441
|
+
})),
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
catch (e) {
|
|
445
|
+
ctx.status = 500;
|
|
446
|
+
ctx.body = { success: false, error: e?.message || "获取管理员失败" };
|
|
447
|
+
}
|
|
448
|
+
});
|
|
449
|
+
});
|
|
281
450
|
//# 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-telegram",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.51",
|
|
4
4
|
"description": "Zhin.js adapter for Telegram",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -36,12 +36,30 @@
|
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^22.9.0",
|
|
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/
|
|
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
|
"CHANGELOG.md"
|
|
54
73
|
],
|
|
@@ -57,8 +76,8 @@
|
|
|
57
76
|
"registry": "https://registry.npmjs.org"
|
|
58
77
|
},
|
|
59
78
|
"scripts": {
|
|
60
|
-
"build": "
|
|
61
|
-
"clean": "rimraf lib",
|
|
79
|
+
"build": "tsc && (test -f ../../services/console/lib/bin.js && node ../../services/console/lib/bin.js build || echo 'Skipping client build: console not built yet')",
|
|
80
|
+
"clean": "rimraf lib dist",
|
|
62
81
|
"build:node": "tsc"
|
|
63
82
|
}
|
|
64
83
|
}
|
package/plugin.yml
ADDED
package/src/index.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telegram 适配器入口:类型扩展、导出、注册
|
|
3
3
|
*/
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import { usePlugin, type Plugin, type Context, type IGroupManagement, createGroupManagementTools, type ToolFeature } from "zhin.js";
|
|
5
6
|
import { TelegramAdapter } 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', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
35
45
|
telegram as unknown as IGroupManagement,
|
|
36
46
|
'telegram',
|
|
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: 'telegram_pin_message',
|
|
@@ -57,7 +67,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
57
67
|
const success = await bot.pinMessage(Number(args.chat_id), Number(args.message_id));
|
|
58
68
|
return { success, message: success ? '消息已置顶' : '操作失败' };
|
|
59
69
|
},
|
|
60
|
-
},
|
|
70
|
+
}, plugin.name));
|
|
61
71
|
|
|
62
72
|
disposers.push(toolService.addTool({
|
|
63
73
|
name: 'telegram_unpin_message',
|
|
@@ -79,7 +89,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
79
89
|
const success = await bot.unpinMessage(Number(args.chat_id), args.message_id ? Number(args.message_id) : undefined);
|
|
80
90
|
return { success, message: success ? '已取消置顶' : '操作失败' };
|
|
81
91
|
},
|
|
82
|
-
},
|
|
92
|
+
}, plugin.name));
|
|
83
93
|
|
|
84
94
|
disposers.push(toolService.addTool({
|
|
85
95
|
name: 'telegram_list_admins',
|
|
@@ -108,7 +118,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
108
118
|
count: admins.length,
|
|
109
119
|
};
|
|
110
120
|
},
|
|
111
|
-
},
|
|
121
|
+
}, plugin.name));
|
|
112
122
|
|
|
113
123
|
disposers.push(toolService.addTool({
|
|
114
124
|
name: 'telegram_member_count',
|
|
@@ -129,7 +139,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
129
139
|
const count = await bot.getChatMemberCount(Number(args.chat_id));
|
|
130
140
|
return { count, message: `群组共有 ${count} 名成员` };
|
|
131
141
|
},
|
|
132
|
-
},
|
|
142
|
+
}, plugin.name));
|
|
133
143
|
|
|
134
144
|
disposers.push(toolService.addTool({
|
|
135
145
|
name: 'telegram_create_invite',
|
|
@@ -150,7 +160,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
150
160
|
const link = await bot.createInviteLink(Number(args.chat_id));
|
|
151
161
|
return { invite_link: link, message: `邀请链接: ${link}` };
|
|
152
162
|
},
|
|
153
|
-
},
|
|
163
|
+
}, plugin.name));
|
|
154
164
|
|
|
155
165
|
disposers.push(toolService.addTool({
|
|
156
166
|
name: 'telegram_send_poll',
|
|
@@ -187,7 +197,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
187
197
|
);
|
|
188
198
|
return { success: true, message_id: result.message_id, message: '投票已发送' };
|
|
189
199
|
},
|
|
190
|
-
},
|
|
200
|
+
}, plugin.name));
|
|
191
201
|
|
|
192
202
|
disposers.push(toolService.addTool({
|
|
193
203
|
name: 'telegram_react',
|
|
@@ -210,7 +220,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
210
220
|
const success = await bot.setMessageReaction(Number(args.chat_id), Number(args.message_id), args.reaction);
|
|
211
221
|
return { success, message: success ? `已添加反应 ${args.reaction}` : '操作失败' };
|
|
212
222
|
},
|
|
213
|
-
},
|
|
223
|
+
}, plugin.name));
|
|
214
224
|
|
|
215
225
|
disposers.push(toolService.addTool({
|
|
216
226
|
name: 'telegram_send_sticker',
|
|
@@ -232,7 +242,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
232
242
|
const result = await bot.sendStickerMessage(Number(args.chat_id), args.sticker);
|
|
233
243
|
return { success: true, message_id: result.message_id, message: '贴纸已发送' };
|
|
234
244
|
},
|
|
235
|
-
},
|
|
245
|
+
}, plugin.name));
|
|
236
246
|
|
|
237
247
|
disposers.push(toolService.addTool({
|
|
238
248
|
name: 'telegram_set_permissions',
|
|
@@ -267,7 +277,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
267
277
|
const success = await bot.setChatPermissionsAll(Number(chat_id), permissions);
|
|
268
278
|
return { success, message: success ? '群权限已更新' : '操作失败' };
|
|
269
279
|
},
|
|
270
|
-
},
|
|
280
|
+
}, plugin.name));
|
|
271
281
|
|
|
272
282
|
disposers.push(toolService.addTool({
|
|
273
283
|
name: 'telegram_set_description',
|
|
@@ -289,7 +299,123 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
|
|
|
289
299
|
const success = await bot.setChatDescription(Number(args.chat_id), args.description);
|
|
290
300
|
return { success, message: success ? '群描述已更新' : '操作失败' };
|
|
291
301
|
},
|
|
292
|
-
},
|
|
302
|
+
}, plugin.name));
|
|
293
303
|
|
|
294
304
|
return () => disposers.forEach(d => d());
|
|
295
305
|
});
|
|
306
|
+
|
|
307
|
+
// ── Web 控制台 ─────────────────────────────────────────────────────────
|
|
308
|
+
useContext("web", (web: WebServer) => {
|
|
309
|
+
return web.addEntry(path.resolve(import.meta.dirname, "../client/index.tsx"));
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
useContext("router", "telegram", (router: any, telegram: TelegramAdapter) => {
|
|
313
|
+
router.get("/api/telegram/bots", async (ctx: any) => {
|
|
314
|
+
try {
|
|
315
|
+
const bots = Array.from(telegram.bots.values());
|
|
316
|
+
const result = bots.map((bot: any) => {
|
|
317
|
+
try {
|
|
318
|
+
return {
|
|
319
|
+
name: bot.$config.name,
|
|
320
|
+
connected: bot.$connected || false,
|
|
321
|
+
mode: bot.$config.polling !== false ? "polling" : "webhook",
|
|
322
|
+
status: bot.$connected ? "online" : "offline",
|
|
323
|
+
botInfo: bot.botInfo ? { username: bot.botInfo.username, firstName: bot.botInfo.first_name } : null,
|
|
324
|
+
};
|
|
325
|
+
} catch {
|
|
326
|
+
return { name: bot.$config.name, connected: false, mode: "unknown", status: "error", botInfo: null };
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
ctx.body = { success: true, data: result };
|
|
330
|
+
} catch {
|
|
331
|
+
ctx.status = 500;
|
|
332
|
+
ctx.body = { success: false, error: "获取机器人数据失败" };
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
// Bot 连接/断开
|
|
337
|
+
router.post("/api/telegram/bots/:name/connect", async (ctx: any) => {
|
|
338
|
+
try {
|
|
339
|
+
const bot = telegram.bots.get(ctx.params.name);
|
|
340
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
341
|
+
if (bot.$connected) { ctx.body = { success: true, message: "已经在线" }; return; }
|
|
342
|
+
await bot.$connect();
|
|
343
|
+
ctx.body = { success: true, message: "连接成功" };
|
|
344
|
+
} catch (e: any) {
|
|
345
|
+
ctx.status = 500;
|
|
346
|
+
ctx.body = { success: false, error: e?.message || "连接失败" };
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
router.post("/api/telegram/bots/:name/disconnect", async (ctx: any) => {
|
|
351
|
+
try {
|
|
352
|
+
const bot = telegram.bots.get(ctx.params.name);
|
|
353
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
354
|
+
if (!bot.$connected) { ctx.body = { success: true, message: "已经离线" }; return; }
|
|
355
|
+
await bot.$disconnect();
|
|
356
|
+
ctx.body = { success: true, message: "已断开" };
|
|
357
|
+
} catch (e: any) {
|
|
358
|
+
ctx.status = 500;
|
|
359
|
+
ctx.body = { success: false, error: e?.message || "断开失败" };
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
// 快捷操作:创建邀请链接
|
|
364
|
+
router.post("/api/telegram/bots/:name/invite", async (ctx: any) => {
|
|
365
|
+
try {
|
|
366
|
+
const bot: any = telegram.bots.get(ctx.params.name);
|
|
367
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
368
|
+
if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
|
|
369
|
+
const { chat_id } = ctx.request.body || {};
|
|
370
|
+
if (!chat_id) { ctx.status = 400; ctx.body = { success: false, error: "缺少 chat_id" }; return; }
|
|
371
|
+
const link = await bot.createInviteLink(Number(chat_id));
|
|
372
|
+
ctx.body = { success: true, data: { invite_link: link } };
|
|
373
|
+
} catch (e: any) {
|
|
374
|
+
ctx.status = 500;
|
|
375
|
+
ctx.body = { success: false, error: e?.message || "创建邀请链接失败" };
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
// 快捷操作:发起投票
|
|
380
|
+
router.post("/api/telegram/bots/:name/poll", async (ctx: any) => {
|
|
381
|
+
try {
|
|
382
|
+
const bot: any = telegram.bots.get(ctx.params.name);
|
|
383
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
384
|
+
if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
|
|
385
|
+
const { chat_id, question, options, is_anonymous, allows_multiple } = ctx.request.body || {};
|
|
386
|
+
if (!chat_id || !question || !options?.length) {
|
|
387
|
+
ctx.status = 400; ctx.body = { success: false, error: "缺少 chat_id, question 或 options" }; return;
|
|
388
|
+
}
|
|
389
|
+
if (options.length < 2) { ctx.status = 400; ctx.body = { success: false, error: "至少需要 2 个选项" }; return; }
|
|
390
|
+
const result = await bot.sendPoll(Number(chat_id), question, options, is_anonymous ?? true, allows_multiple ?? false);
|
|
391
|
+
ctx.body = { success: true, data: { message_id: result.message_id } };
|
|
392
|
+
} catch (e: any) {
|
|
393
|
+
ctx.status = 500;
|
|
394
|
+
ctx.body = { success: false, error: e?.message || "发起投票失败" };
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
// 快捷操作:获取群管理员
|
|
399
|
+
router.get("/api/telegram/bots/:name/admins", async (ctx: any) => {
|
|
400
|
+
try {
|
|
401
|
+
const bot: any = telegram.bots.get(ctx.params.name);
|
|
402
|
+
if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
|
|
403
|
+
if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
|
|
404
|
+
const chat_id = ctx.query.chat_id;
|
|
405
|
+
if (!chat_id) { ctx.status = 400; ctx.body = { success: false, error: "缺少 chat_id" }; return; }
|
|
406
|
+
const admins = await bot.getChatAdmins(Number(chat_id));
|
|
407
|
+
ctx.body = {
|
|
408
|
+
success: true,
|
|
409
|
+
data: admins.map((a: any) => ({
|
|
410
|
+
user_id: a.user.id,
|
|
411
|
+
username: a.user.username,
|
|
412
|
+
first_name: a.user.first_name,
|
|
413
|
+
status: a.status,
|
|
414
|
+
})),
|
|
415
|
+
};
|
|
416
|
+
} catch (e: any) {
|
|
417
|
+
ctx.status = 500;
|
|
418
|
+
ctx.body = { success: false, error: e?.message || "获取管理员失败" };
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
});
|