using BotPages.Core.Abstractions; using BotPages.Core.Messaging; namespace BotPages.Telegram; /// /// Расширения для `MessageBuilder` специфичные для Telegram. /// Позволяют удобно задать `TelegramOptions` для конкретного сообщения /// без изменения самого билдера. /// public static class MessageBuilderExtensions { /// /// Установить опции Telegram для конкретного сообщения (переопределяют опции адаптера). /// public static MessageBuilder WithTelegramOptions(this MessageBuilder builder, TelegramOptions options) { // Ensure bag exists var bag = (builder as object) switch { MessageBuilder mb => GetAdapterBag(mb) ?? CreateAndSetAdapterBag(mb), _ => null }; bag?.Set("telegram", options); return builder; } // Reflection helpers to access private adapterOptions field on MessageBuilder private static AdapterOptionsBag? GetAdapterBag(MessageBuilder builder) { var fi = typeof(MessageBuilder).GetField("_adapterOptions", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); return fi?.GetValue(builder) as AdapterOptionsBag; } private static AdapterOptionsBag CreateAndSetAdapterBag(MessageBuilder builder) { var fi = typeof(MessageBuilder).GetField("_adapterOptions", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var bag = new AdapterOptionsBag(); fi?.SetValue(builder, bag); return bag; } }