public async Task TestGetSubreddit() { RedditApi api = new RedditApi(); Subreddit subreddit = await api.GetSubredditAsync(TestSubredditName); Assert.Equal(TestSubredditName, subreddit.Name); }
public async Task <Post> GetPostInfo(string url) { PrepareClient(); Post post = await RedditApi.GetPostAsync(new Uri(url)); return(post); }
public static async Task <List <Link> > HotNews(int limit, string after = null) { var redditService = new RedditApi(); var subreddit = await redditService.GetSubredditAsync("news"); var listings = await subreddit.GetHotLinksAsync(new ListingRequest { Limit = limit, After = after }); return(listings.Select((t, i) => (Link)listings.Children[i]).ToList()); }
public async Task TestGetNextListing() { RedditApi api = new RedditApi(); Subreddit subreddit = await api.GetSubredditAsync(TestSubredditName); Listing listing = await subreddit.GetNewLinksAsync(new ListingRequest { Limit = 1 }); Listing next = await listing.GetNextListingAsync(1); Assert.Equal(1, next.Count); }
public async Task Dankmeme() { try { RedditApi redditService = new RedditApi(); Subreddit subreddit = await redditService.GetSubredditAsync("dankmemes"); RedditNet.Things.Link link = await subreddit.GetRandomLinkAsync(); await ReplyAsync(link.Title + " - " + link.Url); } catch { await ReplyAsync("Sorry, I couldn't find a dank enough post!"); } }
public async Task TestSubredditSearch() { RedditApi api = new RedditApi(); Subreddit subreddit = await api.GetSubredditAsync(TestSubredditName); Listing listing = await subreddit.SearchAsync(new SearchRequest { Sort = SearchSort.Hot, Limit = 10 }); Assert.Equal(10, listing.Count); }
public async Task TestGetSubredditLinks() { RedditApi api = new RedditApi(); Subreddit subreddit = await api.GetSubredditAsync(TestSubredditName); Listing listing = await subreddit.GetNewLinksAsync(new ListingRequest { Limit = 5 }); var result = listing.ToList(); foreach (Thing thing in result) { Assert.IsAssignableFrom(typeof(Link), thing); } }
public async Task RandomPost([Summary("The subreddit to look for a random post")] string rsubreddit) { try { string filtered = Regex.Replace(rsubreddit, "/?r/", ""); RedditApi redditService = new RedditApi(); Subreddit subreddit = await redditService.GetSubredditAsync(filtered); RedditNet.Things.Link link = await subreddit.GetRandomLinkAsync(); await ReplyAsync(link.Title + " - " + link.Url); } catch { await ReplyAsync("Sorry, I couldn't find a random post in that subreddit!"); } }
public async Task <string> PostUrl(string title, string url, string subreddit) { PrepareClient(); Subreddit sub = await RedditApi.GetSubredditAsync(subreddit); try { Post post = await sub.SubmitPostAsync(title, url); return(new Uri(new Uri("https://reddit.com/"), post.Permalink).ToString()); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("reddit post fail: " + e.ToString()); throw e; } }
public async Task Dankmeme() { try { var redditService = new RedditApi(); var subreddit = await redditService.GetSubredditAsync("dankmemes"); var link = await subreddit.GetRandomLinkAsync(); await ReplyAsync(link.Title + " - " + link.Url); ConsoleHelper.Log($"{Helper.GetName(Context.User)} requested a dank meme.", LogSeverity.Info); } catch (Exception ex) { ConsoleHelper.Log($"Error getting random meme from /r/dankmemes! ({ex.Message})", LogSeverity.Error); await ReplyAsync("Sorry, I couldn't find a dank enough post!"); } }
public async Task RandomPost([Summary("The subreddit to look for a random post")] string rsubreddit) { try { string filtered = Regex.Replace(rsubreddit, "/?r/", ""); var redditService = new RedditApi(); var subreddit = await redditService.GetSubredditAsync(filtered); var link = await subreddit.GetRandomLinkAsync(); await ReplyAsync(link.Title + " - " + link.Url); ConsoleHelper.Log($"{Helper.GetName(Context.User)} requested a random link from /r/{filtered}.", LogSeverity.Info); } catch (Exception ex) { ConsoleHelper.Log($"Error getting random link from {rsubreddit}! ({ex.Message})", LogSeverity.Error); await ReplyAsync("Sorry, I couldn't find a random post in that subreddit!"); } }
static void Main(string[] args) { var api = new RedditApi(); var subreddit = api.GetSubredditAsync("noveltranslations").GetAwaiter().GetResult(); var links = subreddit.GetHotLinksAsync(new ListingRequest { Limit = 2 }).Result; foreach (Link link in links.OfType <Link>()) { Console.WriteLine($"Link - {link.Title}"); var comments = link.GetCommentsAsync(new GetCommentsRequest { Limit = 5 }).GetAwaiter().GetResult(); foreach (Comment comment in comments.OfType <Comment>()) { Console.WriteLine($"- Comment - \"{comment.Body}\" by {comment.Author}"); } More more = comments.LastOrDefault() as More; var someMoreComments = more?.Children.Take(2) ?? new List <string>(); foreach (string anotherComment in someMoreComments) { Comment aComment = subreddit.GetCommentAsync(new GetCommentRequest { LinkId = link.Id, CommentId = anotherComment }) .GetAwaiter().GetResult(); Console.WriteLine($"-- Another comment {aComment.Body}"); } } Console.WriteLine(); Console.WriteLine("Done!"); Console.ReadLine(); }
internal static void Main(string[] args) { var a = Assembly.GetExecutingAssembly(); var l = a.Location; Location = Path.GetDirectoryName(l); Assemblies = new Dictionary <string, Assembly>(); AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; l = Path.Combine(Location, "v2_lib"); if (Directory.Exists(l)) { var ls = Directory.GetFiles(l, "*.dll", SearchOption.TopDirectoryOnly); foreach (var xl in ls) { try { var xa = Assembly.Load(File.ReadAllBytes(xl)); Assemblies.Add(xa.FullName, xa); } catch (Exception ex) { Console.WriteLine("CRITICAL: Could not load {0}: {2}/{1}", xl, ex.Message, ex.GetType().ToString()); } } } else { Console.WriteLine("CRITICAL: v2_lib does not exist"); } L.D(Debugger.IsAttached); L.R(Console.Out); L.W("ACB v2", "Initializing"); L.W("ACB v2", "Running from \"{0}\"", Location); L.W("ACB v2", "Parsing commandline"); var cmdl = ParseCommandline(args); L.W("ACB v2", "Options:"); L.W("ACB v2", " Override: {0}", cmdl.Target); L.W("ACB v2", " Single: {0}", cmdl.SingleId); L.W("STOA Lib", "Initializing STO Academy tools"); var tools = new StoAcademyTools(); tools.Initialize(); L.W("ACB-HTTP", "Initializing HTTP component"); var http = new HttpRequestBuilder(); http.UserAgent = "linux:stoap:2 (by /u/eMZi0767)"; L.W("ACB-REDDIT", "Initializing Reddit component"); var reddit = new RedditApi(http); reddit.Initialize(); L.W("ACB-REDDIT", "Querying STOBuilds"); var posts = reddit.QueryPosts(); var comments = reddit.QueryComments(); L.W("ACB v2", "Checking posts"); foreach (var post in posts) { try { if (!post.Convert) { continue; } L.W("ACB-STOA", "Post {0} requires conversion", post.Fullname); L.W("ACB-STOA", "Loading build"); var xbld = tools.GetBuild(post.BuildId); L.W("ACB-BLDW", "Writing markdown"); var xbsb = new StringBuilder(); using (var sw = new StringWriter(xbsb)) using (var md = new MarkdownWriter(sw)) using (var bw = new BuildWriter(md)) bw.WriteBuild(xbld, tools); L.W("ACB-MD", "Making comments"); var xblc = xbsb.ToString().Replace(Environment.NewLine, "\n"); var xbps = new List <string>(); if (xblc.Length > 10000) { L.W("ACB-MD", "Comment too long, splitting"); var xscs = xblc.Split(new string[] { "\n\n---\n\n" }, StringSplitOptions.None); var xcpr = ""; foreach (var xsec in xscs) { if (xsec.Length > 10000) { throw new Exception("Section too long"); } if (xcpr.Length + xsec.Length + 7 < 10000) { if (!string.IsNullOrWhiteSpace(xcpr)) { xcpr += "\n\n---\n\n" + xsec; } else { xcpr += xsec; } } else { xbps.Add(xcpr); xcpr = xsec; } } xbps.Add(xcpr); } else { xbps.Add(xblc); } var xcpn = string.IsNullOrWhiteSpace(cmdl.Target) ? post.Fullname : cmdl.Target; foreach (var xbpt in xbps) { L.W("ACB-REDDIT", "Writing comment"); xcpn = reddit.Comment(xbpt, xcpn); } } catch (Exception ex) { L.X("ACB v2 ERR", ex); reddit.UnregisterThing(post.Fullname); } } L.W("ACB v2", "Checking comments"); foreach (var comment in comments) { try { if (!comment.Convert) { continue; } L.W("ACB-STOA", "Comment {0} requires conversion", comment.Fullname); L.W("ACB-STOA", "Loading build"); var xbld = tools.GetBuild(comment.BuildId); L.W("ACB-BLDW", "Writing markdown"); var xbsb = new StringBuilder(); using (var sw = new StringWriter(xbsb)) using (var md = new MarkdownWriter(sw)) using (var bw = new BuildWriter(md)) bw.WriteBuild(xbld, tools); L.W("ACB-MD", "Making comments"); var xblc = xbsb.ToString().Replace(Environment.NewLine, "\n"); var xbps = new List <string>(); if (xblc.Length > 10000) { L.W("ACB-MD", "Comment too long, splitting"); var xscs = xblc.Split(new string[] { "\n\n---\n\n" }, StringSplitOptions.None); var xcpr = ""; foreach (var xsec in xscs) { if (xsec.Length > 10000) { throw new Exception("Section too long"); } if (xcpr.Length + xsec.Length + 7 < 10000) { if (!string.IsNullOrWhiteSpace(xcpr)) { xcpr += "\n\n---\n\n" + xsec; } else { xcpr += xsec; } } else { xbps.Add(xcpr); xcpr = xsec; } } xbps.Add(xcpr); } else { xbps.Add(xblc); } var xcpn = string.IsNullOrWhiteSpace(cmdl.Target) ? comment.Fullname : cmdl.Target; foreach (var xbpt in xbps) { L.W("ACB-REDDIT", "Writing comment"); xcpn = reddit.Comment(xbpt, xcpn); } } catch (Exception ex) { L.X("ACB v2 ERR", ex); reddit.UnregisterMiniThing(comment.Fullname); } } L.W("ACB v2", "Writing settings"); reddit.WriteLast(); L.W("ACB v2", "All operations completed"); L.Q(); }
public RedditManager() { reddits = new List <Subreddit>(); api = new RedditApi(); LoadChannels(); }
public ThingConverter(RedditApi api) { _api = api; }
public static void RunBot(string[] args) { LoadConf(); L.D(Debugger.IsAttached); L.R(Console.Out); // this is for discord logger if (UseDiscordLog) { var dsb = new StringBuilder(); var dsw = new StringWriter(dsb); L.R(dsw); DiscordLog = dsb; } L.W("ACB v2", "Initializing"); L.W("ACB v2", "Running from \"{0}\"", Location); L.W("ACB v2", "Bot Version: {0}", LibBotVersion); L.W("ACB v2", "LibStoa Version: {0}", LibAcademyVersion); L.W("ACB v2", "Parsing commandline"); var cmdl = ParseCommandline(args); L.W("ACB v2", "Options:"); L.W("ACB v2", " Override: {0}", cmdl.Target); L.W("ACB v2", " Single: {0}", cmdl.SingleId); L.W("STOA Lib", "Initializing STO Academy tools"); var tools = new StoAcademyInterface(); tools.Initialize(); L.W("ACB-HTTP", "Initializing HTTP component"); var http = new HttpRequestBuilder(); http.UserAgent = "linux:stoap:2 (by /u/eMZi0767)"; L.W("ACB-REDDIT", "Initializing Reddit component"); var reddit = new RedditApi(http); reddit.Initialize(); L.W("ACB-REDDIT", "Querying STOBuilds"); var posts = reddit.QueryPosts(); var comments = reddit.QueryComments(); L.W("ACB v2", "Checking posts"); foreach (var post in posts) { try { if (!post.Convert) { continue; } L.W("ACB-STOA", "Post {0} requires conversion", post.Fullname); L.W("ACB-STOA", "Loading build"); var xbld = tools.GetBuild(post.BuildId); L.W("ACB-BLDW", "Writing markdown"); var xbsb = new StringBuilder(); using (var sw = new StringWriter(xbsb)) using (var md = new MarkdownWriter(sw)) using (var bw = new BuildWriter(md)) bw.WriteBuild(xbld, tools); L.W("ACB-MD", "Making comments"); var xblc = xbsb.ToString().Replace(Environment.NewLine, "\n"); var xbps = new List <string>(); if (xblc.Length > 10000) { L.W("ACB-MD", "Comment too long, splitting"); var xscs = xblc.Split(new string[] { "\n\n---\n\n" }, StringSplitOptions.None); var xcpr = ""; foreach (var xsec in xscs) { if (xsec.Length > 10000) { throw new Exception("Section too long"); } if (xcpr.Length + xsec.Length + 7 < 10000) { if (!string.IsNullOrWhiteSpace(xcpr)) { xcpr += "\n\n---\n\n" + xsec; } else { xcpr += xsec; } } else { xbps.Add(xcpr); xcpr = xsec; } } xbps.Add(xcpr); } else { xbps.Add(xblc); } var xcpn = string.IsNullOrWhiteSpace(cmdl.Target) ? post.Fullname : cmdl.Target; foreach (var xbpt in xbps) { L.W("ACB-REDDIT", "Writing comment"); xcpn = reddit.Comment(xbpt, xcpn); } } catch (Exception ex) { L.X("ACB v2 ERR", ex); reddit.UnregisterThing(post.Fullname); } } L.W("ACB v2", "Checking comments"); foreach (var comment in comments) { try { if (!comment.Convert) { continue; } L.W("ACB-STOA", "Comment {0} requires conversion", comment.Fullname); L.W("ACB-STOA", "Loading build"); var xbld = tools.GetBuild(comment.BuildId); L.W("ACB-BLDW", "Writing markdown"); var xbsb = new StringBuilder(); using (var sw = new StringWriter(xbsb)) using (var md = new MarkdownWriter(sw)) using (var bw = new BuildWriter(md)) bw.WriteBuild(xbld, tools); L.W("ACB-MD", "Making comments"); var xblc = xbsb.ToString().Replace(Environment.NewLine, "\n"); var xbps = new List <string>(); if (xblc.Length > 10000) { L.W("ACB-MD", "Comment too long, splitting"); var xscs = xblc.Split(new string[] { "\n\n---\n\n" }, StringSplitOptions.None); var xcpr = ""; foreach (var xsec in xscs) { if (xsec.Length > 10000) { throw new Exception("Section too long"); } if (xcpr.Length + xsec.Length + 7 < 10000) { if (!string.IsNullOrWhiteSpace(xcpr)) { xcpr += "\n\n---\n\n" + xsec; } else { xcpr += xsec; } } else { xbps.Add(xcpr); xcpr = xsec; } } xbps.Add(xcpr); } else { xbps.Add(xblc); } var xcpn = string.IsNullOrWhiteSpace(cmdl.Target) ? comment.Fullname : cmdl.Target; foreach (var xbpt in xbps) { L.W("ACB-REDDIT", "Writing comment"); xcpn = reddit.Comment(xbpt, xcpn); } } catch (Exception ex) { L.X("ACB v2 ERR", ex); reddit.UnregisterMiniThing(comment.Fullname); } } L.W("ACB v2", "Writing settings"); reddit.WriteLast(); L.W("ACB v2", "All operations completed"); L.Q(); // write the discord log if (UseDiscordLog) { var sender = new Socket(DiscordLogEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); sender.Connect(DiscordLogEndpoint); var msgd = new UTF8Encoding(false).GetBytes(DiscordLog.ToString()); var msgl = BitConverter.GetBytes((ulong)msgd.Length); var msg = new byte[msgd.Length + msgl.Length]; Array.Copy(msgl, 0, msg, 0, msgl.Length); Array.Copy(msgd, 0, msg, msgl.Length, msgd.Length); sender.Send(msg); sender.Close(); } }