using System; using System.Data; using System.Threading; using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; using Dapper; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Npgsql; using UserOfTheDayBot.Data; using UserOfTheDayBot.Services; public class Program { public static async Task Main(string[] args) { var host = Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); config.AddEnvironmentVariables(); // Добавление переменных среды }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); // Вывод логов в консоль }) .ConfigureServices((context, services) => { services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // TelegramBotClient зависит от IConfiguration для получения токена services.AddSingleton(provider => { var configuration = provider.GetRequiredService(); var botToken = configuration["BotSettings:BotToken"]; return new TelegramBotClient(botToken); }); }) .Build(); var logger = host.Services.GetRequiredService>(); logger.LogInformation("Bot is starting..."); var botService = host.Services.GetRequiredService(); var botClient = host.Services.GetRequiredService(); using var cts = new CancellationTokenSource(); Console.CancelKeyPress += (_, _) => cts.Cancel(); botClient.StartReceiving( updateHandler: async (bot, update, token) => { // Получение вашего BotService из DI var botService = host.Services.GetRequiredService(); await botService.HandleUpdateAsync(update, token); }, errorHandler: async (bot, exception, token) => { logger.LogError($"Telegram Bot Error: {exception.Message}"); await Task.CompletedTask; }, receiverOptions: new Telegram.Bot.Polling.ReceiverOptions { AllowedUpdates = Array.Empty() // Получать все обновления }, cancellationToken: cts.Token ); logger.LogInformation("Bot is running. Press Ctrl+C to stop."); await Task.Delay(Timeout.Infinite, cts.Token); } }