public async Task SendAlertSMSAsync() { var helper = new MessageDeliveryHelper(); var user = new IdentityUser(); user.PhoneNumber = "6122341115"; user.PhoneNumberConfirmed = true; user.UserName = "******"; var alert = new Alert(); alert.SMS = true; var status = new Status(); status.Text = "This is a pretend tweet"; status.User = new User() { ScreenNameResponse = "Bob" }; status.OEmbedUrl = "https://twitter.com/im_uname/status/1347999892392747011"; var result = await helper.SendAlertsAsync(user, alert, status); Assert.IsTrue(result.SMSSuccess); }
public async Task <IActionResult> Index() { _logger.LogInformation("The alert engine has been called."); SetUpTwitterContext(); //This method is going to need to be rebuilt to scale up. At this point it's built with the belief //that the number of users/alerts will stay in the dozens-maybe-hundreds range var alertGroups = _dbCtx.Alerts.AsEnumerable().GroupBy(c => c.UserId); foreach (var userAlerts in alertGroups) { if (_dbCtx.UserDetails.Any(c => c.UserId == userAlerts.First().UserId)) { var userDetails = _dbCtx.UserDetails.First(c => c.UserId == userAlerts.First().UserId); var userLogin = _dbCtx.UserLogins.First(c => c.LoginProvider == "Twitter" && c.UserId == userDetails.UserId); var user = _dbCtx.Users.Find(userDetails.UserId); _twtCtx.Authorizer.CredentialStore.OAuthToken = userDetails.TwitterOAuthToken; _twtCtx.Authorizer.CredentialStore.OAuthTokenSecret = userDetails.TwitterOAuthSecret; foreach (var alert in userAlerts) { _logger.LogInformation($"We are checking tweets for the following word(s): {alert.TriggerWords}. This is for user {alert.UserId} and the twitter user {alert.TwitterFollowName} - {alert.TwitterFollowId}"); var query = "from:" + alert.TwitterFollowId.ToString(); if (!string.IsNullOrEmpty(alert.TriggerWords?.Trim()) && !alert.AlwaysAlert) { query += " " + alert.TriggerWords.Trim(); } var tweets = await _twtCtx.Status.Where(c => c.Type == StatusType.User && c.UserID == (ulong)alert.TwitterFollowId).ToListAsync(); if (tweets != null && tweets.Any(c => DateTime.Compare(alert.LastChecked, c.CreatedAt) <= 0)) { _logger.LogInformation($"There were new tweets from {alert.TwitterFollowName} since {alert.LastChecked}"); var newTweets = tweets.Where(c => DateTime.Compare(alert.LastChecked, c.CreatedAt) <= 0).ToList(); foreach (var newTweet in newTweets) { _logger.LogInformation($"We are checking this tweet: {newTweet.Text} ------- We are looking for any of these words: {alert.TriggerWords}"); if (alert.AlwaysAlert || alert.AlertWords.Any(c => newTweet.Text.Contains(c, StringComparison.CurrentCultureIgnoreCase))) { _logger.LogInformation($"We're sending {user.UserName} a tweet {newTweet.Text}"); _messageHelper.SendAlertsAsync(user, alert, newTweet); } } } alert.LastChecked = DateTime.UtcNow; _dbCtx.Update(alert); } _dbCtx.SaveChanges(); } } return(View()); }