@zhin.js/adapter-telegram 2.0.12 → 3.0.1

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/src/index.ts CHANGED
@@ -5,6 +5,11 @@ import path from "node:path";
5
5
  import { usePlugin, type Plugin, type Context, type IGroupManagement, createGroupManagementTools, type ToolFeature } from "zhin.js";
6
6
  import { TelegramAdapter } from "./adapter.js";
7
7
  import { PageManager } from "@zhin.js/host-api";
8
+ import {
9
+ platformPermit,
10
+ registerTelegramPlatformPermitChecker,
11
+ telegramGroupPermitResolver,
12
+ } from "./platform-permit.js";
8
13
 
9
14
  declare module "zhin.js" {
10
15
  namespace Plugin {
@@ -21,7 +26,7 @@ declare module "zhin.js" {
21
26
  }
22
27
 
23
28
  export * from "./types.js";
24
- export { TelegramBot } from "./bot.js";
29
+ export { TelegramEndpoint } from "./endpoint.js";
25
30
  export { TelegramAdapter } from "./adapter.js";
26
31
 
27
32
  const plugin = usePlugin();
@@ -29,7 +34,7 @@ const { provide, useContext } = plugin;
29
34
 
30
35
  provide({
31
36
  name: "telegram",
32
- description: "Telegram Bot Adapter",
37
+ description: "Telegram Endpoint Adapter",
33
38
  mounted: async (p: Plugin) => {
34
39
  const adapter = new TelegramAdapter(p);
35
40
  await adapter.start();
@@ -41,11 +46,14 @@ provide({
41
46
  } as Context<"telegram">);
42
47
 
43
48
  useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdapter) => {
49
+ const disposers: (() => void)[] = [];
50
+ disposers.push(registerTelegramPlatformPermitChecker());
44
51
  const groupTools = createGroupManagementTools(
45
52
  telegram as unknown as IGroupManagement,
46
53
  'telegram',
54
+ { permitResolver: telegramGroupPermitResolver, registerChecker: false },
47
55
  );
48
- const disposers: (() => void)[] = groupTools.map(t => toolService.addTool(t, plugin.name));
56
+ disposers.push(...groupTools.map(t => toolService.addTool(t, plugin.name)));
49
57
 
50
58
  disposers.push(toolService.addTool({
51
59
  name: 'telegram_pin_message',
@@ -53,18 +61,19 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
53
61
  parameters: {
54
62
  type: 'object',
55
63
  properties: {
56
- bot: { type: 'string', description: 'Bot 名称' },
64
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
57
65
  chat_id: { type: 'string', description: '聊天 ID' },
58
66
  message_id: { type: 'string', description: '消息 ID' },
59
67
  },
60
- required: ['bot', 'chat_id', 'message_id'],
68
+ required: ['endpoint_id', 'chat_id', 'message_id'],
61
69
  },
62
70
  platforms: ['telegram'],
63
71
  tags: ['telegram'],
72
+ permissions: [platformPermit('pin_messages')],
64
73
  execute: async (args: Record<string, any>) => {
65
- const bot = telegram.bots.get(args.bot);
66
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
67
- const success = await bot.pinMessage(Number(args.chat_id), Number(args.message_id));
74
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
75
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
76
+ const success = await endpoint.pinMessage(Number(args.chat_id), Number(args.message_id));
68
77
  return { success, message: success ? '消息已置顶' : '操作失败' };
69
78
  },
70
79
  }, plugin.name));
@@ -75,18 +84,19 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
75
84
  parameters: {
76
85
  type: 'object',
77
86
  properties: {
78
- bot: { type: 'string', description: 'Bot 名称' },
87
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
79
88
  chat_id: { type: 'string', description: '聊天 ID' },
80
89
  message_id: { type: 'string', description: '消息 ID(可选,不提供则取消所有置顶)' },
81
90
  },
82
- required: ['bot', 'chat_id'],
91
+ required: ['endpoint_id', 'chat_id'],
83
92
  },
84
93
  platforms: ['telegram'],
85
94
  tags: ['telegram'],
95
+ permissions: [platformPermit('pin_messages')],
86
96
  execute: async (args: Record<string, any>) => {
87
- const bot = telegram.bots.get(args.bot);
88
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
89
- const success = await bot.unpinMessage(Number(args.chat_id), args.message_id ? Number(args.message_id) : undefined);
97
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
98
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
99
+ const success = await endpoint.unpinMessage(Number(args.chat_id), args.message_id ? Number(args.message_id) : undefined);
90
100
  return { success, message: success ? '已取消置顶' : '操作失败' };
91
101
  },
92
102
  }, plugin.name));
@@ -97,17 +107,17 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
97
107
  parameters: {
98
108
  type: 'object',
99
109
  properties: {
100
- bot: { type: 'string', description: 'Bot 名称' },
110
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
101
111
  chat_id: { type: 'string', description: '聊天 ID' },
102
112
  },
103
- required: ['bot', 'chat_id'],
113
+ required: ['endpoint_id', 'chat_id'],
104
114
  },
105
115
  platforms: ['telegram'],
106
116
  tags: ['telegram'],
107
117
  execute: async (args: Record<string, any>) => {
108
- const bot = telegram.bots.get(args.bot);
109
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
110
- const admins = await bot.getChatAdmins(Number(args.chat_id));
118
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
119
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
120
+ const admins = await endpoint.getChatAdmins(Number(args.chat_id));
111
121
  return {
112
122
  admins: admins.map((a: any) => ({
113
123
  user_id: a.user.id,
@@ -126,17 +136,17 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
126
136
  parameters: {
127
137
  type: 'object',
128
138
  properties: {
129
- bot: { type: 'string', description: 'Bot 名称' },
139
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
130
140
  chat_id: { type: 'string', description: '聊天 ID' },
131
141
  },
132
- required: ['bot', 'chat_id'],
142
+ required: ['endpoint_id', 'chat_id'],
133
143
  },
134
144
  platforms: ['telegram'],
135
145
  tags: ['telegram'],
136
146
  execute: async (args: Record<string, any>) => {
137
- const bot = telegram.bots.get(args.bot);
138
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
139
- const count = await bot.getChatMemberCount(Number(args.chat_id));
147
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
148
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
149
+ const count = await endpoint.getChatMemberCount(Number(args.chat_id));
140
150
  return { count, message: `群组共有 ${count} 名成员` };
141
151
  },
142
152
  }, plugin.name));
@@ -147,17 +157,18 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
147
157
  parameters: {
148
158
  type: 'object',
149
159
  properties: {
150
- bot: { type: 'string', description: 'Bot 名称' },
160
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
151
161
  chat_id: { type: 'string', description: '聊天 ID' },
152
162
  },
153
- required: ['bot', 'chat_id'],
163
+ required: ['endpoint_id', 'chat_id'],
154
164
  },
155
165
  platforms: ['telegram'],
156
166
  tags: ['telegram'],
167
+ permissions: [platformPermit('chat_administrator')],
157
168
  execute: async (args: Record<string, any>) => {
158
- const bot = telegram.bots.get(args.bot);
159
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
160
- const link = await bot.createInviteLink(Number(args.chat_id));
169
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
170
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
171
+ const link = await endpoint.createInviteLink(Number(args.chat_id));
161
172
  return { invite_link: link, message: `邀请链接: ${link}` };
162
173
  },
163
174
  }, plugin.name));
@@ -168,20 +179,20 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
168
179
  parameters: {
169
180
  type: 'object',
170
181
  properties: {
171
- bot: { type: 'string', description: 'Bot 名称' },
182
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
172
183
  chat_id: { type: 'string', description: '聊天 ID' },
173
184
  question: { type: 'string', description: '投票问题' },
174
185
  options: { type: 'string', description: '选项 JSON 数组,如 ["A","B","C"]' },
175
186
  is_anonymous: { type: 'boolean', description: '是否匿名投票,默认 true' },
176
187
  allows_multiple: { type: 'boolean', description: '是否允许多选,默认 false' },
177
188
  },
178
- required: ['bot', 'chat_id', 'question', 'options'],
189
+ required: ['endpoint_id', 'chat_id', 'question', 'options'],
179
190
  },
180
191
  platforms: ['telegram'],
181
192
  tags: ['telegram'],
182
193
  execute: async (args: Record<string, any>) => {
183
- const bot = telegram.bots.get(args.bot);
184
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
194
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
195
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
185
196
  let optList: string[];
186
197
  try {
187
198
  optList = JSON.parse(args.options);
@@ -191,7 +202,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
191
202
  if (!Array.isArray(optList) || optList.length < 2) {
192
203
  return { success: false, message: '至少需要 2 个选项' };
193
204
  }
194
- const result = await bot.sendPoll(
205
+ const result = await endpoint.sendPoll(
195
206
  Number(args.chat_id), args.question, optList,
196
207
  args.is_anonymous ?? true, args.allows_multiple ?? false,
197
208
  );
@@ -205,19 +216,19 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
205
216
  parameters: {
206
217
  type: 'object',
207
218
  properties: {
208
- bot: { type: 'string', description: 'Bot 名称' },
219
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
209
220
  chat_id: { type: 'string', description: '聊天 ID' },
210
221
  message_id: { type: 'string', description: '消息 ID' },
211
222
  reaction: { type: 'string', description: '反应表情(如 👍、❤️、🔥)' },
212
223
  },
213
- required: ['bot', 'chat_id', 'message_id', 'reaction'],
224
+ required: ['endpoint_id', 'chat_id', 'message_id', 'reaction'],
214
225
  },
215
226
  platforms: ['telegram'],
216
227
  tags: ['telegram'],
217
228
  execute: async (args: Record<string, any>) => {
218
- const bot = telegram.bots.get(args.bot);
219
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
220
- const success = await bot.setMessageReaction(Number(args.chat_id), Number(args.message_id), args.reaction);
229
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
230
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
231
+ const success = await endpoint.setMessageReaction(Number(args.chat_id), Number(args.message_id), args.reaction);
221
232
  return { success, message: success ? `已添加反应 ${args.reaction}` : '操作失败' };
222
233
  },
223
234
  }, plugin.name));
@@ -228,18 +239,18 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
228
239
  parameters: {
229
240
  type: 'object',
230
241
  properties: {
231
- bot: { type: 'string', description: 'Bot 名称' },
242
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
232
243
  chat_id: { type: 'string', description: '聊天 ID' },
233
244
  sticker: { type: 'string', description: '贴纸 file_id 或 URL' },
234
245
  },
235
- required: ['bot', 'chat_id', 'sticker'],
246
+ required: ['endpoint_id', 'chat_id', 'sticker'],
236
247
  },
237
248
  platforms: ['telegram'],
238
249
  tags: ['telegram'],
239
250
  execute: async (args: Record<string, any>) => {
240
- const bot = telegram.bots.get(args.bot);
241
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
242
- const result = await bot.sendStickerMessage(Number(args.chat_id), args.sticker);
251
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
252
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
253
+ const result = await endpoint.sendStickerMessage(Number(args.chat_id), args.sticker);
243
254
  return { success: true, message_id: result.message_id, message: '贴纸已发送' };
244
255
  },
245
256
  }, plugin.name));
@@ -250,7 +261,7 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
250
261
  parameters: {
251
262
  type: 'object',
252
263
  properties: {
253
- bot: { type: 'string', description: 'Bot 名称' },
264
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
254
265
  chat_id: { type: 'string', description: '聊天 ID' },
255
266
  can_send_messages: { type: 'boolean', description: '是否可以发消息' },
256
267
  can_send_photos: { type: 'boolean', description: '是否可以发图片' },
@@ -262,19 +273,20 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
262
273
  can_invite_users: { type: 'boolean', description: '是否可以邀请用户' },
263
274
  can_pin_messages: { type: 'boolean', description: '是否可以置顶消息' },
264
275
  },
265
- required: ['bot', 'chat_id'],
276
+ required: ['endpoint_id', 'chat_id'],
266
277
  },
267
278
  platforms: ['telegram'],
268
279
  tags: ['telegram'],
280
+ permissions: [platformPermit('manage_chat')],
269
281
  execute: async (args: Record<string, any>) => {
270
- const { bot: botId, chat_id, ...perms } = args;
271
- const bot = telegram.bots.get(botId);
272
- if (!bot) throw new Error(`Bot ${botId} 不存在`);
282
+ const { endpoint: endpointId, chat_id, ...perms } = args;
283
+ const endpoint = telegram.endpoints.get(endpointId);
284
+ if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
273
285
  const permissions: any = {};
274
286
  for (const [k, v] of Object.entries(perms)) {
275
287
  if (typeof v === 'boolean') permissions[k] = v;
276
288
  }
277
- const success = await bot.setChatPermissionsAll(Number(chat_id), permissions);
289
+ const success = await endpoint.setChatPermissionsAll(Number(chat_id), permissions);
278
290
  return { success, message: success ? '群权限已更新' : '操作失败' };
279
291
  },
280
292
  }, plugin.name));
@@ -285,18 +297,18 @@ useContext('tool', 'telegram', (toolService: ToolFeature, telegram: TelegramAdap
285
297
  parameters: {
286
298
  type: 'object',
287
299
  properties: {
288
- bot: { type: 'string', description: 'Bot 名称' },
300
+ endpoint_id: { type: 'string', description: 'Endpoint 名称', contextKey: 'endpointId' },
289
301
  chat_id: { type: 'string', description: '聊天 ID' },
290
302
  description: { type: 'string', description: '群描述文字' },
291
303
  },
292
- required: ['bot', 'chat_id', 'description'],
304
+ required: ['endpoint_id', 'chat_id', 'description'],
293
305
  },
294
306
  platforms: ['telegram'],
295
307
  tags: ['telegram'],
296
308
  execute: async (args: Record<string, any>) => {
297
- const bot = telegram.bots.get(args.bot);
298
- if (!bot) throw new Error(`Bot ${args.bot} 不存在`);
299
- const success = await bot.setChatDescription(Number(args.chat_id), args.description);
309
+ const endpoint = telegram.endpoints.get(args.endpoint_id);
310
+ if (!endpoint) throw new Error(`Endpoint ${args.endpoint_id} 不存在`);
311
+ const success = await endpoint.setChatDescription(Number(args.chat_id), args.description);
300
312
  return { success, message: success ? '群描述已更新' : '操作失败' };
301
313
  },
302
314
  }, plugin.name));
@@ -315,100 +327,100 @@ useContext("web", (pageManager) => {
315
327
  });
316
328
 
317
329
  useContext("router", "telegram", (router: any, telegram: TelegramAdapter) => {
318
- router.get("/api/telegram/bots", async (ctx: any) => {
330
+ router.get("/api/telegram/endpoints", async (ctx: any) => {
319
331
  try {
320
- const bots = Array.from(telegram.bots.values());
321
- const result = bots.map((bot: any) => {
332
+ const endpoints = Array.from(telegram.endpoints.values());
333
+ const result = endpoints.map((endpoint: any) => {
322
334
  try {
323
335
  return {
324
- name: bot.$config.name,
325
- connected: bot.$connected || false,
326
- mode: bot.$config.polling !== false ? "polling" : "webhook",
327
- status: bot.$connected ? "online" : "offline",
328
- botInfo: bot.botInfo ? { username: bot.botInfo.username, firstName: bot.botInfo.first_name } : null,
336
+ name: endpoint.$config.name,
337
+ connected: endpoint.$connected || false,
338
+ mode: endpoint.$config.polling !== false ? "polling" : "webhook",
339
+ status: endpoint.$connected ? "online" : "offline",
340
+ botInfo: endpoint.botInfo ? { username: endpoint.botInfo.username, firstName: endpoint.botInfo.first_name } : null,
329
341
  };
330
342
  } catch {
331
- return { name: bot.$config.name, connected: false, mode: "unknown", status: "error", botInfo: null };
343
+ return { name: endpoint.$config.name, connected: false, mode: "unknown", status: "error", botInfo: null };
332
344
  }
333
345
  });
334
346
  ctx.body = { success: true, data: result };
335
347
  } catch {
336
348
  ctx.status = 500;
337
- ctx.body = { success: false, error: "获取机器人数据失败" };
349
+ ctx.body = { success: false, error: "获取 Endpoint 数据失败" };
338
350
  }
339
351
  });
340
352
 
341
- // Bot 连接/断开
342
- router.post("/api/telegram/bots/:name/connect", async (ctx: any) => {
353
+ // Endpoint 连接/断开
354
+ router.post("/api/telegram/endpoints/:name/connect", async (ctx: any) => {
343
355
  try {
344
- const bot = telegram.bots.get(ctx.params.name);
345
- if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
346
- if (bot.$connected) { ctx.body = { success: true, message: "已经在线" }; return; }
347
- await bot.$connect();
356
+ const endpoint = telegram.endpoints.get(ctx.params.name);
357
+ if (!endpoint) { ctx.status = 404; ctx.body = { success: false, error: "Endpoint 不存在" }; return; }
358
+ if (endpoint.$connected) { ctx.body = { success: true, message: "已经在线" }; return; }
359
+ await endpoint.$connect();
348
360
  ctx.body = { success: true, message: "连接成功" };
349
- } catch (e: any) {
361
+ } catch (e: unknown) {
350
362
  ctx.status = 500;
351
- ctx.body = { success: false, error: e?.message || "连接失败" };
363
+ ctx.body = { success: false, error: e instanceof Error ? e.message : "连接失败" };
352
364
  }
353
365
  });
354
366
 
355
- router.post("/api/telegram/bots/:name/disconnect", async (ctx: any) => {
367
+ router.post("/api/telegram/endpoints/:name/disconnect", async (ctx: any) => {
356
368
  try {
357
- const bot = telegram.bots.get(ctx.params.name);
358
- if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
359
- if (!bot.$connected) { ctx.body = { success: true, message: "已经离线" }; return; }
360
- await bot.$disconnect();
369
+ const endpoint = telegram.endpoints.get(ctx.params.name);
370
+ if (!endpoint) { ctx.status = 404; ctx.body = { success: false, error: "Endpoint 不存在" }; return; }
371
+ if (!endpoint.$connected) { ctx.body = { success: true, message: "已经离线" }; return; }
372
+ await endpoint.$disconnect();
361
373
  ctx.body = { success: true, message: "已断开" };
362
- } catch (e: any) {
374
+ } catch (e: unknown) {
363
375
  ctx.status = 500;
364
- ctx.body = { success: false, error: e?.message || "断开失败" };
376
+ ctx.body = { success: false, error: e instanceof Error ? e.message : "断开失败" };
365
377
  }
366
378
  });
367
379
 
368
380
  // 快捷操作:创建邀请链接
369
- router.post("/api/telegram/bots/:name/invite", async (ctx: any) => {
381
+ router.post("/api/telegram/endpoints/:name/invite", async (ctx: any) => {
370
382
  try {
371
- const bot: any = telegram.bots.get(ctx.params.name);
372
- if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
373
- if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
383
+ const endpoint: any = telegram.endpoints.get(ctx.params.name);
384
+ if (!endpoint) { ctx.status = 404; ctx.body = { success: false, error: "Endpoint 不存在" }; return; }
385
+ if (!endpoint.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Endpoint 未连接" }; return; }
374
386
  const { chat_id } = ctx.request.body || {};
375
387
  if (!chat_id) { ctx.status = 400; ctx.body = { success: false, error: "缺少 chat_id" }; return; }
376
- const link = await bot.createInviteLink(Number(chat_id));
388
+ const link = await endpoint.createInviteLink(Number(chat_id));
377
389
  ctx.body = { success: true, data: { invite_link: link } };
378
- } catch (e: any) {
390
+ } catch (e: unknown) {
379
391
  ctx.status = 500;
380
- ctx.body = { success: false, error: e?.message || "创建邀请链接失败" };
392
+ ctx.body = { success: false, error: e instanceof Error ? e.message : "创建邀请链接失败" };
381
393
  }
382
394
  });
383
395
 
384
396
  // 快捷操作:发起投票
385
- router.post("/api/telegram/bots/:name/poll", async (ctx: any) => {
397
+ router.post("/api/telegram/endpoints/:name/poll", async (ctx: any) => {
386
398
  try {
387
- const bot: any = telegram.bots.get(ctx.params.name);
388
- if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
389
- if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
399
+ const endpoint: any = telegram.endpoints.get(ctx.params.name);
400
+ if (!endpoint) { ctx.status = 404; ctx.body = { success: false, error: "Endpoint 不存在" }; return; }
401
+ if (!endpoint.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Endpoint 未连接" }; return; }
390
402
  const { chat_id, question, options, is_anonymous, allows_multiple } = ctx.request.body || {};
391
403
  if (!chat_id || !question || !options?.length) {
392
404
  ctx.status = 400; ctx.body = { success: false, error: "缺少 chat_id, question 或 options" }; return;
393
405
  }
394
406
  if (options.length < 2) { ctx.status = 400; ctx.body = { success: false, error: "至少需要 2 个选项" }; return; }
395
- const result = await bot.sendPoll(Number(chat_id), question, options, is_anonymous ?? true, allows_multiple ?? false);
407
+ const result = await endpoint.sendPoll(Number(chat_id), question, options, is_anonymous ?? true, allows_multiple ?? false);
396
408
  ctx.body = { success: true, data: { message_id: result.message_id } };
397
- } catch (e: any) {
409
+ } catch (e: unknown) {
398
410
  ctx.status = 500;
399
- ctx.body = { success: false, error: e?.message || "发起投票失败" };
411
+ ctx.body = { success: false, error: e instanceof Error ? e.message : "发起投票失败" };
400
412
  }
401
413
  });
402
414
 
403
415
  // 快捷操作:获取群管理员
404
- router.get("/api/telegram/bots/:name/admins", async (ctx: any) => {
416
+ router.get("/api/telegram/endpoints/:name/admins", async (ctx: any) => {
405
417
  try {
406
- const bot: any = telegram.bots.get(ctx.params.name);
407
- if (!bot) { ctx.status = 404; ctx.body = { success: false, error: "Bot 不存在" }; return; }
408
- if (!bot.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Bot 未连接" }; return; }
418
+ const endpoint: any = telegram.endpoints.get(ctx.params.name);
419
+ if (!endpoint) { ctx.status = 404; ctx.body = { success: false, error: "Endpoint 不存在" }; return; }
420
+ if (!endpoint.$connected) { ctx.status = 400; ctx.body = { success: false, error: "Endpoint 未连接" }; return; }
409
421
  const chat_id = ctx.query.chat_id;
410
422
  if (!chat_id) { ctx.status = 400; ctx.body = { success: false, error: "缺少 chat_id" }; return; }
411
- const admins = await bot.getChatAdmins(Number(chat_id));
423
+ const admins = await endpoint.getChatAdmins(Number(chat_id));
412
424
  ctx.body = {
413
425
  success: true,
414
426
  data: admins.map((a: any) => ({
@@ -418,9 +430,9 @@ useContext("router", "telegram", (router: any, telegram: TelegramAdapter) => {
418
430
  status: a.status,
419
431
  })),
420
432
  };
421
- } catch (e: any) {
433
+ } catch (e: unknown) {
422
434
  ctx.status = 500;
423
- ctx.body = { success: false, error: e?.message || "获取管理员失败" };
435
+ ctx.body = { success: false, error: e instanceof Error ? e.message : "获取管理员失败" };
424
436
  }
425
437
  });
426
438
  });
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Telegram platform permit — ChatMember 状态 + 细粒度权限
3
+ */
4
+ import type { Message } from 'zhin.js';
5
+ import { registerPlatformPermitChecker } from 'zhin.js';
6
+
7
+ const ADAPTER = 'telegram';
8
+
9
+ export function platformPermit(perm: string): string {
10
+ return `platform(${ADAPTER},${perm})`;
11
+ }
12
+
13
+ const FACTORY_PERM_MAP: Record<string, string> = {
14
+ group_admin: 'chat_administrator',
15
+ group_owner: 'chat_creator',
16
+ };
17
+
18
+ export function telegramGroupPermitResolver(logicalPerm: string): string {
19
+ return platformPermit(FACTORY_PERM_MAP[logicalPerm] ?? logicalPerm);
20
+ }
21
+
22
+ export function normalizeTelegramChatMember(member: {
23
+ status?: string;
24
+ can_restrict_members?: boolean;
25
+ can_pin_messages?: boolean;
26
+ can_delete_messages?: boolean;
27
+ can_manage_chat?: boolean;
28
+ }): { role?: string; permissions: string[] } {
29
+ const permissions: string[] = [];
30
+ const status = member.status;
31
+ if (status === 'creator') {
32
+ permissions.push('chat_creator', 'chat_administrator', 'restrict_members', 'pin_messages');
33
+ return { role: 'creator', permissions };
34
+ }
35
+ if (status === 'administrator') {
36
+ permissions.push('chat_administrator');
37
+ if (member.can_restrict_members) permissions.push('restrict_members');
38
+ if (member.can_pin_messages) permissions.push('pin_messages');
39
+ if (member.can_delete_messages) permissions.push('delete_messages');
40
+ if (member.can_manage_chat) permissions.push('manage_chat');
41
+ return { role: 'administrator', permissions };
42
+ }
43
+ return { role: 'member', permissions };
44
+ }
45
+
46
+ function senderPermits(message: Message<any>): { role?: string; permissions: string[] } {
47
+ const sender = message.$sender as { role?: string; permissions?: string[] };
48
+ return { role: sender.role, permissions: sender.permissions ?? [] };
49
+ }
50
+
51
+ export function checkTelegramPlatformPermit(perm: string, message: Message<any>): boolean {
52
+ const { role, permissions } = senderPermits(message);
53
+ const has = (t: string) => permissions.includes(t);
54
+
55
+ switch (perm) {
56
+ case 'chat_creator':
57
+ return role === 'creator' || has('chat_creator');
58
+ case 'chat_administrator':
59
+ return role === 'creator' || role === 'administrator' || has('chat_administrator');
60
+ case 'restrict_members':
61
+ return has('restrict_members') || role === 'creator';
62
+ case 'pin_messages':
63
+ return has('pin_messages') || role === 'creator';
64
+ case 'manage_chat':
65
+ return has('manage_chat') || role === 'creator';
66
+ default:
67
+ return false;
68
+ }
69
+ }
70
+
71
+ export function registerTelegramPlatformPermitChecker(): () => void {
72
+ return registerPlatformPermitChecker(ADAPTER, checkTelegramPlatformPermit);
73
+ }
package/src/types.ts CHANGED
@@ -14,7 +14,7 @@ export interface TelegramSenderInfo {
14
14
  status?: string;
15
15
  }
16
16
 
17
- export interface TelegramBotConfig {
17
+ export interface TelegramEndpointConfig {
18
18
  context: "telegram";
19
19
  token: string;
20
20
  name: string;
@@ -27,6 +27,6 @@ export interface TelegramBotConfig {
27
27
  allowedUpdates?: string[];
28
28
  }
29
29
 
30
- export interface TelegramBot {
31
- $config: TelegramBotConfig;
30
+ export interface TelegramEndpoint {
31
+ $config: TelegramEndpointConfig;
32
32
  }
package/lib/bot.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
package/lib/bot.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}