public string ProcessBet(Bet bet) { if (bet.BettedAmount < 50) { return("Minimum bet must be 50."); } bool replace = false; var tmp = ActiveBets.SingleOrDefault(b => b.UserId == bet.UserId); if (tmp != null) { if (GType == GameType.SaltyBet) { return("Can only bet once per game in this format."); } else if (bet.BettedAmount < tmp.BettedAmount) { return("Not allowed to replace an existing bet with less than previous bet."); } ActiveBets.Remove(tmp); replace = true; } ActiveBets.Add(bet); if (replace) { return($"Replaced **{bet.UserName}**'s bet with {symbol}{bet.BettedAmount} to {bet.Tribute}."); } else { return($"Added **{bet.UserName}**'s bet of {symbol}{bet.BettedAmount} to {bet.Tribute}."); } }
public string Winner(string winner) { GameOpen = false; var winners = ActiveBets.Where(b => b.Tribute.Equals(winner, StringComparison.InvariantCultureIgnoreCase)) .Select(b => _channel.Server.GetUser(b.UserId)); if (winners.Count() > 0) { var payout = ActiveBets.Sum(b => b.BettedAmount) / winners.Count(); var rounding = ActiveBets.Sum(b => b.BettedAmount) % winners.Count(); foreach (var user in winners) { _bank.Accounts.SingleOrDefault(u => u.UserId == user.Id).Bucks += payout; } _bank.WriteBank(); if (winners.Count() == 1) { return($"{winners.Single().Name} has won the whole pot of {symbol}{payout}."); } else { return($"{String.Join(", ", winners.Select(u => u.Name))} have won {symbol}{payout} each. {symbol}{rounding} has been lost due to rounding."); } } else { return($"No bets were made on the winner of this game."); } }
public void ClosingGame() { _countDown = new Timer(async cb => { CloseOff(); await _channel.SendMessage($"Bets are closed. {ActiveBets.Count} bets are in. The pot is {symbol}{ActiveBets.Sum(b => b.BettedAmount)}."); }, null, TimeSpan.FromSeconds((GType == GameType.SaltyBet ? 30 : 45)), Timeout.InfiniteTimeSpan); }