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