File size: 1,979 Bytes
76777b5
 
 
 
 
 
 
 
 
 
 
 
 
 
2d01c57
 
 
 
 
 
 
 
76777b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import {
  getGlobalConfig,
  saveGlobalConfig,
  type TelegramConfig,
} from '../../utils/config.js'
import type {
  TelegramConfigDraft,
  TelegramRuntimeConfig,
} from './telegramTypes.js'

export function getTelegramConfig(): TelegramConfig | undefined {
  return getGlobalConfig().telegram
}

export function hasTelegramRuntimeConfig(): boolean {
  const telegram = getTelegramConfig()
  return Boolean(
    telegram?.botToken?.trim() &&
      (telegram.allowedUserIds?.filter(Boolean).length ?? 0) > 0,
  )
}

export function saveTelegramConfig(updates: TelegramConfigDraft): void {
  saveGlobalConfig(current => ({
    ...current,
    telegram: {
      ...(current.telegram ?? {}),
      ...updates,
      updatedAt: new Date().toISOString(),
    },
  }))
}

export function clearTelegramConfig(): void {
  saveGlobalConfig(current => ({
    ...current,
    telegram: undefined,
  }))
}

export function maskTelegramToken(token?: string): string {
  if (!token) return '未配置'
  if (token.length <= 12) return `${token.slice(0, 4)}...`
  return `${token.slice(0, 8)}...${token.slice(-4)}`
}

export function parseAllowedTelegramUserIds(raw: string): string[] {
  return [...new Set(
    raw
      .split(/[\s,]+/)
      .map(part => part.trim())
      .filter(Boolean)
      .filter(part => /^\d+$/.test(part)),
  )]
}

export function formatAllowedTelegramUserIds(userIds?: string[]): string {
  if (!userIds || userIds.length === 0) return ''
  return userIds.join(', ')
}

export function getTelegramRuntimeConfig(): TelegramRuntimeConfig {
  const telegram = getTelegramConfig()
  const botToken = telegram?.botToken?.trim()
  const allowedUserIds = telegram?.allowedUserIds?.filter(Boolean) ?? []

  if (!botToken) {
    throw new Error('请先在 /telegram 中配置 Bot Token')
  }

  if (allowedUserIds.length === 0) {
    throw new Error('请先在 /telegram 中配置允许访问的 Telegram user id')
  }

  return {
    botToken,
    allowedUserIds,
  }
}