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); }
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); } }
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); } }
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); }
public SubmitToRedditStrategy(IDocumentSession session) { _session = session; var blogConfig = _session.Load <BlogConfig>(BlogConfig.Key); _credentials = RedditHelper.GetCredentials(blogConfig); _subredditNames = RedditHelper.ParseSubreddits(blogConfig); InitializeRedditService(); }
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 }); }
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)); }
#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); }
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); }
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); }
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); }