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");
        }
Exemple #2
0
        /// <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");
            }
        }
Exemple #3
0
        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}");
                }
            }
        }
Exemple #4
0
        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");
        }
Exemple #5
0
        /// <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}");
                }
            }
        }
Exemple #7
0
        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}");
                }
            }
        }