public async Task <IEnumerable <long> > SendMessage(long chatId, OutMessage message) { var result = new List <long>(message.Attachments.Count + 1); GroupAttachments(message.Attachments, out var photos, out var videos, out var others); var photoMediaGroup = photos.Select(TgConverter.ToTgPhoto); var videoMediaGroup = videos.Select(TgConverter.ToTgVideo); if (photos.Count > 0) { result.AddRange((await _api.SendMediaGroupAsync(photoMediaGroup, chatId).ConfigureAwait(false)) .Select(a => (long)a.MessageId)); } if (videos.Count > 0) { result.AddRange((await _api.SendMediaGroupAsync(videoMediaGroup, chatId).ConfigureAwait(false)) .Select(a => (long)a.MessageId)); } foreach (var attachment in others) { switch (attachment.Type) { case AttachmentType.Audio: var sentAudio = await _api.SendAudioAsync(chatId, TgConverter.ToTgMedia(attachment)) .ConfigureAwait(false); result.Add(sentAudio.MessageId); break; case AttachmentType.Voice: var sentVoice = await _api.SendVoiceAsync(chatId, TgConverter.ToTgMedia(attachment)) .ConfigureAwait(false); result.Add(sentVoice.MessageId); break; default: var sendDocument = await _api.SendDocumentAsync(chatId, TgConverter.ToTgMedia(attachment)) .ConfigureAwait(false); result.Add(sendDocument.MessageId); break; } } var keyboard = message.Keyboard switch { InlineKeyboard inlineKeyboard => TgConverter.ToTgKeyboard(inlineKeyboard), ReplyKeyboard replyKeyboard => TgConverter.ToTgKeyboard(replyKeyboard), _ => message.RemoveReplyKeyboard ? new ReplyKeyboardRemove() : null }; var sentMessage = await _api.SendTextMessageAsync(chatId, message.Text, replyMarkup : keyboard) .ConfigureAwait(false); result.Add(sentMessage.MessageId); return(result); }
public async Task <Chat?> GetChat(long chatId) { var chat = await _api.GetChatAsync(chatId).ConfigureAwait(false); var ownerId = chat.Type switch { TgChatType.Private => chat.Id, _ => (await _api.GetChatAdministratorsAsync(chatId).ConfigureAwait(false)) .First(u => u.Status == ChatMemberStatus.Creator).User.Id }; return(TgConverter.ToChat(chat, ownerId)); }
private async Task <UpdateContext?> CreateContext(Update update) { switch (update.Type) { case UpdateType.Message: { var message = TgConverter.ToMessage(update.Message); var user = TgConverter.ToUser(update.Message.From); // The only way to create chat with ownerId. // GetChat can pass ownerId to Converter.ToChat(). var messenger = _bot.ResolveMessenger(message.MessengerSource); var chat = await messenger.GetChat(update.Message.Chat.Id).ConfigureAwait(false); return(new UpdateContext(messenger, chat, user, message)); } default: return(null); } }
public async Task <User?> GetUser(long userId) { var user = await _api.GetChatAsync(userId).ConfigureAwait(false); return(TgConverter.ToUser(user)); }