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),
  реальные значения только в рабочем файле на сервере
This commit is contained in:
2026-10-04 15:03:00 +00:00
parent 67e5713064
commit b6acef01ef
44 changed files with 13692 additions and 14 deletions
@@ -0,0 +1,41 @@
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);
}
}
}