private static async void BotClientOnOnUpdate(object sender, UpdateEventArgs e) { long?chatId = null; try { Botlog.Write($"Got query: {e.Update.Type}"); if (e.Update.Message != null) { chatId = e.Update.Message.Chat?.Id; var chatRoom = GetOrCreate(e.Update.Message.Chat); chatRoom?.ChatIo.HandleUpdate(e.Update); } else if (e.Update.CallbackQuery != null) { chatId = e.Update.CallbackQuery.Message.Chat?.Id; var chatRoom = GetOrCreate(e.Update.CallbackQuery.Message.Chat); chatRoom?.ChatIo.HandleUpdate(e.Update); await _botClient.AnswerCallbackQueryAsync(e.Update.CallbackQuery.Id); } } catch (Exception error) { Botlog.Error(chatId, $"BotClientOnOnUpdate Failed: {e.Update.Type} {error}"); } }
private static ChatRoomFlow GetOrCreate(Telegram.Bot.Types.Chat chat) { if (Chats.TryGetValue(chat.Id, out var existedChatRoom)) { return(existedChatRoom); } var newChatRoom = new ChatRoomFlow( new ChatIO(_botClient, chat), new TelegramUserInfo(chat.Id, chat.FirstName, chat.LastName, chat.Username), _settings, _addWordService, _userWordService, _userService); var task = newChatRoom.Run(); task.ContinueWith((t) => Botlog.Error(chat.Id, $"Faulted {t.Exception}"), TaskContinuationOptions.OnlyOnFaulted); Chats.TryAdd(chat.Id, newChatRoom); return(newChatRoom); }