private async Task RegisterCardAsync(string replyToken, UserProfile user, string keyword, int gameId) { try { var cardId = await _bingoClient.AddCardAsync(gameId, keyword); await _tableStorage.UpdateCardEntryAsync(user.UserId, cardId, gameId); await _tableStorage.AddCardUserAsync(gameId, cardId, user.UserId, user.DisplayName); var cardStatus = await _bingoClient.GetCardStatusAsync(cardId); //string replyMessage = CreateCardString(cardStatus); var imageMessage = await CreateImageMessageAsync(cardStatus, gameId, cardId); await _messagingClient.ReplyMessageAsync(replyToken, new ISendMessage[] { new TextMessage(ReplyMessage_CardCreated), imageMessage }); var cardUsers = await _tableStorage.GetCardUsersAsync(gameId); var gameUser = _tableStorage.FindGameEntry(gameId)?.RowKey; var to = cardUsers.Where(cusr => cusr.UserId != user.UserId).Select(cusr => cusr.UserId).Concat(new[] { gameUser }).ToArray(); await _messagingClient.MultiCastMessageAsync(to, new[] { new TextMessage($"{user.DisplayName} さんがエントリーしました!") }); } catch (Exception e) { throw new RegisterCardException(e.Message, e); } }