Ejemplo n.º 1
0
        public void SubmitPostsToReddit(DateTimeOffset currentDateTimeOffset)
        {
            if (_subredditNames.Count == 0)
            {
                _log.Info("No subreddits to submit to configured.");
                return;
            }

            if (_credentials.IsValid == false)
            {
                _log.Info("Reddit credentials config options are invalid. Check your blog config.");
                return;
            }

            _log.Info($"Submitting #{RedditHelper.SendToRedditTag} posts to reddit.");

            var posts = RedditHelper.GetPostsForAutomaticRedditSubmission(_session, currentDateTimeOffset);

            if (posts.Any() == false)
            {
                _log.Info("No posts to submit to Reddit.");
                return;
            }

            _reddit.LogIn(_credentials.User, _credentials.Password);

            SubmitPosts(posts);
        }
Ejemplo n.º 2
0
        private static async Task AddMemeWarOfTheDayEntry(IEnumerable <XElement> nodes, XDocument parent)
        {
            var  memeNodes = nodes;
            bool save      = false;

            foreach (var memeNode in memeNodes)
            {
                var lastEntry = memeNode.Descendants().Last();
                if (DateTime.Now.Subtract(DateTime.Parse(lastEntry.Attribute("timestamp").Value)).TotalMinutes >= GlobalVariables.RedditMemeWarUpdateRate)
                {
                    save = true;

                    var redditHelper = new RedditHelper();
                    var post         = await redditHelper.GetMemeByFullnameAsync(memeNode.Attribute("fullname").Value);

                    var subEntry = new XElement("entry");
                    subEntry.SetAttributeValue("timestamp", DateTime.Now.ToShortTimeString());
                    subEntry.SetAttributeValue("upvotes", post.Upvotes);
                    subEntry.SetAttributeValue("downvotes", post.Downvotes);
                    subEntry.SetAttributeValue("score", post.Score);
                    memeNode.Add(subEntry);
                }
            }

            if (save)
            {
                parent.Save(GlobalVariables.RedditMemeWarOfTheDayFullPath);
            }
        }
Ejemplo n.º 3
0
        public static async Task GetMemeOfTheDay()
        {
            if (DateTime.Now.Hour >= GlobalVariables.StartOfDay)
            {
                string path      = GlobalVariables.RedditMemeOfTheDayFullPath;
                var    doc       = XDocument.Load(path);
                var    body      = doc.Descendants("body").First();
                var    mainNodes = body.Descendants("meme");

                if (mainNodes == null)
                {
                    return;
                }

                if (!mainNodes.Any(x => x.Attribute("date").Value == DateTime.Now.ToShortDateString()))
                {
                    var    redditHelper = new RedditHelper();
                    string memeURL      = await redditHelper.GetTopMEIRLDayURLAsync();

                    var memeElement = new XElement("meme");
                    memeElement.SetAttributeValue("date", DateTime.Now.ToShortDateString());
                    memeElement.SetAttributeValue("url", memeURL);
                    body.Add(memeElement);
                }

                doc.Save(path);
            }
        }
Ejemplo n.º 4
0
        public async Task RedditIMGAsync(string subreddit)
        {
            if (subreddit == null)
            {
                throw new Exception("Please give a subreddit to browse.");
            }

            var cache = RedditModels.SubReddits.FirstOrDefault(x => string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));

            if (cache != null && cache.LastUpdate > DateTime.UtcNow - TimeSpan.FromHours(6))
            {
                if (cache.NSFW)
                {
                    throw new Exception("This command is for non NSFW Subreddits.");
                }

                var image   = cache.Posts[Context.Provider.GetRequiredService <Random>().Next(cache.Posts.Count)];
                var isImage = RedditHelper.IsImage(image.Url.ToString());
                var embed   = new EmbedBuilder {
                    Title = image.Title, Url = $"https://reddit.com{image.Permalink}", Footer = new EmbedFooterBuilder {
                        Text = isImage.Extension
                    }
                };
                await ReplyAsync(isImage.Url);
                await ReplyAsync(embed.Build());

                cache.Hits++;
            }
            else
            {
                var r   = new Reddit();
                var sub = await r.GetSubredditAsync(subreddit);

                if (sub.NSFW == true)
                {
                    await ReplyAsync("Please use the NSFW Reddit command for NSFW Images");

                    return;
                }

                await ReplyAsync("Refreshing Cache");

                var num1 = await sub.GetTop(FromTime.Week, 150).Where(x => RedditHelper.IsImage(x.Url.ToString()).IsImage&& !x.NSFW).ToList();

                var img   = num1[Context.Provider.GetRequiredService <Random>().Next(num1.Count)];
                var obj   = RedditHelper.IsImage(img.Url.ToString());
                var embed = new EmbedBuilder {
                    Title = img.Title, Url = $"https://reddit.com{img.Permalink}", Footer = new EmbedFooterBuilder {
                        Text = obj.Extension
                    }
                };
                await ReplyAsync(obj.Url);
                await ReplyAsync(embed.Build());

                RedditModels.SubReddits.RemoveAll(x => string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));
                RedditModels.SubReddits.Add(new RedditModels.SubReddit {
                    Title = subreddit, LastUpdate = DateTime.UtcNow, Posts = num1
                });
            }
        }
        private async Task <RedditManualSubmissionViewModel> PrepareRedditManualSubmissionViewModel()
        {
            var model = new RedditManualSubmissionViewModel();

            model.SubredditsToSubmitTo = RedditHelper.ParseSubreddits(BlogConfig);
            model.NotSubmittedPosts    = RedditHelper.GetPostsForManualRedditSubmission(RavenSession, DateTimeOffset.UtcNow);
            return(model);
        }
Ejemplo n.º 6
0
        public SubmitToRedditStrategy(IDocumentSession session)
        {
            _session = session;
            var blogConfig = _session.Load <BlogConfig>(BlogConfig.Key);

            _credentials    = RedditHelper.GetCredentials(blogConfig);
            _subredditNames = RedditHelper.ParseSubreddits(blogConfig);

            InitializeRedditService();
        }
Ejemplo n.º 7
0
        public async Task BRedditNSFWAsync(string subreddit = null)
        {
            if (subreddit == null)
            {
                await ReplyAsync("Please give a subreddit to browse.");

                return;
            }

            var         subObject = RedditModels.SubReddits.FirstOrDefault(x => string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));
            List <Post> posts;

            if (subObject != null && subObject.LastUpdate > DateTime.UtcNow - TimeSpan.FromHours(6))
            {
                // just post
                posts = subObject.Posts;
                subObject.Hits++;
            }
            else
            {
                // get images then post
                var r   = new Reddit();
                var sub = await r.GetSubredditAsync(subreddit);
                await ReplyAsync("Refreshing Cache");

                posts = await sub.GetTop(FromTime.Week, 150).Where(x => RedditHelper.IsImage(x.Url.ToString()).IsImage).ToList();

                RedditModels.SubReddits.RemoveAll(x => string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));
                RedditModels.SubReddits.Add(new RedditModels.SubReddit {
                    Title = subreddit, LastUpdate = DateTime.UtcNow, Posts = posts, Hits = 0, NSFW = true
                });
            }

            // post
            var pages = new List <PaginatedMessage.Page>();

            foreach (var image in posts.OrderByDescending(x => new Random().Next()))
            {
                var imageObject = RedditHelper.IsImage(image.Url.ToString());
                if (imageObject.IsImage && !imageObject.Url.Contains("gfy"))
                {
                    pages.Add(new PaginatedMessage.Page {
                        ImageUrl = imageObject.Url, Description = $"{imageObject.Extension} | [Link](https://reddit.com{image.Permalink})", Title = image.Title
                    });
                }
            }

            var msg = new PaginatedMessage {
                Title = $"{subreddit} Images", Pages = pages, Color = new Color(114, 137, 218)
            };

            await PagedReplyAsync(msg, new ReactionList { Forward = true, Backward = true, Trash = true });
        }
Ejemplo n.º 8
0
        public async Task RedditNSFW(string subreddit = null)
        {
            if (subreddit == null)
            {
                await ReplyAsync("Please give a subreddit to browse.");

                return;
            }

            var         rnd = new Random();
            List <Post> posts;
            var         checkcache = CommandHandler.SubReddits.FirstOrDefault(x =>
                                                                              string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));

            if (checkcache != null && checkcache.LastUpdate > DateTime.UtcNow - TimeSpan.FromHours(6))
            {
                posts = checkcache.Posts;
                checkcache.Hits++;
            }
            else
            {
                var r   = new Reddit();
                var sub = r.GetSubreddit(subreddit);

                await ReplyAsync("Refreshing Cache");

                posts = sub.Hot.Take(150).Where(x => RedditHelper.isimage(x.Url.ToString()).isimage).ToList();
                CommandHandler.SubReddits.RemoveAll(x =>
                                                    string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));
                CommandHandler.SubReddits.Add(new CommandHandler.SubReddit
                {
                    Title      = subreddit,
                    LastUpdate = DateTime.UtcNow,
                    Posts      = posts
                });
            }

            var img   = posts[rnd.Next(posts.Count - 1)];
            var obj   = RedditHelper.isimage(img.Url.ToString());
            var embed = new EmbedBuilder
            {
                Title  = img.Title,
                Url    = $"https://reddit.com{img.Permalink}",
                Footer = new EmbedFooterBuilder
                {
                    Text = obj.extension
                }
            };

            await ReplyAsync(obj.url);
            await ReplyAsync("", false, embed.Build());
        }
        public virtual async Task <ActionResult> SubmitToReddit(string postId, string sr)
        {
            var post            = RavenSession.Load <Post>(postId);
            var redditSubmitUrl = RedditHelper.SubmitUrl(sr, post);
            var postSubmission  = post.Integration.Reddit.GetPostSubmissionForSubreddit(sr);

            postSubmission.Status   = Reddit.SubmissionStatus.ManualSubmissionPending;
            postSubmission.Attempts = 0;

            RavenSession.SaveChanges();

            return(Redirect(redditSubmitUrl));
        }
Ejemplo n.º 10
0
#pragma warning disable RCS1018 // Add accessibility modifiers.
#pragma warning disable RCS1163 // Unused parameter.
#pragma warning disable IDE0060 // Remove unused parameter
        static void Main(string[] args)
#pragma warning restore IDE0060 // Remove unused parameter
#pragma warning restore RCS1163 // Unused parameter.
#pragma warning restore RCS1018 // Add accessibility modifiers.
        {
            Console.WriteLine($"Starting...");
            var services        = ConfigureServices();
            var serviceProvider = services.BuildServiceProvider();

            var redditHelper = new RedditHelper(
                serviceProvider.GetService <IRedditClientWrapper>(),
                serviceProvider.GetService <IRedditMessageHandler>());

            redditHelper.MonitorUnreadMessages();

            System.Threading.Thread.Sleep(1000 * 60 * 60 * 72);
        }
Ejemplo n.º 11
0
        public async Task PImage(string URL = null)
        {
            var guild = GuildConfig.GetServer(Context.Guild);

            if (URL == null)
            {
                guild.PartnerSetup.ImageUrl = null;
                await ReplyAsync("Image has been removed.");
            }
            else if (RedditHelper.isimage(URL).isimage)
            {
                guild.PartnerSetup.ImageUrl = URL;
                var embed = new EmbedBuilder {
                    ImageUrl = URL
                };
                await ReplyAsync("Image Set", false, embed.Build());

                var home = Homeserver.Load().PartnerUpdates;
                var chan = await Context.Client.GetChannelAsync(home);

                if (chan is IMessageChannel channel)
                {
                    var embed2 = new EmbedBuilder
                    {
                        Title       = "Partner Image Set",
                        Description = $"{Context.Guild.Name}\n" +
                                      $"`{Context.Guild.Id}`\n" +
                                      $"Channel: {Context.Channel.Name}",
                        ImageUrl = URL
                    };
                    await channel.SendMessageAsync("", false, embed2.Build());
                }
            }
            else
            {
                await ReplyAsync("You have not provided an image URL.");

                return;
            }

            GuildConfig.SaveServer(guild);
        }
Ejemplo n.º 12
0
        public static async Task GetMemeWarOfTheDay()
        {
            string path      = GlobalVariables.RedditMemeWarOfTheDayFullPath;
            var    doc       = XDocument.Load(path);
            var    body      = doc.Descendants("body").First();
            var    mainNodes = body.Descendants("day");

            if (DateTime.Now.Hour >= GlobalVariables.StartOfDay) //Creates initial XML
            {
                if (!mainNodes.Any(x => x.Attribute("date").Value == DateTime.Now.ToShortDateString()))
                {
                    var redditHelper = new RedditHelper();
                    var posts        = await redditHelper.GetNewestMemesAsync();

                    var dayElement = new XElement("day");
                    dayElement.SetAttributeValue("date", DateTime.Now.ToShortDateString());
                    int counter = 1;

                    foreach (var post in posts)
                    {
                        var memeElement = new XElement("meme");
                        memeElement.SetAttributeValue("id", counter.ToString());
                        memeElement.SetAttributeValue("fullname", post.FullName);
                        memeElement.SetAttributeValue("name", post.Title);
                        memeElement.SetAttributeValue("url", post.Url.AbsoluteUri);

                        var subEntry = new XElement("entry");
                        subEntry.SetAttributeValue("timestamp", DateTime.Now.ToShortTimeString());
                        subEntry.SetAttributeValue("upvotes", post.Upvotes);
                        subEntry.SetAttributeValue("downvotes", post.Downvotes);
                        subEntry.SetAttributeValue("score", post.Score);
                        memeElement.Add(subEntry);

                        dayElement.Add(memeElement);
                        counter++;
                    }

                    body.Add(dayElement);
                }

                doc.Save(path);
            }

            var currentDayNode = mainNodes.FirstOrDefault(x => x.Attribute("date").Value == DateTime.Now.ToShortDateString());

            if (currentDayNode != null)
            {
                var memeNodes = currentDayNode.Descendants("meme");
                await AddMemeWarOfTheDayEntry(memeNodes, doc);
            }
            else
            {
                //If it is before start of new "day"
                var lastDayNode = mainNodes.FirstOrDefault(x => x.Attribute("date").Value == (DateTime.Now - new TimeSpan(1, 0, 0, 0)).ToShortDateString());

                if (lastDayNode != null)
                {
                    var memeNodes = lastDayNode.Descendants("meme");
                    await AddMemeWarOfTheDayEntry(memeNodes, doc);
                }
            }
        }
 public RedditHelperTests()
 {
     _fakeRedditClientWrapper  = A.Fake <IRedditClientWrapper>();
     _fakeRedditMessageHandler = A.Fake <IRedditMessageHandler>();
     _redditHelper             = new RedditHelper(_fakeRedditClientWrapper, _fakeRedditMessageHandler);
 }
Ejemplo n.º 14
0
        public async Task BRedditNSFW(string subreddit = null)
        {
            if (subreddit == null)
            {
                await ReplyAsync("Please give a subreddit to browse.");

                return;
            }

            var subredditobj = CommandHandler.SubReddits.FirstOrDefault(x =>
                                                                        string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));
            List <Post> posts;

            if (subredditobj != null && subredditobj.LastUpdate > DateTime.UtcNow - TimeSpan.FromHours(6))
            {
                //just post
                posts = subredditobj.Posts;
                subredditobj.Hits++;
            }
            else
            {
                //get images then post
                var r   = new Reddit();
                var sub = r.GetSubreddit(subreddit);
                await ReplyAsync("Refreshing Cache");

                posts = sub.Hot.GetListing(150).Where(x => RedditHelper.isimage(x.Url.ToString()).isimage).ToList();
                CommandHandler.SubReddits.RemoveAll(x =>
                                                    string.Equals(x.Title, subreddit, StringComparison.CurrentCultureIgnoreCase));
                CommandHandler.SubReddits.Add(new CommandHandler.SubReddit
                {
                    Title      = subreddit,
                    LastUpdate = DateTime.UtcNow,
                    Posts      = posts,
                    Hits       = 0
                });
            }

            //post
            var pages = new List <PaginatedMessage.Page>();

            foreach (var image in posts.OrderByDescending(x => new Random().Next()))
            {
                var iobj = RedditHelper.isimage(image.Url.ToString());
                if (iobj.isimage && !iobj.url.Contains("gfy"))
                {
                    pages.Add(new PaginatedMessage.Page
                    {
                        imageurl     = iobj.url,
                        description  = $"{iobj.extension} || [Link](https://reddit.com{image.Permalink})",
                        dynamictitle = image.Title
                    });
                }
            }

            var msg = new PaginatedMessage
            {
                Title = $"{subreddit} Images",
                Pages = pages,
                Color = new Color(114, 137, 218)
            };

            await PagedReplyAsync(msg);
        }