@zhin.js/adapter-telegram 1.1.11 → 1.1.14

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 CHANGED
@@ -1,5 +1,44 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.14
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [974fa85]
8
+ - Updated dependencies [1e9b3d6]
9
+ - @zhin.js/core@1.1.49
10
+
11
+ ## 1.1.13
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [db06de8]
16
+ - @zhin.js/core@1.1.48
17
+
18
+ ## 1.1.12
19
+
20
+ ### Patch Changes
21
+
22
+ - e40899f: Adapters now project group owners and admins onto the canonical `sender.roles` names `owner` / `admin` (Telegram creator/administrator, KOOK guild owner and admin-permission roles, Lark chat owner/managers, QQ official guild owner/admin identities). KOOK numeric role ids moved from `roles` to `permissions` (`role:<id>`). `@zhin.js/command` exports `canManageConversation` ("private chat or owner/admin/master"), now shared by the Bilibili and earthquake subscription commands; Roulette lets owners and admins toggle the mute penalty and cancel a game.
23
+ - fbfefb7: Share segments accept `data.platform` (the song's music service: qq, netease, kugou, kuwo, migu). icqq maps it to the matching music app id when `config.appid` is absent and offers it to the Agent; adapters that cannot render share app metadata reject it like `audio` and `config`.
24
+ - Updated dependencies [1a11207]
25
+ - Updated dependencies [9943df6]
26
+ - Updated dependencies [5be09ae]
27
+ - Updated dependencies [a3ab153]
28
+ - Updated dependencies [e8f7309]
29
+ - Updated dependencies [5afc18f]
30
+ - Updated dependencies [d3563d9]
31
+ - Updated dependencies [c618eb7]
32
+ - Updated dependencies [fbfefb7]
33
+ - @zhin.js/tool@1.1.8
34
+ - @zhin.js/core@1.1.47
35
+ - @zhin.js/adapter@1.1.21
36
+ - @zhin.js/feature-kit@1.1.7
37
+ - @zhin.js/im-contract@1.1.5
38
+ - @zhin.js/agent-feature@1.1.8
39
+ - @zhin.js/skill@1.1.8
40
+ - @zhin.js/host-http@1.1.8
41
+
3
42
  ## 1.1.11
4
43
 
5
44
  ### Patch Changes
@@ -1,5 +1,8 @@
1
1
  /**
2
2
  * Telegram platform permit — ChatMember 状态 + 细粒度权限
3
+ *
4
+ * `role` 使用跨平台规范名 owner / admin(原生 creator / administrator 仅作兼容输入);
5
+ * 细粒度能力放在 `permissions`。
3
6
  */
4
7
  import type { PermissionSubject } from '@zhin.js/permission';
5
8
  export declare function platformPermit(perm: string): string;
@@ -14,7 +14,7 @@ export function normalizeTelegramChatMember(member) {
14
14
  const status = member.status;
15
15
  if (status === 'creator') {
16
16
  permissions.push('chat_creator', 'chat_administrator', 'restrict_members', 'pin_messages');
17
- return { role: 'creator', permissions };
17
+ return { role: 'owner', permissions };
18
18
  }
19
19
  if (status === 'administrator') {
20
20
  permissions.push('chat_administrator');
@@ -26,7 +26,7 @@ export function normalizeTelegramChatMember(member) {
26
26
  permissions.push('delete_messages');
27
27
  if (member.can_manage_chat)
28
28
  permissions.push('manage_chat');
29
- return { role: 'administrator', permissions };
29
+ return { role: 'admin', permissions };
30
30
  }
31
31
  return { role: 'member', permissions };
32
32
  }
@@ -36,15 +36,15 @@ export function checkTelegramPlatformPermit(perm, subject) {
36
36
  const has = (t) => permissions.includes(t);
37
37
  switch (perm) {
38
38
  case 'chat_creator':
39
- return role === 'creator' || has('chat_creator');
39
+ return role === 'owner' || role === 'creator' || has('chat_creator');
40
40
  case 'chat_administrator':
41
- return role === 'creator' || role === 'administrator' || has('chat_administrator');
41
+ return role === 'owner' || role === 'admin' || role === 'creator' || role === 'administrator' || has('chat_administrator');
42
42
  case 'restrict_members':
43
- return has('restrict_members') || role === 'creator';
43
+ return has('restrict_members') || role === 'owner' || role === 'creator';
44
44
  case 'pin_messages':
45
- return has('pin_messages') || role === 'creator';
45
+ return has('pin_messages') || role === 'owner' || role === 'creator';
46
46
  case 'manage_chat':
47
- return has('manage_chat') || role === 'creator';
47
+ return has('manage_chat') || role === 'owner' || role === 'creator';
48
48
  default:
49
49
  return false;
50
50
  }
package/lib/protocol.js CHANGED
@@ -305,7 +305,7 @@ function buildOutboundActions(target, payload, uploads) {
305
305
  }
306
306
  if (!['http:', 'https:'].includes(url.protocol) || typeof data.title !== 'string' || !data.title.trim())
307
307
  throw new EndpointDeliveryError('invalid_payload', 'Telegram share requires an HTTP(S) URL and title', 'not_sent');
308
- if (['image', 'audio', 'artist', 'duration', 'config'].some(key => data[key] !== undefined))
308
+ if (['image', 'audio', 'artist', 'duration', 'platform', 'config'].some(key => data[key] !== undefined))
309
309
  throw new EndpointDeliveryError('unsupported_operation', 'Telegram share media and app metadata are not implemented', 'not_sent');
310
310
  textContent += `<a href="${escapeTelegramHtml(url.href)}">${escapeTelegramHtml(data.title)}</a>`;
311
311
  for (const value of [data.description, data.content])
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/adapter-telegram",
3
- "version": "1.1.11",
3
+ "version": "1.1.14",
4
4
  "description": "Zhin.js Telegram Bot API adapter for Plugin Runtime (long-poll getUpdates)",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -31,23 +31,23 @@
31
31
  "directory": "plugins/adapters/telegram"
32
32
  },
33
33
  "dependencies": {
34
- "@zhin.js/adapter": "1.1.20",
35
- "@zhin.js/agent-feature": "1.1.7",
36
- "@zhin.js/core": "1.1.46",
37
- "@zhin.js/feature-kit": "1.1.6",
38
- "@zhin.js/host-http": "1.1.7",
39
- "@zhin.js/im-contract": "1.1.4",
34
+ "@zhin.js/adapter": "1.1.21",
35
+ "@zhin.js/agent-feature": "1.1.8",
36
+ "@zhin.js/core": "1.1.49",
37
+ "@zhin.js/feature-kit": "1.1.7",
38
+ "@zhin.js/host-http": "1.1.8",
39
+ "@zhin.js/im-contract": "1.1.5",
40
40
  "@zhin.js/logger": "1.1.2",
41
- "@zhin.js/skill": "1.1.7",
42
- "@zhin.js/tool": "1.1.7"
41
+ "@zhin.js/skill": "1.1.8",
42
+ "@zhin.js/tool": "1.1.8"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "zod": "^4.0.0",
46
- "@zhin.js/adapter": "^1.1.20",
47
- "@zhin.js/command": "^1.1.8",
48
- "@zhin.js/core": "^1.1.46",
46
+ "@zhin.js/adapter": "^1.1.21",
47
+ "@zhin.js/command": "^1.1.9",
48
+ "@zhin.js/core": "^1.1.49",
49
49
  "@zhin.js/permission": "^1.1.7",
50
- "zhin.js": "^1.1.11"
50
+ "zhin.js": "^1.1.14"
51
51
  },
52
52
  "peerDependenciesMeta": {
53
53
  "@zhin.js/command": {
@@ -65,8 +65,8 @@
65
65
  "typescript": "^6.0.3",
66
66
  "vitest": "^4.1.10",
67
67
  "zod": "^4.4.3",
68
- "@zhin.js/host-http": "1.1.7",
69
- "zhin.js": "1.1.11"
68
+ "@zhin.js/host-http": "1.1.8",
69
+ "zhin.js": "1.1.14"
70
70
  },
71
71
  "files": [
72
72
  "adapters",
@@ -1,5 +1,8 @@
1
1
  /**
2
2
  * Telegram platform permit — ChatMember 状态 + 细粒度权限
3
+ *
4
+ * `role` 使用跨平台规范名 owner / admin(原生 creator / administrator 仅作兼容输入);
5
+ * 细粒度能力放在 `permissions`。
3
6
  */
4
7
  import type { PermissionSubject } from '@zhin.js/permission';
5
8
 
@@ -29,7 +32,7 @@ export function normalizeTelegramChatMember(member: {
29
32
  const status = member.status;
30
33
  if (status === 'creator') {
31
34
  permissions.push('chat_creator', 'chat_administrator', 'restrict_members', 'pin_messages');
32
- return { role: 'creator', permissions };
35
+ return { role: 'owner', permissions };
33
36
  }
34
37
  if (status === 'administrator') {
35
38
  permissions.push('chat_administrator');
@@ -37,7 +40,7 @@ export function normalizeTelegramChatMember(member: {
37
40
  if (member.can_pin_messages) permissions.push('pin_messages');
38
41
  if (member.can_delete_messages) permissions.push('delete_messages');
39
42
  if (member.can_manage_chat) permissions.push('manage_chat');
40
- return { role: 'administrator', permissions };
43
+ return { role: 'admin', permissions };
41
44
  }
42
45
  return { role: 'member', permissions };
43
46
  }
@@ -49,15 +52,15 @@ export function checkTelegramPlatformPermit(perm: string, subject: PermissionSub
49
52
 
50
53
  switch (perm) {
51
54
  case 'chat_creator':
52
- return role === 'creator' || has('chat_creator');
55
+ return role === 'owner' || role === 'creator' || has('chat_creator');
53
56
  case 'chat_administrator':
54
- return role === 'creator' || role === 'administrator' || has('chat_administrator');
57
+ return role === 'owner' || role === 'admin' || role === 'creator' || role === 'administrator' || has('chat_administrator');
55
58
  case 'restrict_members':
56
- return has('restrict_members') || role === 'creator';
59
+ return has('restrict_members') || role === 'owner' || role === 'creator';
57
60
  case 'pin_messages':
58
- return has('pin_messages') || role === 'creator';
61
+ return has('pin_messages') || role === 'owner' || role === 'creator';
59
62
  case 'manage_chat':
60
- return has('manage_chat') || role === 'creator';
63
+ return has('manage_chat') || role === 'owner' || role === 'creator';
61
64
  default:
62
65
  return false;
63
66
  }
package/src/protocol.ts CHANGED
@@ -582,7 +582,7 @@ function buildOutboundActions(
582
582
  let url: URL;
583
583
  try { url = new URL(String(data.url ?? '')); } catch { throw new EndpointDeliveryError('invalid_payload', 'Telegram share requires an HTTP(S) URL', 'not_sent'); }
584
584
  if (!['http:', 'https:'].includes(url.protocol) || typeof data.title !== 'string' || !data.title.trim()) throw new EndpointDeliveryError('invalid_payload', 'Telegram share requires an HTTP(S) URL and title', 'not_sent');
585
- if (['image', 'audio', 'artist', 'duration', 'config'].some(key => data[key] !== undefined)) throw new EndpointDeliveryError('unsupported_operation', 'Telegram share media and app metadata are not implemented', 'not_sent');
585
+ if (['image', 'audio', 'artist', 'duration', 'platform', 'config'].some(key => data[key] !== undefined)) throw new EndpointDeliveryError('unsupported_operation', 'Telegram share media and app metadata are not implemented', 'not_sent');
586
586
  textContent += `<a href="${escapeTelegramHtml(url.href)}">${escapeTelegramHtml(data.title)}</a>`;
587
587
  for (const value of [data.description, data.content]) if (typeof value === 'string' && value) textContent += `\n${escapeTelegramHtml(value)}`;
588
588
  break;