Добавлены новые методы отправки сообщений
This commit is contained in:
@@ -19,29 +19,56 @@ public static class TelegramUpdateMapper
|
||||
/// <summary>
|
||||
/// Маппинг Telegram Update в UpdateContext BotPages.
|
||||
/// </summary>
|
||||
public static UpdateContext Map(string MessengerType, Update update, TelegramBotClient client)
|
||||
public static UpdateContext? Map(TelegramAdapter adapter, Update update, TelegramBotClient client)
|
||||
{
|
||||
var chat = update.Message?.Chat ?? update.CallbackQuery?.Message?.Chat;
|
||||
var user = update.Message?.From ?? update.CallbackQuery?.From;
|
||||
var chat = update.Message?.Chat ?? update.CallbackQuery?.Message?.Chat ?? update.EditedMessage?.Chat;
|
||||
var user = update.Message?.From ?? update.CallbackQuery?.From ?? update.EditedMessage?.From;
|
||||
|
||||
if (chat == null || user == null)
|
||||
return null;
|
||||
|
||||
var userContext = new UserContext
|
||||
{
|
||||
Id = user?.Id.ToString() ?? "unknown",
|
||||
DisplayName = user?.Username,
|
||||
Id = user.Id.ToString(),
|
||||
DisplayName = user.Username,
|
||||
};
|
||||
|
||||
var chatContext = new ChatContext
|
||||
{
|
||||
Id = chat?.Id.ToString() ?? "unknown",
|
||||
Title = chat?.Title,
|
||||
Id = chat.Id.ToString(),
|
||||
Title = chat.Title,
|
||||
};
|
||||
|
||||
string? text = null;
|
||||
UpdateKind kind = UpdateKind.None;
|
||||
var files = new List<FileDescriptor>();
|
||||
string? messageId = null;
|
||||
string? replyToMessageId = null;
|
||||
EditInfo? editInfo = null;
|
||||
DeleteInfo? deleteInfo = null;
|
||||
PinInfo? pinInfo = null;
|
||||
|
||||
// Обработка разных типов обновлений
|
||||
if (update.Message is { } msg)
|
||||
{
|
||||
messageId = msg.MessageId.ToString();
|
||||
|
||||
if (msg.ReplyToMessage != null)
|
||||
{
|
||||
kind |= UpdateKind.Reply;
|
||||
replyToMessageId = msg.ReplyToMessage.MessageId.ToString();
|
||||
}
|
||||
|
||||
if (msg.PinnedMessage != null)
|
||||
{
|
||||
kind |= UpdateKind.Pin;
|
||||
pinInfo = new PinInfo
|
||||
{
|
||||
MessageId = msg.PinnedMessage.MessageId.ToString(),
|
||||
PinDate = msg.Date,
|
||||
NotificationDisabled = false // Telegram не передает эту информацию
|
||||
};
|
||||
}
|
||||
|
||||
if (msg.Text is not null)
|
||||
{
|
||||
@@ -112,28 +139,66 @@ public static class TelegramUpdateMapper
|
||||
kind |= UpdateKind.File;
|
||||
}
|
||||
}
|
||||
|
||||
if (update.CallbackQuery is { } cb)
|
||||
else if (update.EditedMessage is { } editedMsg)
|
||||
{
|
||||
messageId = editedMsg.MessageId.ToString();
|
||||
kind |= UpdateKind.Edit;
|
||||
text = editedMsg.Text;
|
||||
|
||||
editInfo = new EditInfo
|
||||
{
|
||||
NewText = editedMsg.Text,
|
||||
EditDate = editedMsg.EditDate ?? DateTime.UtcNow
|
||||
};
|
||||
}
|
||||
else if (update.CallbackQuery is { } cb)
|
||||
{
|
||||
messageId = cb.Message?.MessageId.ToString();
|
||||
kind |= UpdateKind.Button;
|
||||
text = cb.Data;
|
||||
}
|
||||
else if (update.ChannelPost is { } channelPost)
|
||||
{
|
||||
messageId = channelPost.MessageId.ToString();
|
||||
|
||||
if (channelPost.Text is not null)
|
||||
{
|
||||
text = channelPost.Text;
|
||||
kind |= UpdateKind.Text;
|
||||
}
|
||||
}
|
||||
else if (update.EditedChannelPost is { } editedChannelPost)
|
||||
{
|
||||
messageId = editedChannelPost.MessageId.ToString();
|
||||
kind |= UpdateKind.Edit;
|
||||
text = editedChannelPost.Text;
|
||||
|
||||
editInfo = new EditInfo
|
||||
{
|
||||
NewText = editedChannelPost.Text,
|
||||
EditDate = editedChannelPost.EditDate ?? DateTime.UtcNow
|
||||
};
|
||||
}
|
||||
|
||||
return new UpdateContext
|
||||
{
|
||||
MessengerType = MessengerType,
|
||||
AdapterId = adapter.AdapterId,
|
||||
AdapterType = adapter.AdapterType,
|
||||
User = userContext,
|
||||
Chat = chatContext,
|
||||
Text = text,
|
||||
Kind = kind,
|
||||
Files = files
|
||||
MessageId = messageId,
|
||||
ReplyToMessageId = replyToMessageId,
|
||||
Files = files,
|
||||
EditInfo = editInfo,
|
||||
DeleteInfo = deleteInfo,
|
||||
PinInfo = pinInfo
|
||||
};
|
||||
}
|
||||
|
||||
private static Func<CancellationToken, Task<Stream>> GetStreamAsync(TelegramBotClient client, string fileId)
|
||||
{
|
||||
|
||||
Func<CancellationToken, Task<Stream>> getStreamAsync = async _ =>
|
||||
{
|
||||
var file = await client.GetFile(fileId);
|
||||
|
||||
Reference in New Issue
Block a user