using DailyDigestWorker.Configuration; // Для BotConfiguration using Microsoft.Extensions.Options; // Для IOptions using Telegram.Bot; // Для ITelegramBotClient using Telegram.Bot.Types.Enums; // Для ParseMode namespace DailyDigestWorker.Services { public class TelegramBotSender : ITelegramBotSender // Реализуем интерфейс { private readonly ILogger _logger; private readonly ITelegramBotClient _botClient; private readonly BotConfiguration _botConfig; private readonly long? _targetChatId; // Храним распарсенный ID // Внедряем зависимости public TelegramBotSender( ILogger logger, ITelegramBotClient botClient, // Внедряем клиент бота IOptions botOptions) // Внедряем настройки { _logger = logger; _botClient = botClient; _botConfig = botOptions.Value; // Сохраняем настройки // Пытаемся распарсить TargetChatId один раз в конструкторе if (!string.IsNullOrWhiteSpace(_botConfig.TargetChatId) && long.TryParse(_botConfig.TargetChatId, out long parsedId)) { _targetChatId = parsedId; _logger.LogInformation("TelegramBotSender настроен для отправки в чат ID: {ChatId}", _targetChatId); } else { _targetChatId = null; // Не удалось распарсить или не задан _logger.LogWarning("TargetChatId не сконфигурирован или некорректен в настройках. Отправка сообщений будет невозможна."); } } public async Task SendMessageAsync(string messageText, ParseMode parseMode, CancellationToken cancellationToken) { if (!_targetChatId.HasValue) { _logger.LogWarning("Попытка отправить сообщение, но TargetChatId не настроен."); return false; } if (string.IsNullOrWhiteSpace(messageText)) { _logger.LogWarning("Попытка отправить пустое сообщение."); return false; } try { _logger.LogInformation("Отправка сообщения в чат {ChatId}...", _targetChatId.Value); await _botClient.SendMessage( chatId: _targetChatId.Value, text: messageText, parseMode: parseMode, linkPreviewOptions: new Telegram.Bot.Types.LinkPreviewOptions { IsDisabled = true }, // <-- ИСПОЛЬЗОВАТЬ ЭТО cancellationToken: cancellationToken); _logger.LogInformation("Сообщение успешно отправлено (инициировано)."); return true; } catch (OperationCanceledException) { _logger.LogInformation("Отправка сообщения отменена."); return false; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при отправке сообщения в Telegram чат {ChatId}", _targetChatId.Value); return false; } } public async Task SendErrorMessageAsync(string errorMessage, CancellationToken cancellationToken) { // Используем тот же метод отправки, но без специфичного ParseMode (или можно указать None/Default) // Можно добавить префикс к сообщению об ошибке string fullMessage = $"⚠️ **Ошибка при создании дайджеста:**\n{errorMessage}"; return await SendMessageAsync(fullMessage, ParseMode.Markdown, cancellationToken); // Используем Markdown для выделения } } }