52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
using Telegram.Bot;
|
|
using Telegram.Bot.Types.Enums;
|
|
using Telegram.Bot.Types.ReplyMarkups;
|
|
|
|
namespace GmRelay.Bot.Infrastructure.Telegram;
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
public static class BatchMessageEditor
|
|
{
|
|
/// <summary>
|
|
/// Edits a batch message, automatically detecting whether it is a text or photo message.
|
|
/// Tries EditMessageText first; on failure falls back to EditMessageCaption.
|
|
/// </summary>
|
|
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 (global::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);
|
|
}
|
|
}
|
|
}
|