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
|
|
|
|
}
|
|
|
|
|
}
|