Files
lampac/mods/TelegramAuthBot/Services/TelegramAuthBotSession.Text.cs
prodik b6acef01ef TelegramAuth + TelegramAuthBot + WatchTogether; README/AGENT
- mods/TelegramAuth, mods/TelegramAuthBot, mods/WatchTogether: копии из
  образа с enable: true (правило 1), секции в config/init.conf
- TelegramAuth в API-режиме (enable: false -> accsdb/гейт не поднимается),
  TelegramAuthBot: бот @GatusMonBot, long polling
- WatchTogether: customPlugins watchtogether.js, relay /wt/c/
- README: секция про SQLite/volume (первый запуск), таблица модулей,
  состояние Tg-notify и TelegramAuth, раздел WatchTogether
- AGENT: правило 10 дополнено секретами init.conf, §12 переписан,
  добавлен §13 WatchTogether, список mods/ в §1
- в git bot_token и mutations_api_secret оставлены пустыми (правило 10),
  реальные значения только в рабочем файле на сервере
2026-10-04 15:03:00 +00:00

42 lines
1.2 KiB
C#

namespace TelegramAuthBot.Services
{
sealed partial class TelegramAuthBotSession
{
static string TruncateForTelegram(string s, int maxLen)
{
if (string.IsNullOrEmpty(s) || s.Length <= maxLen)
return s ?? "";
return s.Substring(0, maxLen) + "…";
}
static string StripJsonError(string json)
{
if (string.IsNullOrEmpty(json))
return "Ошибка API";
try
{
var jo = JObject.Parse(json);
var err = jo.Value<string>("error");
var det = jo.Value<string>("detail");
if (!string.IsNullOrEmpty(det))
return det;
return err ?? json;
}
catch
{
return json;
}
}
static string EscapeHtml(string s)
{
if (string.IsNullOrEmpty(s))
return "";
return s
.Replace("&", "&amp;", StringComparison.Ordinal)
.Replace("<", "&lt;", StringComparison.Ordinal)
.Replace(">", "&gt;", StringComparison.Ordinal);
}
}
}