예제 #1
0
        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());
        }
예제 #2
0
        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();
                }
            }
        }