public bool UpdateAsAlerted(string userId, string symbolId, DateTime date) { var alert = _alertRepository.FindAlert(userId, symbolId); if (alert == null) { return(false); } alert.LastAlertDate = date; return(_alertRepository.UpdateAlert(alert)); }
public async Task ExecuteAsync(BotUpdateInput input) { string message = input.Message.Text.Trim(); message = message.Replace((message + " ").Split(' ')[0], string.Empty).Trim(); List <string> values = message.Contains(" ") ? message.Split(' ').ToList() : new List <string>() { message }; UserEntity user = _userRepository.FindUser(input.Message.Chat.Id.ToString()); if (user == null) { await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), "Unauthorized!"); return; } // "/alerts get <all|symbol>" if (values[0] == "get") { if (values.Count == 1) { await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), "Invalid arguments!"); return; } if (values[1] == "all") { var alerts = _alertRepository.FindAlerts(user.Id); List <string> lines = new List <string>(); foreach (var item in alerts) { var sym = _symbolRepository.FindSymbols().FirstOrDefault(x => x.Id == item.SymbolId); string line = $"{sym.FriendlyName} when"; if (item.LessValue.HasValue) { line += $" less than {item.LessValue.Value}"; } if (item.GreaterValue.HasValue) { line += $" greater than {item.GreaterValue.Value}"; } lines.Add(line); } if (!lines.Any()) { await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), "There are no alerts!"); return; } lines = lines.OrderBy(x => x).ToList(); await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), string.Join("\r\n", lines)); return; } else { var symbol = _symbolRepository.FindSymbols().FirstOrDefault(x => x.Name == values[1].ToUpperInvariant() || x.FriendlyName == values[1].ToUpperInvariant()); if (symbol == null) { await _messageService.SendMessageAsync(user.ChatId, "Symbol is not found!"); return; } var alert = _alertRepository.FindAlert(user.Id, symbol.Id); if (alert == null) { await _messageService.SendMessageAsync(user.ChatId, "Alert is not found!"); return; } string result = $"{symbol.FriendlyName} when"; if (alert.LessValue.HasValue) { result += $" less than {alert.LessValue.Value}"; } if (alert.GreaterValue.HasValue) { result += $" greater than {alert.GreaterValue.Value}"; } await _messageService.SendMessageAsync(user.ChatId, result); } } // "/alerts set <symbol> <less|greater> <value>" else if (values[0] == "set") { if (values.Count < 4) { await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), "Invalid arguments!"); return; } var symbol = _symbolRepository.FindSymbols().FirstOrDefault(x => x.Name == values[1].ToUpperInvariant() || x.FriendlyName == values[1].ToUpperInvariant()); if (symbol == null) { await _messageService.SendMessageAsync(user.ChatId, "Symbol is not found!"); return; } var alert = _alertRepository.FindAlert(user.Id, symbol.Id); if (values[2] == "less") { decimal lessValue = Convert.ToDecimal(values[3]); if (alert == null) { _alertRepository.InsertAlert(new AlertEntity() { UserId = user.Id, SymbolId = symbol.Id, LessValue = lessValue }); } else { alert.LessValue = lessValue; _alertRepository.UpdateAlert(alert); } _socketServiceManager.UpdateAlert(user.Id); await _messageService.SendMessageAsync(user.ChatId, "Success!"); } else if (values[2] == "greater") { decimal greaterValue = Convert.ToDecimal(values[3]); if (alert == null) { _alertRepository.InsertAlert(new AlertEntity() { UserId = user.Id, SymbolId = symbol.Id, GreaterValue = greaterValue }); } else { alert.GreaterValue = greaterValue; _alertRepository.UpdateAlert(alert); } _socketServiceManager.UpdateAlert(user.Id); await _messageService.SendMessageAsync(user.ChatId, "Success!"); } else { await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), "Invalid arguments!"); return; } } // "/alerts del <all|symbol>" else if (values[0] == "del") { if (values.Count == 1) { await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), "Invalid arguments!"); return; } if (values[1] == "all") { var alerts = _alertRepository.FindAlerts(user.Id); foreach (var alert in alerts) { _alertRepository.RemoveAlert(alert.Id); } _socketServiceManager.UpdateAlert(user.Id); await _messageService.SendMessageAsync(user.ChatId, "Success!"); } else { var symbol = _symbolRepository.FindSymbols().FirstOrDefault(x => x.Name == values[1].ToUpperInvariant() || x.FriendlyName == values[1].ToUpperInvariant()); if (symbol == null) { await _messageService.SendMessageAsync(user.ChatId, "Symbol is not found!"); return; } var alert = _alertRepository.FindAlert(user.Id, symbol.Id); if (alert == null) { await _messageService.SendMessageAsync(user.ChatId, "Alert is not found!"); } else { _alertRepository.RemoveAlert(alert.Id); _socketServiceManager.UpdateAlert(user.Id); await _messageService.SendMessageAsync(user.ChatId, "Success!"); } } } else { await _messageService.SendMessageAsync(input.Message.Chat.Id.ToString(), "Invalid arguments!"); return; } }