using Telegram.Bot; using Telegram.Bot.Types.Enums; using Telegram.Bot.Types.ReplyMarkups; namespace GmRelay.Web.Services; /// /// Handles editing batch messages that may be either text or photo messages. /// When the batch was created with SendPhoto (image + caption), we need /// EditMessageCaption instead of EditMessageText. /// public static class BatchMessageEditor { /// /// Edits a batch message, automatically detecting whether it is a text or photo message. /// Tries EditMessageText first; on failure falls back to EditMessageCaption. /// public static async Task EditBatchMessageAsync( ITelegramBotClient bot, long chatId, int messageId, string text, InlineKeyboardMarkup? replyMarkup, CancellationToken ct = default) { try { await bot.EditMessageText( chatId: chatId, messageId: messageId, text: text, parseMode: ParseMode.Html, replyMarkup: replyMarkup, cancellationToken: ct); } catch (Telegram.Bot.Exceptions.ApiRequestException ex) when (ex.Message.Contains("there is no text in the message", StringComparison.OrdinalIgnoreCase)) { // The batch message is a photo — use EditMessageCaption instead. // Caption is limited to 1024 chars; if text exceeds that, truncate gracefully. var caption = text.Length <= 1024 ? text : text[..1021] + "..."; await bot.EditMessageCaption( chatId: chatId, messageId: messageId, caption: caption, parseMode: ParseMode.Html, replyMarkup: replyMarkup, cancellationToken: ct); } } }