feat: add Telegram API connection test button to settings

Runs 7-step diagnostic: token check, sing-box running, port 4534
listening, DNS resolution, direct IPv4 API, proxy API, send test
message. Shows green/red indicators with actionable advice for each.
This commit is contained in:
Dushnilin
2026-08-20 21:56:12 +03:00
parent d6df03e1f2
commit 66ffb50a1a
3 changed files with 469 additions and 84 deletions
+189 -82
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-20 16:44+0300\n"
"PO-Revision-Date: 2026-08-20 16:44+0300\n"
"POT-Creation-Date: 2026-08-20 18:52+0300\n"
"PO-Revision-Date: 2026-08-20 18:52+0300\n"
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
@@ -418,8 +418,8 @@ msgstr ""
msgid "Anonymized support report copied to clipboard"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16898
#: src/tachyon/tabs/updates/initController.ts:864
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16916
#: src/tachyon/tabs/updates/initController.ts:873
msgid "Another component action is already running"
msgstr ""
@@ -427,6 +427,10 @@ msgstr ""
msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2427
msgid "API returned error — token may be invalid"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9552
msgid "Apply rules of this section only to selected protocols."
msgstr ""
@@ -598,6 +602,14 @@ msgstr ""
msgid "Bot Status"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2359
msgid "bot_token is empty — set token first"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2364
msgid "bot_token is set"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9285
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9304
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:51
@@ -715,6 +727,22 @@ msgstr ""
msgid "Cancel"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2412
msgid "Cannot check DNS"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2395
msgid "Cannot check port 4534"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2379
msgid "Cannot check sing-box status"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2429
msgid "Cannot reach Telegram API directly (IPv4 blocked by ISP?)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8885
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8949
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9130
@@ -755,8 +783,8 @@ msgid "Certificate pin is unavailable. Apply or restart the server to generate t
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16152
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16625
#: src/tachyon/tabs/updates/initController.ts:501
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16643
#: src/tachyon/tabs/updates/initController.ts:510
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:321
msgid "Check completed!"
msgstr ""
@@ -784,8 +812,8 @@ msgstr ""
msgid "Check timeout after which the server is considered dead"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16956
#: src/tachyon/tabs/updates/initController.ts:933
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16974
#: src/tachyon/tabs/updates/initController.ts:942
msgid "Check update"
msgstr ""
@@ -968,19 +996,19 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13038
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14584
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14624
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16238
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16273
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16247
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16282
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3660
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10239
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1803
#: src/partials/modal/renderModal.ts:263
#: src/tachyon/tabs/dashboard/initController.ts:1262
#: src/tachyon/tabs/diagnostic/initController.ts:1542
#: src/tachyon/tabs/monitoring/initController.ts:884
#: src/tachyon/tabs/monitoring/initController.ts:934
#: src/tachyon/tabs/diagnostic/initController.ts:1542
#: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:213
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:431
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:477
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:439
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:485
msgid "Close"
msgstr ""
@@ -1335,6 +1363,10 @@ msgstr ""
msgid "Direct (Default)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2434
msgid "Direct API connection failed"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12857
#: src/tachyon/tabs/diagnostic/initController.ts:1335
msgid "Direct Bypass"
@@ -1344,6 +1376,10 @@ msgstr ""
msgid "Direct connection"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2425
msgid "Direct IPv4 to Telegram API works"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12851
#: src/tachyon/tabs/diagnostic/initController.ts:1326
msgid "Direct WAN"
@@ -1381,6 +1417,10 @@ msgstr ""
msgid "DNS"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2407
msgid "DNS cannot resolve api.telegram.org — check DNS settings"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:915
msgid "DNS Check Interval"
msgstr ""
@@ -1432,6 +1472,10 @@ msgstr ""
msgid "DNS requests through section"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2405
msgid "DNS resolves api.telegram.org"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:972
msgid "DNS Rewrite TTL"
msgstr ""
@@ -2004,16 +2048,16 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3226
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3229
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16710
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16710
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16768
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16939
#: src/tachyon/tabs/updates/initController.ts:622
#: src/tachyon/tabs/updates/initController.ts:623
#: src/tachyon/tabs/updates/initController.ts:698
#: src/tachyon/tabs/updates/initController.ts:911
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16728
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16728
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16786
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16957
#: src/tachyon/methods/shell/index.ts:172
#: src/tachyon/methods/shell/index.ts:179
#: src/tachyon/tabs/updates/initController.ts:631
#: src/tachyon/tabs/updates/initController.ts:632
#: src/tachyon/tabs/updates/initController.ts:707
#: src/tachyon/tabs/updates/initController.ts:920
msgid "Failed to execute"
msgstr ""
@@ -2084,6 +2128,14 @@ msgstr ""
msgid "Failed to save snapshot"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2486
msgid "Failed to send test message"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2481
msgid "Failed to send test message — check admin_ids and bot permissions"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2063
msgid "Failed to start bot"
msgstr ""
@@ -2635,27 +2687,27 @@ msgstr ""
msgid "Init timeout (Itime)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16228
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16965
#: src/tachyon/tabs/updates/initController.ts:947
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:420
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16237
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16983
#: src/tachyon/tabs/updates/initController.ts:956
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:428
msgid "Install"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17367
#: src/tachyon/tabs/updates/initController.ts:1435
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17385
#: src/tachyon/tabs/updates/initController.ts:1444
msgid "Install another build:"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17247
#: src/tachyon/tabs/updates/initController.ts:1296
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17265
#: src/tachyon/tabs/updates/initController.ts:1305
msgid "Installed build → Available build"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16507
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17255
#: src/tachyon/tabs/updates/initController.ts:341
#: src/tachyon/tabs/updates/initController.ts:1304
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16525
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17273
#: src/tachyon/tabs/updates/initController.ts:350
#: src/tachyon/tabs/updates/initController.ts:1313
msgid "Installed version is newer than release"
msgstr ""
@@ -3223,15 +3275,15 @@ msgstr ""
msgid "Latency test URL"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16509
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17253
#: src/tachyon/tabs/updates/initController.ts:344
#: src/tachyon/tabs/updates/initController.ts:1302
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16527
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17271
#: src/tachyon/tabs/updates/initController.ts:353
#: src/tachyon/tabs/updates/initController.ts:1311
msgid "Latest version is installed"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17255
#: src/tachyon/tabs/updates/initController.ts:1304
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17273
#: src/tachyon/tabs/updates/initController.ts:1313
msgid "Latest version:"
msgstr ""
@@ -3314,16 +3366,16 @@ msgstr ""
msgid "Loading connections"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17129
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17142
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17152
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17162
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17172
#: src/tachyon/tabs/updates/initController.ts:1148
#: src/tachyon/tabs/updates/initController.ts:1163
#: src/tachyon/tabs/updates/initController.ts:1181
#: src/tachyon/tabs/updates/initController.ts:1195
#: src/tachyon/tabs/updates/initController.ts:1209
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17147
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17160
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17170
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17180
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17190
#: src/tachyon/tabs/updates/initController.ts:1157
#: src/tachyon/tabs/updates/initController.ts:1172
#: src/tachyon/tabs/updates/initController.ts:1190
#: src/tachyon/tabs/updates/initController.ts:1204
#: src/tachyon/tabs/updates/initController.ts:1218
msgid "Loading..."
msgstr ""
@@ -3435,6 +3487,10 @@ msgstr ""
msgid "Mixed Proxy Port"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2388
msgid "Mixed proxy port 4534 is listening"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9125
msgid "Mixed Proxy Username"
msgstr ""
@@ -3596,6 +3652,10 @@ msgstr ""
msgid "No active routing sections found."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2463
msgid "No admin_ids set — cannot send test message"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14686
#: src/tachyon/tabs/monitoring/initController.ts:1013
msgid "No closed connections"
@@ -3728,14 +3788,14 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5653
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5658
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17152
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17162
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17172
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17170
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17180
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17190
#: src/tachyon/helpers/singBoxVariant.ts:38
#: src/tachyon/helpers/singBoxVariant.ts:46
#: src/tachyon/tabs/updates/initController.ts:1184
#: src/tachyon/tabs/updates/initController.ts:1198
#: src/tachyon/tabs/updates/initController.ts:1212
#: src/tachyon/tabs/updates/initController.ts:1193
#: src/tachyon/tabs/updates/initController.ts:1207
#: src/tachyon/tabs/updates/initController.ts:1221
msgid "Not installed"
msgstr ""
@@ -3868,10 +3928,10 @@ msgstr ""
msgid "Only the specified servers."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17230
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17267
#: src/tachyon/tabs/updates/initController.ts:1278
#: src/tachyon/tabs/updates/initController.ts:1317
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17248
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17285
#: src/tachyon/tabs/updates/initController.ts:1287
#: src/tachyon/tabs/updates/initController.ts:1326
msgid "Open"
msgstr ""
@@ -3889,8 +3949,8 @@ msgstr ""
msgid "Operation completed successfully!"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16269
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:472
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16278
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:480
msgid "Operation failed"
msgstr ""
@@ -4120,6 +4180,10 @@ msgstr ""
msgid "Polling interval must be at least 1 second"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2390
msgid "Port 4534 not listening — proxy may not be available"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9095
msgid "Port cannot be empty"
msgstr ""
@@ -4249,6 +4313,10 @@ msgstr ""
msgid "Proxy / DPI"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2455
msgid "Proxy API connection failed"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1808
msgid "Proxy Fail Threshold"
msgstr ""
@@ -4266,6 +4334,14 @@ msgstr ""
msgid "Proxy link is unavailable"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2450
msgid "Proxy route to Telegram API failed — check proxy outbound config"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2448
msgid "Proxy route to Telegram API works"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2265
msgid "Proxy Section for Bot"
msgstr ""
@@ -4335,8 +4411,8 @@ msgstr ""
msgid "Rebuild firewall rules"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17249
#: src/tachyon/tabs/updates/initController.ts:1298
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17267
#: src/tachyon/tabs/updates/initController.ts:1307
msgid "Rebuilt release"
msgstr ""
@@ -4385,8 +4461,8 @@ msgstr ""
msgid "Regular expression must not contain spaces or commas"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17046
#: src/tachyon/tabs/updates/initController.ts:1061
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17064
#: src/tachyon/tabs/updates/initController.ts:1070
msgid "Reinstall"
msgstr ""
@@ -4409,9 +4485,9 @@ msgstr ""
msgid "Removal completed successfully!"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17014
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17032
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7927
#: src/tachyon/tabs/updates/initController.ts:1017
#: src/tachyon/tabs/updates/initController.ts:1026
msgid "Remove"
msgstr ""
@@ -4718,6 +4794,10 @@ msgstr ""
msgid "Running"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2331
msgid "Running diagnostics…"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9246
msgid "Russia (ru)"
msgstr ""
@@ -5087,9 +5167,9 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3410
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3429
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12323
#: src/tachyon/tabs/diagnostic/initController.ts:604
#: src/tachyon/methods/shell/index.ts:422
#: src/tachyon/methods/shell/index.ts:443
#: src/tachyon/tabs/diagnostic/initController.ts:604
msgid "Service action failed"
msgstr ""
@@ -5116,8 +5196,8 @@ msgstr ""
msgid "Services info"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16217
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:407
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16226
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:415
msgid "Services restarted. Click to reload page."
msgstr ""
@@ -5194,6 +5274,14 @@ msgstr ""
msgid "Sing-box installed"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2374
msgid "sing-box is NOT running — bot cannot route through proxy"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2372
msgid "sing-box is running"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8993
#: src/tachyon/tabs/diagnostic/checks/runSingBoxCheck.ts:87
msgid "Sing-box listening ports"
@@ -5662,6 +5750,13 @@ msgstr ""
msgid "Telegram Bot Token"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2317
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2361
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2465
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2492
msgid "Test Connection"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2104
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2108
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2606
@@ -5671,6 +5766,10 @@ msgstr ""
msgid "Test latency"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2479
msgid "Test message sent to chat"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2784
msgid "Test only selected servers."
msgstr ""
@@ -5695,11 +5794,19 @@ msgstr ""
msgid "Test servers whose names match the expression."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2304
msgid "Test Telegram Connection"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:7445
#: src/tachyon/tabs/dashboard/initController.ts:1287
msgid "Testing URL"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2328
msgid "Testing…"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5654
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6099
msgid "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here."
@@ -5890,8 +5997,8 @@ msgstr ""
msgid "Traffic will go through the default route (Direct/Default)."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16913
#: src/tachyon/tabs/updates/initController.ts:880
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16931
#: src/tachyon/tabs/updates/initController.ts:889
msgid "Transient connection error"
msgstr ""
@@ -6058,7 +6165,7 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9612
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9615
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9616
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16536
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16554
#: src/tachyon/helpers/singBoxVariant.ts:37
#: src/tachyon/services/systemInfo.service.ts:10
#: src/tachyon/services/systemInfo.service.ts:12
@@ -6069,7 +6176,7 @@ msgstr ""
#: src/tachyon/services/systemInfo.service.ts:25
#: src/tachyon/services/systemInfo.service.ts:28
#: src/tachyon/services/systemInfo.service.ts:29
#: src/tachyon/tabs/updates/initController.ts:382
#: src/tachyon/tabs/updates/initController.ts:391
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:25
msgid "unknown"
msgstr ""
@@ -6130,23 +6237,23 @@ msgstr ""
msgid "Up to 10 snapshots are kept; the oldest ones are removed automatically."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16965
#: src/tachyon/tabs/updates/initController.ts:947
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16983
#: src/tachyon/tabs/updates/initController.ts:956
msgid "Update"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16504
#: src/tachyon/tabs/updates/initController.ts:337
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16522
#: src/tachyon/tabs/updates/initController.ts:346
msgid "Update is available"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17237
#: src/tachyon/tabs/updates/initController.ts:1285
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17255
#: src/tachyon/tabs/updates/initController.ts:1294
msgid "Update is available for current release"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17218
#: src/tachyon/tabs/updates/initController.ts:1264
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17236
#: src/tachyon/tabs/updates/initController.ts:1273
msgid "Update is available:"
msgstr ""
@@ -2295,6 +2295,206 @@ function createTelegramContent(section) {
o.remove = function () {
uci.unset(UCI_PACKAGE, "telegram", "bot_proxy_section");
};
// ── Telegram API Connection Test ──────────────────────────────────────────
const testOpt = section.option(
form.DummyValue,
"_test_telegram_connection",
_("Test Telegram Connection"),
);
testOpt.rawhtml = true;
testOpt.depends("enabled", "1");
testOpt.cfgvalue = function () {
const wrapper = E("div", { style: "margin-top: 8px;" });
const btn = E(
"button",
{
class: "btn cbi-button cbi-button-action",
type: "button",
id: "tachyon-telegram-test-btn",
},
"\uD83D\uDD0C " + _("Test Connection"),
);
const result = E("div", {
id: "tachyon-telegram-test-result",
style: "margin-top: 8px; white-space: pre-wrap; font-family: monospace; font-size: 12px; display: none;",
});
wrapper.appendChild(btn);
wrapper.appendChild(result);
btn.addEventListener("click", function () {
btn.disabled = true;
btn.textContent = "\u23F3 " + _("Testing…");
result.style.display = "block";
result.style.color = "";
result.textContent = _("Running diagnostics…");
var token = uci.get(UCI_PACKAGE, "telegram", "bot_token") || "";
var checks = [];
function addCheck(icon, text, ok) {
checks.push(icon + " " + text);
result.textContent = checks.join("\n");
}
function runSequential(tasks, done) {
var i = 0;
function next() {
if (i >= tasks.length) {
done();
return;
}
var fn = tasks[i];
i++;
fn(next);
}
next();
}
runSequential([
// 1. Token check
function (next) {
if (!token) {
addCheck("\u274C", _("bot_token is empty — set token first"), false);
btn.disabled = false;
btn.textContent = "\uD83D\uDD0C " + _("Test Connection");
return;
}
addCheck("\u2705", _("bot_token is set"), true);
next();
},
// 2. sing-box running
function (next) {
fs.exec("/bin/pidof", ["sing-box"])
.then(function (res) {
if (res.code === 0) {
addCheck("\u2705", _("sing-box is running"), true);
} else {
addCheck("\u274C", _("sing-box is NOT running — bot cannot route through proxy"), false);
}
next();
})
.catch(function () {
addCheck("\u274C", _("Cannot check sing-box status"), false);
next();
});
},
// 3. Mixed proxy port
function (next) {
fs.exec("/bin/sh", ["-c", "netstat -tlnp 2>/dev/null | grep ':4534 '"])
.then(function (res) {
if (res.code === 0 && res.stdout && res.stdout.trim()) {
addCheck("\u2705", _("Mixed proxy port 4534 is listening"), true);
} else {
addCheck("\u26A0\uFE0F", _("Port 4534 not listening — proxy may not be available"), false);
}
next();
})
.catch(function () {
addCheck("\u26A0\uFE0F", _("Cannot check port 4534"), false);
next();
});
},
// 4. DNS resolution
function (next) {
fs.exec("/bin/sh", ["-c", "nslookup api.telegram.org 2>/dev/null | head -5"])
.then(function (res) {
var out = (res.stdout || "").trim();
if (out && out.indexOf("Address") !== -1 && out.indexOf("149.154") !== -1) {
addCheck("\u2705", _("DNS resolves api.telegram.org"), true);
} else {
addCheck("\u274C", _("DNS cannot resolve api.telegram.org — check DNS settings"), false);
}
next();
})
.catch(function () {
addCheck("\u26A0\uFE0F", _("Cannot check DNS"), false);
next();
});
},
// 5. Direct API test (IPv4)
function (next) {
fs.exec("/usr/bin/curl", [
"-s", "-4", "--connect-timeout", "5", "--max-time", "8",
"https://api.telegram.org/bot" + token + "/getMe",
])
.then(function (res) {
var out = (res.stdout || "").trim();
if (res.code === 0 && out.indexOf('"ok":true') !== -1) {
addCheck("\u2705", _("Direct IPv4 to Telegram API works"), true);
} else if (out.indexOf('"ok":false') !== -1) {
addCheck("\u274C", _("API returned error — token may be invalid"), false);
} else {
addCheck("\u274C", _("Cannot reach Telegram API directly (IPv4 blocked by ISP?)"), false);
}
next();
})
.catch(function () {
addCheck("\u274C", _("Direct API connection failed"), false);
next();
});
},
// 6. Proxy API test
function (next) {
fs.exec("/usr/bin/curl", [
"-s", "-4", "--connect-timeout", "5", "--max-time", "8",
"--proxy", "http://127.0.0.1:4534",
"https://api.telegram.org/bot" + token + "/getMe",
])
.then(function (res) {
var out = (res.stdout || "").trim();
if (res.code === 0 && out.indexOf('"ok":true') !== -1) {
addCheck("\u2705", _("Proxy route to Telegram API works"), true);
} else {
addCheck("\u274C", _("Proxy route to Telegram API failed — check proxy outbound config"), false);
}
next();
})
.catch(function () {
addCheck("\u274C", _("Proxy API connection failed"), false);
next();
});
},
// 7. Send test message
function (next) {
var adminId = (uci.get(UCI_PACKAGE, "telegram", "admin_ids") || "").split(",")[0] || "";
if (!adminId) {
addCheck("\u26A0\uFE0F", _("No admin_ids set — cannot send test message"), false);
btn.disabled = false;
btn.textContent = "\uD83D\uDD0C " + _("Test Connection");
return;
}
fs.exec("/usr/bin/curl", [
"-s", "-m", "10", "--connect-timeout", "5",
"--proxy", "http://127.0.0.1:4534",
"-X", "POST",
"-H", "Content-Type: application/json",
"-d", '{"chat_id":' + adminId + ',"text":"\u2705 Tachyon connection test passed"}',
"https://api.telegram.org/bot" + token + "/sendMessage",
])
.then(function (res) {
var out = (res.stdout || "").trim();
if (res.code === 0 && out.indexOf('"ok":true') !== -1) {
addCheck("\u2705", _("Test message sent to chat ") + adminId, true);
} else {
addCheck("\u274C", _("Failed to send test message — check admin_ids and bot permissions"), false);
}
next();
})
.catch(function () {
addCheck("\u274C", _("Failed to send test message"), false);
next();
});
},
], function () {
btn.disabled = false;
btn.textContent = "\uD83D\uDD0C " + _("Test Connection");
});
});
return wrapper;
};
}
const EntryPoint = {
+80 -2
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-20 19:44+0300\n"
"PO-Revision-Date: 2026-08-20 19:44+0300\n"
"POT-Creation-Date: 2026-08-20 21:52+0300\n"
"PO-Revision-Date: 2026-08-20 21:52+0300\n"
"Last-Translator: Dushnilin\n"
"Language-Team: none\n"
"Language: ru\n"
@@ -281,6 +281,9 @@ msgstr "Другое действие уже выполняется"
msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)"
msgstr "API-ключ для OpenAI (sk-...) или DeepSeek (опционально для Ollama / LM Studio)"
msgid "API returned error — token may be invalid"
msgstr ""
msgid "Apply rules of this section only to selected protocols."
msgstr "Применять правила этой секции только к выбранным протоколам."
@@ -395,6 +398,12 @@ msgstr "Bootstrap DNS-серверы"
msgid "Bot Status"
msgstr "Статус бота"
msgid "bot_token is empty — set token first"
msgstr ""
msgid "bot_token is set"
msgstr ""
msgid "Browser FakeIP check could not be completed"
msgstr "Не удалось выполнить проверку FakeIP в браузере"
@@ -467,6 +476,18 @@ msgstr "Путь к файлу кэша не может быть пустым"
msgid "Cancel"
msgstr "Отмена"
msgid "Cannot check DNS"
msgstr ""
msgid "Cannot check port 4534"
msgstr ""
msgid "Cannot check sing-box status"
msgstr ""
msgid "Cannot reach Telegram API directly (IPv4 blocked by ISP?)"
msgstr ""
msgid "Cannot receive checks result"
msgstr "Не удалось получить результаты проверки"
@@ -830,12 +851,18 @@ msgstr "Напрямую"
msgid "Direct (Default)"
msgstr "Прямое (по умолчанию)"
msgid "Direct API connection failed"
msgstr ""
msgid "Direct Bypass"
msgstr "Прямой WAN"
msgid "Direct connection"
msgstr "Прямое подключение"
msgid "Direct IPv4 to Telegram API works"
msgstr ""
msgid "Direct WAN"
msgstr "Прямой WAN"
@@ -860,6 +887,9 @@ msgstr "Отображаемое имя"
msgid "DNS"
msgstr "DNS"
msgid "DNS cannot resolve api.telegram.org — check DNS settings"
msgstr ""
msgid "DNS Check Interval"
msgstr "Интервал проверки DNS"
@@ -893,6 +923,9 @@ msgstr "Протокол DNS, используемый резолвером"
msgid "DNS requests through section"
msgstr "DNS-запросы через секцию"
msgid "DNS resolves api.telegram.org"
msgstr ""
msgid "DNS Rewrite TTL"
msgstr "TTL DNS-записей"
@@ -1319,6 +1352,12 @@ msgstr "Ошибка сохранения настроек Smart Detect"
msgid "Failed to save snapshot"
msgstr "Не удалось сохранить снапшот"
msgid "Failed to send test message"
msgstr ""
msgid "Failed to send test message — check admin_ids and bot permissions"
msgstr ""
msgid "Failed to start bot"
msgstr "Не удалось запустить бота"
@@ -2180,6 +2219,9 @@ msgstr "Пароль смешанного прокси"
msgid "Mixed Proxy Port"
msgstr "Порт смешанного прокси"
msgid "Mixed proxy port 4534 is listening"
msgstr ""
msgid "Mixed Proxy Username"
msgstr "Имя пользователя смешанного прокси"
@@ -2282,6 +2324,9 @@ msgstr "Активные устройства в локальной сети н
msgid "No active routing sections found."
msgstr "Активные секции маршрутизации не найдены."
msgid "No admin_ids set — cannot send test message"
msgstr ""
msgid "No closed connections"
msgstr "Нет закрытых подключений"
@@ -2600,6 +2645,9 @@ msgstr "Интервал опроса (секунды)"
msgid "Polling interval must be at least 1 second"
msgstr "Интервал опроса должен быть не менее 1 секунды"
msgid "Port 4534 not listening — proxy may not be available"
msgstr ""
msgid "Port cannot be empty"
msgstr "Порт не может быть пустым"
@@ -2684,6 +2732,9 @@ msgstr "Протокол"
msgid "Proxy / DPI"
msgstr "Прокси / DPI"
msgid "Proxy API connection failed"
msgstr ""
msgid "Proxy Fail Threshold"
msgstr "Порог ошибок прокси"
@@ -2696,6 +2747,12 @@ msgstr "URL проверки здоровья прокси"
msgid "Proxy link is unavailable"
msgstr "Ссылка прокси недоступна"
msgid "Proxy route to Telegram API failed — check proxy outbound config"
msgstr ""
msgid "Proxy route to Telegram API works"
msgstr ""
msgid "Proxy Section for Bot"
msgstr "Секция прокси для бота"
@@ -2981,6 +3038,9 @@ msgstr "Запустить восстановление"
msgid "Running"
msgstr "Запущен"
msgid "Running diagnostics…"
msgstr ""
msgid "Russia (ru)"
msgstr "Россия (ru)"
@@ -3299,6 +3359,12 @@ msgstr "FakeIP DNS sing-box работает"
msgid "Sing-box installed"
msgstr "Sing-box установлен"
msgid "sing-box is NOT running — bot cannot route through proxy"
msgstr ""
msgid "sing-box is running"
msgstr ""
msgid "Sing-box listening ports"
msgstr "Sing-box слушает порты"
@@ -3602,9 +3668,15 @@ msgstr "Telegram Бот"
msgid "Telegram Bot Token"
msgstr "Токен Telegram-бота"
msgid "Test Connection"
msgstr ""
msgid "Test latency"
msgstr "Тестирование задержки"
msgid "Test message sent to chat"
msgstr ""
msgid "Test only selected servers."
msgstr "Тестировать только выбранные серверы."
@@ -3623,9 +3695,15 @@ msgstr "Тестировать серверы только из указанны
msgid "Test servers whose names match the expression."
msgstr "Тестировать серверы, чьи имена соответствуют выражению."
msgid "Test Telegram Connection"
msgstr ""
msgid "Testing URL"
msgstr "URL проверки"
msgid "Testing…"
msgstr ""
msgid "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here."
msgstr "fwmark desync управляется Tachyon для предотвращения циклов и не может быть переопределён здесь."