public async Task LeavePendingGame() { if (PendingGameService.PendingGames.Count == 0) { await ReplyAsync(ErrorView.NotFound()); } else { PendingGame game = PendingGameService.PendingGames.FirstOrDefault(); IUser user = game.Users.FirstOrDefault(u => u.Id == Context.User.Id); if (game.Active) { _game.RemoveUserFromPlay(user); await _game.NotifyPlayerLeft(Context.User); } else { game.Users.Remove(user); await ReplyAsync(InfoView.LeftLobby()); if (game.Users.Count == 0) { PendingGameService.PendingGames.Clear(); await ReplyAsync(InfoView.DeletedLobby()); } } } }
public async Task PlayersInGameLobby() { if (PendingGameService.PendingGames.Count == 0) { await ReplyAsync(ErrorView.NotFound()); } else { PendingGame game = PendingGameService.PendingGames.FirstOrDefault(); if (game.Users.Any()) { string message = string.Join(", ", game.Users.Select(u => MentionUtils.MentionUser(u.Id))); await ReplyAsync(message); } else { await ReplyAsync("Game lobby is empty."); } } }
public async Task JoinPendingGame() { if (!(await CanPayCostOfEntry(Context.User.Id))) { await ReplyAsync(ErrorView.NotEnoughFunds()); } else if (PendingGameService.PendingGames.Count == 0) { await ReplyAsync(ErrorView.NotFound()); } else if (PendingGameService.PendingGames.Any(g => g.Users.Any(u => u.Id == Context.User.Id))) { await ReplyAsync(ErrorView.AlreadyInLobby()); } else { PendingGame game = PendingGameService.PendingGames.FirstOrDefault(); if (game.Active) { await ReplyAsync(ErrorView.InProgress()); } else { game.Users.Add(Context.User); if (game.Users.Count == GameConfiguration.NumberOfPlayers) { game.Active = true; await ReplyAsync(InfoView.GameStarting()); await _game.InitialiseGame(Context, game); } else { await ReplyAsync(InfoView.LobbyStatus(game.Users.Count)); } } } }