Files
ChatBot/ChatBot/Program.cs
Leonid Pershin 0007a0ffc4 fix ai
2025-10-15 23:07:15 +03:00

93 lines
3.5 KiB
C#

using ChatBot.Models.Configuration;
using ChatBot.Models.Configuration.Validators;
using ChatBot.Services;
using ChatBot.Services.Telegram.Commands;
using ChatBot.Services.Telegram.Interfaces;
using ChatBot.Services.Telegram.Services;
using Serilog;
var builder = Host.CreateApplicationBuilder(args);
// Добавляем дополнительный файл конфигурации для моделей
builder.Configuration.AddJsonFile("appsettings.Models.json", optional: false, reloadOnChange: true);
// Настройка Serilog
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(builder.Configuration).CreateLogger();
try
{
Log.ForContext<Program>().Information("Starting Telegram Bot application...");
// Добавляем Serilog в DI контейнер
builder.Services.AddSerilog();
// Конфигурируем настройки
builder.Services.Configure<AppSettings>(builder.Configuration);
builder.Services.Configure<TelegramBotSettings>(
builder.Configuration.GetSection("TelegramBot")
);
builder.Services.Configure<OpenRouterSettings>(options =>
{
builder.Configuration.GetSection("OpenRouter").Bind(options);
builder
.Configuration.GetSection("ModelConfigurations")
.Bind(options, o => o.BindNonPublicProperties = false);
});
builder.Services.Configure<SerilogSettings>(builder.Configuration.GetSection("Serilog"));
// Валидируем конфигурацию
var appSettings = builder.Configuration.Get<AppSettings>();
if (appSettings == null)
{
Log.ForContext<Program>().Fatal("Failed to load configuration");
return;
}
var validationResult = ConfigurationValidator.ValidateAppSettings(appSettings);
if (!validationResult.IsValid)
{
Log.ForContext<Program>().Fatal("Configuration validation failed:");
foreach (var error in validationResult.Errors)
{
Log.ForContext<Program>().Fatal(" - {Error}", error);
}
return;
}
Log.ForContext<Program>().Information("Configuration validation passed");
// Регистрируем основные сервисы
builder.Services.AddSingleton<ModelService>();
builder.Services.AddSingleton<AIService>();
builder.Services.AddSingleton<ChatService>();
// Регистрируем Telegram сервисы
builder.Services.AddSingleton<ITelegramMessageSender, TelegramMessageSender>();
builder.Services.AddSingleton<ITelegramErrorHandler, TelegramErrorHandler>();
builder.Services.AddSingleton<CommandRegistry>();
builder.Services.AddSingleton<ITelegramCommandProcessor, TelegramCommandProcessor>();
builder.Services.AddSingleton<ITelegramMessageHandler, TelegramMessageHandler>();
builder.Services.AddSingleton<ITelegramBotService, TelegramBotService>();
builder.Services.AddHostedService<TelegramBotService>();
var host = builder.Build();
// Инициализируем ModelService
var modelService = host.Services.GetRequiredService<ModelService>();
await modelService.InitializeAsync();
// Инициализируем команды
var commandRegistry = host.Services.GetRequiredService<CommandRegistry>();
commandRegistry.RegisterCommandsFromAssembly(typeof(Program).Assembly, host.Services);
await host.RunAsync();
}
catch (Exception ex)
{
Log.ForContext<Program>().Fatal(ex, "Application terminated unexpectedly");
}
finally
{
await Log.CloseAndFlushAsync();
}