/// <summary>
        /// scope= get:balance
        /// cmd= 'get balance @p0'.
        /// @p0 parameter for desired currency (all for all balances)
        /// </summary>
        /// <returns></returns>
        public override async Task GetBalance()
        {
            int parameterCount = 1;

            var validateResp = ValidateParameters(null, parameterCount);

            if (validateResp.ResponseCode != ResponseCode.Success)
            {
                await PostMessage(GetSlackExecutionErrorMessage(validateResp.ResponseData));

                return;
            }

            var currency  = Currency.Unknown;
            var parameter = Parameters[0];

            if (parameter.ToLower() != "all")
            {
                currency = Statics.GetCurrency(Parameters[0]);

                if (currency == Currency.Unknown)
                {
                    var errorMesssage = GetSlackExecutionErrorMessage(2);

                    //post depth=2 message => Given crypto currency either not found or not supported.
                    errorMesssage.text = string.Format(errorMesssage.text, Parameters[0]);
                    await PostMessage(errorMesssage);

                    return;
                }
            }

            var balances = GetTeamCryptoCurrencyBalances(currency);

            if (!balances.Any())
            {
                // you have no balance with this crypto currency.
                await PostMessage(GetSlackExecutionErrorMessage(3));

                return;
            }

            //get crypto currencies by team.provider
            var cryptoCurrencies = GetCryptoCurrencies();

            var successText = ExecutingCommand.Responses.First(p => p.Language == Team.Language && p.Depth == 0).SuccessText;

            var successMessage = SlackMessageGenerator.GetCryptoCurrencyBalanceMessage(balances, Team.MainCurrency, cryptoCurrencies, successText);

            await PostMessage(GetSlackExecutionSuccessMessage(successMessage));
        }
        /// <summary>
        /// scope= get:arbitrage
        /// cmd= 'get arbit @p0'.
        /// @p0 parameter for desired currency
        /// </summary>
        /// <returns></returns>
        public override async Task GetArbitrage()
        {
            int parameterCount = 1;

            var parameterSet = new List <CommandParameter>
            {
                new CommandParameter
                {
                    Depth          = 2,
                    ParameterValue = Parameters[0].ToLower(),
                    ParameterSet   = new List <string>
                    {
                        "eth",
                        "btc",
                        "xrp",
                        "ltc",
                        "all"
                    }
                }
            };

            var validateResp = ValidateParameters(parameterSet, parameterCount);

            if (validateResp.ResponseCode != ResponseCode.Success)
            {
                var errorMessage = GetSlackExecutionErrorMessage(validateResp.ResponseData);

                if (validateResp.ResponseData == 2 && Parameters[0].ToLower() != "all")
                {
                    //post depth=2 message => Given crypto currency either not found or not supported.
                    errorMessage.text = string.Format(errorMessage.text, Parameters[0], "Eth, Btc, Ltc, Xrp");
                }

                await PostMessage(errorMessage);

                return;
            }

            var currency = Statics.GetCurrency(Parameters[0]);

            //get crypto currencies by currency
            var cryptoCurrencies = GetCryptoCurrencies(currency);

            var successMessage = SlackMessageGenerator.GetArbitrageMessage(cryptoCurrencies, currency);

            await PostMessage(GetSlackExecutionSuccessMessage(successMessage));
        }
        /// <summary>
        /// scope= set:alarms
        /// cmd= 'set balance @p0 @p1 @p2'.
        /// @p0 parameter for desired currency
        /// @p1 parameter for desired website
        /// @p2 parameter for balance amount
        /// @p2 parameter for currency code
        /// </summary>
        /// <returns></returns>
        public override async Task SetAlarm()
        {
            int parameterCount = 4;

            string mainCurrencyText = string.Empty;
            string limitAmountText  = string.Empty;

            if (Parameters.Length > 3)
            {
                limitAmountText  = Parameters[2];
                mainCurrencyText = Parameters[3];
            }

            var parameterSet = new List <CommandParameter>
            {
                new CommandParameter
                {
                    Depth          = 5,
                    ParameterValue = mainCurrencyText.ToLower(),
                    ParameterSet   = new List <string>
                    {
                        "tl",
                        "usd",
                        "$"
                    }
                },
                new CommandParameter
                {
                    Depth          = 3,
                    ParameterValue = limitAmountText,
                    IsNumber       = true
                }
            };

            var validateResp = ValidateParameters(parameterSet, parameterCount);

            if (validateResp.ResponseCode != ResponseCode.Success)
            {
                await PostMessage(GetSlackExecutionErrorMessage(validateResp.ResponseData));

                return;
            }

            var provider = Statics.GetProvider(Parameters[1]);

            if (provider == Provider.Unknown && Parameters[1].ToLower() != "all")
            {
                //post depth=2 message => Given web site either not found or not supported.
                await PostMessage(GetSlackExecutionErrorMessage(4));

                return;
            }

            var currency = Statics.GetCurrency(Parameters[0]);

            if (currency == Currency.Unknown)
            {
                var errorMesssage = GetSlackExecutionErrorMessage(2);

                //post depth=2 message => Given crypto currency either not found or not supported.
                errorMesssage.text = string.Format(errorMesssage.text, Parameters[0]);
                await PostMessage(errorMesssage);

                return;
            }

            decimal limitAmount = Parameters[2].ToMoneyMarketDecimalFormat();

            var mainCurrency = Statics.GetMainCurrency(Parameters[3]);

            SavePriceTrackerNotification(currency, provider, limitAmount, mainCurrency);

            if (limitAmount == 0)
            {
                //Alarm has been unset.
                await PostMessage(GetSlackExecutionSuccessMessage(1));

                return;
            }

            var successText = ExecutingCommand.Responses.First(p => p.Language == Team.Language && p.Depth == 0).SuccessText;

            var successMessage = SlackMessageGenerator.GetAlarmMessage(successText, currency, limitAmount, mainCurrency);

            await PostMessage(GetSlackExecutionSuccessMessage(successMessage));
        }