44 lines
1.5 KiB
C#
44 lines
1.5 KiB
C#
using BotPages.Core.Abstractions;
|
|
using BotPages.Core.Messaging;
|
|
|
|
namespace BotPages.Telegram;
|
|
|
|
/// <summary>
|
|
/// Ðàñøèðåíèÿ äëÿ `MessageBuilder` ñïåöèôè÷íûå äëÿ Telegram.
|
|
/// Ïîçâîëÿþò óäîáíî çàäàòü `TelegramOptions` äëÿ êîíêðåòíîãî ñîîáùåíèÿ
|
|
/// áåç èçìåíåíèÿ ñàìîãî áèëäåðà.
|
|
/// </summary>
|
|
public static class MessageBuilderExtensions
|
|
{
|
|
/// <summary>
|
|
/// Óñòàíîâèòü îïöèè Telegram äëÿ êîíêðåòíîãî ñîîáùåíèÿ (ïåðåîïðåäåëÿþò îïöèè àäàïòåðà).
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|