TgBots/Program.cs

80 lines
3.1 KiB
C#
Raw Normal View History

2024-12-25 04:21:26 +03:00
using System;
using System.Data;
2024-12-25 05:20:58 +03:00
using System.Threading;
2024-12-25 04:21:26 +03:00
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Dapper;
2024-12-26 03:32:41 +03:00
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
2024-12-26 03:41:03 +03:00
using Microsoft.Extensions.Logging;
2024-12-25 04:21:26 +03:00
using Npgsql;
2024-12-26 03:32:41 +03:00
using UserOfTheDayBot.Data;
using UserOfTheDayBot.Services;
2024-12-25 04:21:26 +03:00
2024-12-26 03:32:41 +03:00
public class Program
2024-12-25 04:21:26 +03:00
{
2024-12-26 03:32:41 +03:00
public static async Task Main(string[] args)
2024-12-25 04:21:26 +03:00
{
2024-12-26 03:32:41 +03:00
var host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
2024-12-25 04:21:26 +03:00
{
2024-12-26 03:32:41 +03:00
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables(); // Добавление переменных среды
})
2024-12-26 03:41:03 +03:00
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole(); // Вывод логов в консоль
})
2024-12-26 03:32:41 +03:00
.ConfigureServices((context, services) =>
2024-12-25 04:21:26 +03:00
{
2024-12-26 03:32:41 +03:00
services.AddSingleton<IUserRepository, UserRepository>();
services.AddSingleton<IUserOfTheDayRepository, UserOfTheDayRepository>();
services.AddSingleton<BotService>();
2024-12-25 04:21:26 +03:00
2024-12-26 03:32:41 +03:00
// TelegramBotClient зависит от IConfiguration для получения токена
services.AddSingleton<ITelegramBotClient>(provider =>
2024-12-25 04:21:26 +03:00
{
2024-12-26 03:32:41 +03:00
var configuration = provider.GetRequiredService<IConfiguration>();
var botToken = configuration["BotSettings:BotToken"];
return new TelegramBotClient(botToken);
});
})
.Build();
2024-12-26 03:41:03 +03:00
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Bot is starting...");
var botService = host.Services.GetRequiredService<BotService>();
var botClient = host.Services.GetRequiredService<ITelegramBotClient>();
using var cts = new CancellationTokenSource();
Console.CancelKeyPress += (_, _) => cts.Cancel();
botClient.StartReceiving(
updateHandler: async (bot, update, token) =>
{
// Получение вашего BotService из DI
var botService = host.Services.GetRequiredService<BotService>();
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<UpdateType>() // Получать все обновления
},
cancellationToken: cts.Token
);
logger.LogInformation("Bot is running. Press Ctrl+C to stop.");
await Task.Delay(Timeout.Infinite, cts.Token);
2024-12-25 04:21:26 +03:00
}
}