Beispiel #1
0
        public void TweetTask(string text, bool displayMsg = true)
        {
            RateLimit.RateLimitTrackerMode = RateLimitTrackerMode.TrackAndAwait;                                                               //to avoid ratelimits, let Tweetinvi handle it
            var embed = new EmbedBuilder();

            if (stream == null)
            {
                stream = Stream.CreateFilteredStream();                                                                                             //create a stream for the live feed
            }
            foreach (var feed in twitterFeeds)
            {
                stream.AddFollow(User.GetUserFromScreenName(feed.twitterUser));                                                                                                         //set the stream to follow said user(s)
            }
            stream.MatchingTweetReceived += async(sender, args) =>
            {
                var tweet = args.Tweet;

                foreach (var feed in twitterFeeds)
                {
                    if (tweet.CreatedBy.ScreenName == feed.twitterUser)                                                                                                         //if the twitter screen name matches a saved screen name...
                    {
                        embed = new EmbedBuilder();
                        embed.WithAuthor($"{tweet.CreatedBy.Name} (@{tweet.CreatedBy.ScreenName})", tweet.CreatedBy.ProfileImageUrl, tweet.Url);
                        embed.WithDescription(tweet.Text);
                        embed.WithColor(0, 172, 237);                             //Twitter blue

                        if (tweet.Media.Count > 0)
                        {
                            embed.WithImageUrl(tweet.Media[0].MediaURL);
                        }

                        foreach (var channel in feed.channels)                                                                                                                          //post the embedded tweet in every channel
                        {
                            await channel.SendMessageAsync("", false, embed.Build());
                        }

                        break;
                    }
                }
            };

            stream.StreamStopped += (sender, args) =>
            {
                if (args.Exception != null)
                {
                    Console.WriteLine(args.Exception);
                }
            };

            var MainThread = new Thread(() => stream.StartStreamMatchingAnyConditionAsync());

            MainThread.Start();
            MainThread = new Thread(async() =>
            {
                if (!String.IsNullOrWhiteSpace(text) && displayMsg)
                {
                    var msg = await ReplyAsync($"`Live feed is now hooked into @{text}.`");
                    await Task.Delay(2000);
                    await msg.DeleteAsync();
                }
                else if (!displayMsg)
                {
                    var msg = await ReplyAsync($"`The live feed of @{text} has been removed.`");
                    await Task.Delay(2000);
                    await msg.DeleteAsync();
                }

                await Context.Client.SetGameAsync($"{twitterFeeds.Count} user's Twitter feed", null, ActivityType.Listening);
                while (true)
                {
                    Thread.Sleep(2000);
                    if (!running)
                    {
                        stream.StopStream();
                        stream.ClearFollows();
                        await Context.Client.SetGameAsync(null);
                        break;
                    }
                }
            });
            MainThread.Start();
            MainThread.IsBackground = true;
        }