feat: Telegram Bot Integration

- TelegramService: Non-Streaming Claude Chat mit Tool-Loop,
  Commands (/start, /link, /session, /new, /clear, /status, /unlink),
  Nachrichten-Splitting bei >4096 Zeichen, Typing-Indicator,
  History-Aufbau aus DB, Token-Usage-Tracking
- TelegramEndpoint: Webhook (POST, no-auth), Link-Code-Generierung
  (POST, auth), Webhook-Registrierung + Info (Admin)
- DatabaseService: telegram_links Tabelle mit Link-Code-Flow
  (6-stelliger Code, 5 Min Ablauf), GetUserSessions
- AuthMiddleware: /api/telegram/webhook von Auth ausgenommen
- Session-Verknüpfung via Link-Code (Web-UI generiert Code,
  Telegram /link CODE löst ein)
- TelegramLinkRecord Model
This commit is contained in:
Meleki committed 2026-03-03 06:30:05 +01:00
1 parent 81714b1f4c
commit 0dd7c38751
7 files changed
+1108 -5

No files matched your search

+18 -2
View File
@@ -1,9 +1,11 @@
using System;
using System.IO;
using System.Net.Http;
using Gott.Endpoints;
using Gott.Middleware;
using Gott.Services;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
@@ -20,8 +22,21 @@ builder.Services.AddSingleton(dbService);
builder.Services.AddSingleton(new ToolService());
builder.Services.AddSingleton(new ImageService());
builder.Services.AddSingleton(new StreamingTracker());
builder.Services.AddSingleton(new MemoryService(dataDir));
builder.Services.AddSingleton(new SkillService(dataDir));
var memoryService = new MemoryService(dataDir);
var skillService = new SkillService(dataDir);
builder.Services.AddSingleton(memoryService);
builder.Services.AddSingleton(skillService);
// Telegram Bot (optional – nur wenn Token konfiguriert)
var telegramToken = builder.Configuration["TelegramBotToken"] ?? "";
var telegramSecret = builder.Configuration["TelegramWebhookSecret"] ?? Guid.NewGuid().ToString("N");
var anthropicToken = builder.Configuration["AnthropicToken"] ?? "";
builder.Services.AddSingleton<TelegramService>(sp =>
new TelegramService(
telegramToken, telegramSecret, anthropicToken,
sp.GetRequiredService<IHttpClientFactory>(),
dbService, new ToolService(), memoryService, skillService,
builder.Configuration.GetValue<int>("MaxIterations", 100)));
var app = builder.Build();
app.UseDefaultFiles();
@@ -38,5 +53,6 @@ app.MapInfoEndpoint();
app.MapBackupEndpoint();
app.MapSkillEndpoints();
app.MapProfileEndpoints();
app.MapTelegramEndpoints();
app.Run("http://0.0.0.0:19000");