chenbhao commited on
Commit
94855b2
·
1 Parent(s): d099b79

feat: interactivateCommands in telegram

Browse files
src/services/telegram/interactiveCommands.ts CHANGED
@@ -37,6 +37,7 @@ const OAUTH_POLLING_SAFETY_MARGIN_MS = 3000
37
 
38
  const MODEL_PREFIX = 'tg:model'
39
  const CONNECT_PREFIX = 'tg:connect'
 
40
 
41
  type ConnectPendingState =
42
  | { kind: 'openrouter-api-key' }
@@ -95,6 +96,19 @@ function buildConnectKeyboard(): TelegramInlineKeyboardMarkup {
95
  ])
96
  }
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  function buildSkipKeyKeyboard(providerId: 'custom-openai' | 'custom-anthropic') {
99
  return createKeyboard([
100
  [
@@ -456,6 +470,15 @@ export async function maybeHandleTelegramInteractiveInput(
456
  return true
457
  }
458
 
 
 
 
 
 
 
 
 
 
459
  return false
460
  }
461
 
@@ -627,6 +650,25 @@ export async function handleTelegramCallback(
627
  return true
628
  }
629
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
  return false
631
  }
632
 
 
37
 
38
  const MODEL_PREFIX = 'tg:model'
39
  const CONNECT_PREFIX = 'tg:connect'
40
+ const LOGIN_PREFIX = 'tg:login'
41
 
42
  type ConnectPendingState =
43
  | { kind: 'openrouter-api-key' }
 
96
  ])
97
  }
98
 
99
+ function buildLoginKeyboard(): TelegramInlineKeyboardMarkup {
100
+ return createKeyboard([
101
+ [
102
+ { text: 'Anthropic', callback_data: `${LOGIN_PREFIX}:provider:anthropic` },
103
+ { text: 'OpenAI', callback_data: `${LOGIN_PREFIX}:provider:openai` },
104
+ ],
105
+ [
106
+ { text: 'OpenRouter', callback_data: `${LOGIN_PREFIX}:provider:openrouter` },
107
+ { text: 'Local', callback_data: `${LOGIN_PREFIX}:provider:local` },
108
+ ],
109
+ ])
110
+ }
111
+
112
  function buildSkipKeyKeyboard(providerId: 'custom-openai' | 'custom-anthropic') {
113
  return createKeyboard([
114
  [
 
470
  return true
471
  }
472
 
473
+ if (text === '/login') {
474
+ await telegramService.sendMessage(
475
+ event.chatId,
476
+ '请选择登录方式:\n\nAnthropic - Anthropic 账户登录\nOpenAI - OpenAI / Codex 登录\nOpenRouter - OpenRouter API Key\nLocal - 本地模型服务器',
477
+ buildLoginKeyboard(),
478
+ )
479
+ return true
480
+ }
481
+
482
  return false
483
  }
484
 
 
650
  return true
651
  }
652
 
653
+ if (event.data.startsWith(`${LOGIN_PREFIX}:provider:`)) {
654
+ const providerId = event.data.split(':').at(-1)
655
+ await telegramService.answerCallbackQuery(event.callbackQueryId)
656
+
657
+ const providerMessages: Record<string, string> = {
658
+ 'anthropic': 'Anthropic 登录需要在本地终端执行 /login 命令,Telegram 暂不支持浏览器 OAuth 流程。',
659
+ 'openai': 'OpenAI 登录需要在本地终端执行 /login 命令,Telegram 暂不支持交互式登录。',
660
+ 'openrouter': 'OpenRouter 登录需要在本地终端执行 /login 命令,Telegram 暂不支持 API Key 输入。',
661
+ 'local': '本地模型配置需要在本地终端执行 /login 命令。',
662
+ }
663
+
664
+ await telegramService.editMessage(
665
+ event.chatId,
666
+ event.messageId,
667
+ providerMessages[providerId] || '暂不支持此登录方式。',
668
+ )
669
+ return true
670
+ }
671
+
672
  return false
673
  }
674