/// <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));
        }