Новый api отправки сообщений

This commit is contained in:
FrigaT
2025-12-24 08:43:46 +03:00
parent 833d8c80d9
commit 37cb6599ba
19 changed files with 478 additions and 338 deletions

View File

@@ -0,0 +1,43 @@
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;
}
}