using Microsoft.Extensions.Options; using SVBotApp.Configuration; using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; using Telegram.Bot.Types.ReplyMarkups; namespace SVBotApp; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly BotSettings _botSettings; private TelegramBotClient? _botClient = null; public Worker(ILogger logger, IOptions botSettings) { _logger = logger; _botSettings = botSettings.Value; } protected override async Task ExecuteAsync(CancellationToken cancellationToken) { _botClient ??= new TelegramBotClient(_botSettings.Secret, cancellationToken: cancellationToken); _botClient.OnMessage += OnMessageAsync; _botClient.OnUpdate += OnUpdateAsync; _logger.LogInformation("INITIALIZED"); } private async Task OnUpdateAsync(Update update) { _logger.LogInformation("UPDATE_RECEIVED => '{update}'", update.Id); if (update.Type == UpdateType.CallbackQuery && update.CallbackQuery != null) { _logger.LogInformation("PROCESS_CALLBACK_QUERY => {id}:{data}", update.CallbackQuery.Id, update.CallbackQuery.Data); await _botClient!.EditMessageTextAsync( update.CallbackQuery.Message!.Chat.Id, update.CallbackQuery.Message.MessageId, $"Button pressed: {update.CallbackQuery.Data}", replyMarkup: new InlineKeyboardMarkup().AddButton("Step2", "step2")); await _botClient!.AnswerCallbackQueryAsync(update.CallbackQuery.Id, string.Empty); } } private async Task OnMessageAsync(Message message, UpdateType updateType) { if (_botClient == null) { return; } _logger.LogInformation("MESSAGE_RECEIVED => '{message}'", message.Text); var processingMessage = await _botClient.SendTextMessageAsync(message.Chat.Id, "Processing...", protectContent: true, replyMarkup: new ReplyKeyboardRemove()); await _botClient.SendChatActionAsync(message.Chat.Id, ChatAction.Typing); await Task.Delay(2000); var replyMarkup = new ReplyKeyboardMarkup(true) .AddButton("Btn 01") .AddButton("Btn 02"); var inlineKeyboard = new InlineKeyboardMarkup() .AddButton("Some", "some"); _ = await _botClient.SendTextMessageAsync(message.Chat.Id, $"""You've wrote: "{message.Text}".""", protectContent: true, replyParameters: message, replyMarkup: inlineKeyboard); await _botClient.DeleteMessageAsync(processingMessage.Chat.Id, processingMessage.MessageId); } }