private Embed CreateEmbed(TweetRecord tweet, TwitterToCheck twitter) { var embed = new EmbedBuilder(); var author = new EmbedAuthorBuilder { Name = tweet.AuthorUsername + " (" + tweet.AuthorName + ")", Url = "https://twitter.com/" + tweet.AuthorUsername, IconUrl = tweet.ProfileImageUrl }; var createdAt = TimeZoneInfo.ConvertTime(tweet.CreatedAt, Helpers.CentralTimeZone()); var footer = new EmbedFooterBuilder { Text = $"Posted on {createdAt:MMM d, yyyy} at {createdAt:H:mm} Central" }; embed.Title = "Go to tweet"; embed.Description = tweet.Text; embed.Url = $"https://twitter.com/{tweet.AuthorUsername}/status/{tweet.TweetId}"; embed.Color = new Color((uint)twitter.EmbedColor); embed.Author = author; embed.Footer = footer; return(embed.Build()); }
public void Execute() { Log.Debug("Twitter check started for {twitter}", _twitter.FriendlyUsername); using (var context = new DggContext()) { var existing = context.TweetRecords.FirstOrDefault(t => t.UserId == _twitter.UserId); var tweets = _twitterService.GetTweet(_twitter.UserId, existing?.TweetId).GetAwaiter().GetResult(); var channel = _client.GetChannel((ulong)_twitter.DiscordChannelId) as SocketTextChannel; for (var i = 0; i < tweets.Count; i++) { var tweet = tweets[i]; if (tweet.FullText.StartsWith("@")) { tweets.RemoveAt(i); i--; continue; } var embed = CreateEmbed(tweet); try { channel.SendMessageAsync("", embed: embed).GetAwaiter().GetResult(); } catch (Exception ex) { Console.Error.WriteLine("[" + DateTime.UtcNow + "] TWITTER ERROR, CheckTwitterAsync"); Console.Error.WriteLine(ex.ToString()); Console.Error.WriteLine(ex.InnerException?.ToString()); Console.Error.WriteLine("------------"); Console.Error.WriteLine(); } if (existing == null) { tweets.Reverse(); break; } } if (tweets.Count == 0) { return; } var latestTweet = tweets[tweets.Count - 1]; using (var db = new DggContext()) { if (existing == null) { existing = new TweetRecord { UserId = latestTweet.User.Id, TweetId = latestTweet.Id, Text = WebUtility.HtmlDecode(latestTweet.FullText), AuthorName = latestTweet.User.Name, AuthorUsername = latestTweet.User.Username, ProfileImageUrl = latestTweet.User.ProfileImageUrl, CreatedAt = latestTweet.CreatedAt.UtcDateTime }; db.TweetRecords.Add(existing); } else { existing.TweetId = latestTweet.Id; existing.Text = WebUtility.HtmlDecode(latestTweet.FullText); existing.AuthorName = latestTweet.User.Name; existing.AuthorUsername = latestTweet.User.Username; existing.ProfileImageUrl = latestTweet.User.ProfileImageUrl; existing.CreatedAt = latestTweet.CreatedAt.UtcDateTime; db.TweetRecords.Update(existing); } db.SaveChanges(); } } }