예제 #1
0
        public async Task TestGetSubreddit()
        {
            RedditApi api       = new RedditApi();
            Subreddit subreddit = await api.GetSubredditAsync(TestSubredditName);

            Assert.Equal(TestSubredditName, subreddit.Name);
        }
예제 #2
0
        public async Task <Post> GetPostInfo(string url)
        {
            PrepareClient();

            Post post = await RedditApi.GetPostAsync(new Uri(url));

            return(post);
        }
예제 #3
0
        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());
        }
예제 #4
0
        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);
        }
예제 #5
0
파일: Reddit.cs 프로젝트: Fjoksch/Cirilla
        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!");
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
            }
        }
예제 #8
0
파일: Reddit.cs 프로젝트: Fjoksch/Cirilla
        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!");
            }
        }
예제 #9
0
        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;
            }
        }
예제 #10
0
파일: Reddit.cs 프로젝트: mrousavy/Cirilla
        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!");
            }
        }
예제 #11
0
파일: Reddit.cs 프로젝트: mrousavy/Cirilla
        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!");
            }
        }
예제 #12
0
        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();
        }
예제 #14
0
 public RedditManager()
 {
     reddits = new List <Subreddit>();
     api     = new RedditApi();
     LoadChannels();
 }
예제 #15
0
 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();
            }
        }