public string DoPayment(decimal value) { var antiFraudService = new AntiFraudService(); var bankService = new BankService(); _creditCardService.RequestAuthorize(); _paymentMachineService.ReceiveRequest(); var antiFraudIsValid = antiFraudService.isValid(value); if (!antiFraudIsValid) { return(string.Empty); } var bankBalanceValid = bankService.CheckBalance(); if (bankBalanceValid) { Console.WriteLine("Bank balance Ok"); } else { Console.WriteLine("Bank balance Not Ok"); } _creditCardService.DoPayment(antiFraudIsValid, bankBalanceValid); _paymentMachineService.ReturnRequest(); return($"${value} - Payment OK"); }
/// <summary> /// Takes money away from a user /// </summary> /// <param name="message">Chat message from the user</param> /// <param name="username">User that sent the message</param> public async Task CmdCharge(string message, string username) { try { if (message.StartsWith("!charge @")) { _irc.SendPublicChatMessage($"Please enter a valid amount @{username}"); } else { int indexAction = 8; int fee = -1; bool isValidFee = int.TryParse(message.Substring(indexAction, message.IndexOf("@") - indexAction - 1), out fee); string recipient = message.Substring(message.IndexOf("@") + 1).ToLower(); int wallet = await _bank.CheckBalance(recipient, _broadcasterId); // Check user's bank account exist or has currency if (wallet == -1) { _irc.SendPublicChatMessage("The user '" + recipient + "' is not currently banking with us @" + username); } else if (wallet == 0) { _irc.SendPublicChatMessage("'" + recipient + "' is out of " + _botConfig.CurrencyType + " @" + username); } // Check if fee can be accepted else if (fee > 0) { _irc.SendPublicChatMessage("Please insert a negative whole amount (no decimal numbers) " + " or use the !deposit command to add " + _botConfig.CurrencyType + " to a user's account"); } else if (!isValidFee) { _irc.SendPublicChatMessage("The fee wasn't accepted. Please try again with negative whole amount (no decimals)"); } else /* Deduct funds from wallet */ { wallet += fee; // Zero out account balance if user is being charged more than they have if (wallet < 0) { wallet = 0; } await _bank.UpdateFunds(recipient, _broadcasterId, wallet); // Prompt user's balance if (wallet == 0) { _irc.SendPublicChatMessage("Charged " + fee.ToString().Replace("-", "") + " " + _botConfig.CurrencyType + " to " + recipient + "'s account! They are out of " + _botConfig.CurrencyType + " to spend"); } else { _irc.SendPublicChatMessage("Charged " + fee.ToString().Replace("-", "") + " " + _botConfig.CurrencyType + " to " + recipient + "'s account! They only have " + wallet + " " + _botConfig.CurrencyType + " to spend"); } } } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdMod", "CmdCharge(string, string)", false, "!charge"); } }
private async Task CheckFollower(string chatter, string userTwitchId) { try { TwitchChatter follower = await GetTwitchFollowerInfo(chatter, userTwitchId); if (follower == null) { return; } // check if follower has experience int currentExp = await _follower.CurrentExp(chatter, _broadcasterId); decimal hoursWatched = 0.0m; if (currentExp > -1) { await _follower.UpdateExp(chatter, _broadcasterId, ++currentExp); // check if user has been promoted Rank capRank = _rankList.FirstOrDefault(r => r.ExpCap == currentExp); hoursWatched = _follower.GetHoursWatched(currentExp); if (hoursWatched == _botConfig.RegularFollowerHours) { Rank currentRank = _follower.GetCurrentRank(_rankList, currentExp); _irc.SendPublicChatMessage($"{currentRank.Name} {chatter} has achieved the salty equlibrium " + "needed to become a regular soldier in the salt army"); } else if (capRank != null) { Rank currentRank = _follower.GetCurrentRank(_rankList, currentExp); _irc.SendPublicChatMessage($"@{chatter} has been promoted to \"{currentRank.Name}\" " + $"with {currentExp}/{currentRank.ExpCap} EXP ({hoursWatched} hours watched)"); } } else { // add new user to the ranks await _follower.EnlistRecruit(chatter, _broadcasterId); } // check if follower has a stream currency account int funds = await _bank.CheckBalance(chatter, _broadcasterId); if (funds > -1) { if (hoursWatched >= _botConfig.RegularFollowerHours) { funds += 15; if (!_twitchChatterListInstance.TwitchRegularFollowers.Any(c => c.Username.Equals(chatter))) { _twitchChatterListInstance.TwitchRegularFollowers.Add(follower); } } else { funds += 10; } await _bank.UpdateFunds(chatter, _broadcasterId, funds); } else // ToDo: Make currency auto-increment setting { await _bank.CreateAccount(chatter, _broadcasterId, 10); } } catch (Exception ex) { Console.WriteLine($"Error inside FollowerSubscriberListener.CheckFollower(string, string): {ex.Message}"); if (ex.InnerException != null) { Console.WriteLine($"Inner Exception: {ex.InnerException.Message}"); } } }
public async Task Consume() { Boss boss = _bossSettings.Bosses[BossLevel() - 1]; _irc.SendPublicChatMessage(_bossSettings.GameStart .Replace("@bossname@", boss.Name)); Thread.Sleep(5000); // wait in anticipation // Raid the boss bool isBossAlive = true; string lastAttackFighter = ""; int turn; for (turn = 0; turn < boss.TurnLimit; turn++) { foreach (BossFighter fighter in _bossSettings.Fighters) { if (fighter.FighterClass.Health <= 0) continue; Random rnd = new Random(DateTime.Now.Millisecond); int chance = rnd.Next(1, 101); // 1 - 100 // check if boss dodged the attack if (boss.Evasion <= chance && fighter.FighterClass.Attack - boss.Defense > 0) boss.Health -= fighter.FighterClass.Attack - boss.Defense; if (boss.Health <= 0) { lastAttackFighter = fighter.Username; isBossAlive = false; break; } rnd = new Random(DateTime.Now.Millisecond); chance = rnd.Next(1, 101); // 1 - 100 // check if fighter dodged the attack if (fighter.FighterClass.Evasion <= chance && boss.Attack - fighter.FighterClass.Defense > 0) fighter.FighterClass.Health -= boss.Attack - fighter.FighterClass.Defense; } if (!isBossAlive) break; } // Evaluate the fight if (isBossAlive) { string bossAliveMessage = ""; if (turn == boss.TurnLimit) { // ToDo: Add boss alive message to database bossAliveMessage = $"It took too long to kill {boss.Name}. Gas floods the room, killing the entire raid party."; } else if (_bossSettings.Fighters.Count == 1) { bossAliveMessage = _bossSettings.SingleUserFail .Replace("user@", _bossSettings.Fighters.First().Username) .Replace("@bossname@", boss.Name); } else { bossAliveMessage = _bossSettings.Success0; } _irc.SendPublicChatMessage(bossAliveMessage); return; } // Calculate surviving raid party earnings IEnumerable<BossFighter> survivors = _bossSettings.Fighters.Where(f => f.FighterClass.Health > 0); int numSurvivors = survivors.Count(); foreach (BossFighter champion in survivors) { int funds = await _bank.CheckBalance(champion.Username.ToLower(), _broadcasterId); decimal earnings = Math.Ceiling(boss.Loot / (decimal)numSurvivors); // give last attack bonus to specified fighter if (champion.Username == lastAttackFighter) { earnings += boss.LastAttackBonus; } await _bank.UpdateFunds(champion.Username.ToLower(), _broadcasterId, (int)earnings + funds); _resultMessage += $" {champion.Username} ({(int)earnings} {_botConfig.CurrencyType}),"; } // remove extra "," _resultMessage = _resultMessage.Remove(_resultMessage.LastIndexOf(','), 1); decimal survivorsPercentage = numSurvivors / (decimal)_bossSettings.Fighters.Count; // Display success outcome if (numSurvivors == 1 && numSurvivors == _bossSettings.Fighters.Count) { BossFighter onlyWinner = _bossSettings.Fighters.First(); int earnings = boss.Loot; _irc.SendPublicChatMessage(_bossSettings.SingleUserSuccess .Replace("user@", onlyWinner.Username) .Replace("@bossname@", boss.Name) .Replace("@winamount@", earnings.ToString()) .Replace("@pointsname@", _botConfig.CurrencyType) .Replace("@lastattackbonus@", boss.LastAttackBonus.ToString())); } else if (survivorsPercentage == 1.0m) { _irc.SendPublicChatMessage(_bossSettings.Success100.Replace("@bossname@", boss.Name) + " " + _resultMessage); } else if (survivorsPercentage >= 0.34m) { _irc.SendPublicChatMessage(_bossSettings.Success34 + " " + _resultMessage); } else if (survivorsPercentage > 0) { _irc.SendPublicChatMessage(_bossSettings.Success1 + " " + _resultMessage); } // show in case Twitch deletes the message because of exceeding character length Console.WriteLine("\n" + _resultMessage + "\n"); }
/// <summary> /// Takes money away from a user /// </summary> /// <param name="chatter"></param> public async Task CmdCharge(TwitchChatter chatter) { try { if (chatter.Message.StartsWith("!charge @", StringComparison.CurrentCultureIgnoreCase)) { _irc.SendPublicChatMessage($"Please enter a valid amount @{chatter.DisplayName}"); } else { int indexAction = chatter.Message.IndexOf(" "); int fee = -1; bool isValidFee = int.TryParse(chatter.Message.Substring(indexAction, chatter.Message.IndexOf("@") - indexAction - 1), out fee); string recipient = chatter.Message.Substring(chatter.Message.IndexOf("@") + 1).ToLower(); int wallet = await _bank.CheckBalance(recipient, _broadcasterInstance.DatabaseId); // Check user's bank account exist or has currency if (wallet == -1) { _irc.SendPublicChatMessage($"{recipient} is not currently banking with us @{chatter.DisplayName}"); } else if (wallet == 0) { _irc.SendPublicChatMessage($"{recipient} is out of {_botConfig.CurrencyType} @{chatter.DisplayName}"); } // Check if fee can be accepted else if (fee > 0) { _irc.SendPublicChatMessage("Please insert a negative whole amount (no decimal numbers) " + $" or use the !deposit command to add {_botConfig.CurrencyType} to a user's account"); } else if (!isValidFee) { _irc.SendPublicChatMessage($"The fee wasn't accepted. Please try again with negative whole amount (no decimals) @{chatter.DisplayName}"); } else if (chatter.Username != _botConfig.Broadcaster.ToLower() && _twitchChatterListInstance.GetUserChatterType(recipient) == ChatterType.Moderator) { _irc.SendPublicChatMessage($"Entire deposit voided. You cannot remove {_botConfig.CurrencyType} from another moderator's account @{chatter.DisplayName}"); } else /* Deduct funds from wallet */ { wallet += fee; // Zero out account balance if user is being charged more than they have if (wallet < 0) { wallet = 0; } await _bank.UpdateFunds(recipient, _broadcasterInstance.DatabaseId, wallet); // Prompt user's balance if (wallet == 0) { _irc.SendPublicChatMessage($"Charged {fee.ToString().Replace("-", "")} {_botConfig.CurrencyType} to {recipient}" + $"'s account! They are out of {_botConfig.CurrencyType} to spend"); } else { _irc.SendPublicChatMessage($"Charged {fee.ToString().Replace("-", "")} {_botConfig.CurrencyType} to {recipient}" + $"'s account! They only have {wallet} {_botConfig.CurrencyType} to spend"); } } } } catch (Exception ex) { await _errHndlrInstance.LogError(ex, "CmdMod", "CmdCharge(TwitchChatter)", false, "!charge"); } }
private async Task CheckFollower(string chatter, string userTwitchId) { try { TwitchChatter follower = await GetTwitchFollowerInfo(chatter, userTwitchId); if (follower == null) { return; } /* Manage follower experience */ int currentExp = await _follower.CurrentExp(chatter, _broadcasterId); if (TwitchStreamStatus.IsLive) { if (currentExp > -1) { await _follower.UpdateExp(chatter, _broadcasterId, ++currentExp); } else { // add new user to the ranks await _follower.EnlistRecruit(chatter, _broadcasterId); } } // check if follower has a stream currency account int setIncrementFunds = 10; // default to normal follower amount if (_follower.IsRegularFollower(currentExp, _botConfig.RegularFollowerHours)) { setIncrementFunds = 15; if (!_twitchChatterListInstance.TwitchRegularFollowers.Any(c => c.Username == chatter)) { _twitchChatterListInstance.TwitchRegularFollowers.Add(follower); } } /* Manage follower streaming currency */ if (TwitchStreamStatus.IsLive) { int funds = await _bank.CheckBalance(chatter, _broadcasterId); if (funds > -1) { funds += setIncrementFunds; await _bank.UpdateFunds(chatter, _broadcasterId, funds); } else // ToDo: Make currency auto-increment setting { await _bank.CreateAccount(chatter, _broadcasterId, setIncrementFunds); } } } catch (Exception ex) { Console.WriteLine($"Error inside FollowerSubscriberListener.CheckFollower(string, string): {ex.Message}"); if (ex.InnerException != null) { Console.WriteLine($"Inner Exception: {ex.InnerException.Message}"); } } }
public async Task Consume() { BankHeistLevel heistLevel = _heistSettings.Levels[HeistLevel() - 1]; BankHeistPayout payout = _heistSettings.Payouts[HeistLevel() - 1]; _irc.SendPublicChatMessage(_heistSettings.GameStart .Replace("@bankname@", heistLevel.LevelBankName)); Thread.Sleep(5000); // wait in anticipation Random rnd = new Random(); int chance = rnd.Next(1, 101); // 1 - 100 if (chance >= payout.SuccessRate) // failed { if (_heistSettings.Robbers.Count == 1) { _irc.SendPublicChatMessage(_heistSettings.SingleUserFail .Replace("user@", _heistSettings.Robbers.First().Username) .Replace("@bankname@", heistLevel.LevelBankName)); } else { _irc.SendPublicChatMessage(_heistSettings.Success0); } return; } int numWinners = (int)Math.Ceiling(_heistSettings.Robbers.Count * (payout.SuccessRate / 100)); IEnumerable <BankRobber> winners = _heistSettings.Robbers.OrderBy(x => rnd.Next()).Take(numWinners); foreach (BankRobber winner in winners) { int funds = await _bank.CheckBalance(winner.Username.ToLower(), _broadcasterId); decimal earnings = Math.Ceiling(winner.Gamble * payout.WinMultiplier); await _bank.UpdateFunds(winner.Username.ToLower(), _broadcasterId, (int)earnings + funds); _resultMessage += $" {winner.Username} ({(int)earnings} {_botConfig.CurrencyType}),"; } // remove extra "," _resultMessage = _resultMessage.Remove(_resultMessage.LastIndexOf(','), 1); decimal numWinnersPercentage = numWinners / (decimal)_heistSettings.Robbers.Count; // display success outcome if (winners.Count() == 1 && numWinners == _heistSettings.Robbers.Count) { BankRobber onlyWinner = winners.First(); int earnings = (int)Math.Ceiling(onlyWinner.Gamble * payout.WinMultiplier); _irc.SendPublicChatMessage(_heistSettings.SingleUserSuccess .Replace("user@", onlyWinner.Username) .Replace("@bankname@", heistLevel.LevelBankName) .Replace("@winamount@", earnings.ToString()) .Replace("@pointsname@", _botConfig.CurrencyType)); } else if (numWinners == _heistSettings.Robbers.Count) { _irc.SendPublicChatMessage(_heistSettings.Success100 + " " + _resultMessage); } else if (numWinnersPercentage >= 0.34m) { _irc.SendPublicChatMessage(_heistSettings.Success34 + " " + _resultMessage); } else if (numWinnersPercentage > 0) { _irc.SendPublicChatMessage(_heistSettings.Success1 + " " + _resultMessage); } // show in case Twitch deletes the message because of exceeding character length Console.WriteLine("\n" + _resultMessage + "\n"); }
private async Task CheckFollower(string chatter, string userTwitchId) { try { TwitchChatter follower = await GetTwitchFollowerInfo(chatter, userTwitchId); if (follower == null) { return; } // check if follower has experience int currentExp = await _follower.CurrentExp(chatter, _broadcasterId); decimal hoursWatched = 0.0m; if (currentExp > -1) { await _follower.UpdateExp(chatter, _broadcasterId, ++currentExp); } else { // add new user to the ranks await _follower.EnlistRecruit(chatter, _broadcasterId); } // check if follower has a stream currency account int funds = await _bank.CheckBalance(chatter, _broadcasterId); if (funds > -1) { if (hoursWatched >= _botConfig.RegularFollowerHours) { funds += 15; if (!_twitchChatterListInstance.TwitchRegularFollowers.Any(c => c.Username == chatter)) { _twitchChatterListInstance.TwitchRegularFollowers.Add(follower); } } else { funds += 10; } await _bank.UpdateFunds(chatter, _broadcasterId, funds); } else // ToDo: Make currency auto-increment setting { await _bank.CreateAccount(chatter, _broadcasterId, 10); } } catch (Exception ex) { Console.WriteLine($"Error inside FollowerSubscriberListener.CheckFollower(string, string): {ex.Message}"); if (ex.InnerException != null) { Console.WriteLine($"Inner Exception: {ex.InnerException.Message}"); } } }