Example #1
20
 public RedditUser(Reddit reddit, JToken json, IWebAgent webAgent)
     : base(json)
 {
     Reddit = reddit;
     WebAgent = webAgent;
     JsonConvert.PopulateObject(json["data"].ToString(), this, reddit.JsonSerializerSettings);
 }
Example #2
6
 static void Main(string[] args)
 {
     var reddit = new Reddit();
     while (reddit.User == null)
     {
         Console.Write("Username: "******"Password: "******"Logging in...");
             reddit.LogIn(username, password);
         }
         catch (AuthenticationException)
         {
             Console.WriteLine("Incorrect login.");
         }
     }
     var subreddit = reddit.GetSubreddit("pokemon");
     var posts = subreddit.GetNew();
     foreach (var post in posts.Take(25))
         Console.WriteLine("/u/{0}: (+{1}-{2}:{3}) {4}", post.AuthorName, post.Upvotes, post.Downvotes, post.Score, post.Title);
     Console.ReadKey(true);
 }
 public AuthenticatedUser(Reddit reddit, JToken json)
     : base(reddit, json)
 {
     Modhash = json["data"]["modhash"].Value<string>();
     HasMail = json["data"]["has_mail"].Value<bool>();
     HasModMail = json["data"]["has_mod_mail"].Value<bool>();
 }
Example #4
5
 static void Main(string[] args)
 {
     var reddit = new Reddit();
     int backDays;
     try
     {
         reddit.User = reddit.LogIn(ModUserName, ModPassword);
         _sub = reddit.GetSubreddit(SubReddit);
         int.TryParse(ReadBackDays, out backDays);
         if(backDays<1)
         {
             Console.WriteLine("Invalid value for readBackDays in config file. Please enter an integer greater than 0.");
             throw new Exception();
         }
     }
     catch
     {
         Console.WriteLine("Configuration Error. Please confirm values in config file.");
         Console.WriteLine("Press Enter to exit.");
         Console.Read();
         return;
     }
     while (true)
     {
         try
         {
             AssignFlairs(TriggerText, DateTime.Today.AddDays(backDays));
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
         }
     }
 }
Example #5
5
        public Post(Reddit reddit, JToken post)
            : base(reddit, post)
        {
            Reddit = reddit;

            var data = post["data"];
            AuthorName = data["author"].Value<string>();
            AuthorFlairClass = data["author_flair_css_class"].Value<string>();
            AuthorFlairText = data["author_flair_text"].Value<string>();
            Domain = data["domain"].Value<string>();
            Edited = data["edited"].Value<bool>();
            IsSelfPost = data["is_self"].Value<bool>();
            LinkFlairClass = data["link_flair_css_class"].Value<string>();
            LinkFlairText = data["link_flair_text"].Value<string>();
            CommentCount = data["num_comments"].Value<int>();
            NSFW = data["over_18"].Value<bool>();
            Permalink = data["permalink"].Value<string>();
            Saved = data["saved"].Value<bool>();
            Score = data["score"].Value<int>();
            SelfText = data["selftext"].Value<string>();
            SelfTextHtml = data["selftext_html"].Value<string>();
            Subreddit = data["subreddit"].Value<string>();
            Thumbnail = data["thumbnail"].Value<string>();
            Title = HttpUtility.HtmlDecode(data["title"].Value<string>());
            Url = data["url"].Value<string>();

            if (data["num_reports"] != null)
                Reports = data["num_reports"].Value<int>();
        }
Example #6
5
        private Reddit GetReddit()
        {
            var reddit = new Reddit(_appSettings.Options.RedditUsername, _appSettings.Options.RedditPassword, true);
            reddit.CaptchaSolver = new CaptchaIgnorer();

            return reddit;
        }
Example #7
5
        public Post(Reddit reddit, JToken post)
            : base(reddit, post)
        {
            Reddit = reddit;

            var data = post["data"];
            AuthorName = data["author"].Value<string>();
            AuthorFlairClass = data["author_flair_css_class"].Value<string>();
            AuthorFlairText = data["author_flair_text"].Value<string>();
            Created = Reddit.UnixTimeStampToDateTime(data["created"].Value<double>());
            Domain = data["domain"].Value<string>();
            Downvotes = data["downs"].Value<int>();
            Edited = data["edited"].Value<bool>();
            IsSelfPost = data["is_self"].Value<bool>();
            LinkFlairClass = data["link_flair_css_class"].Value<string>();
            LinkFlairText = data["link_flair_text"].Value<string>();
            CommentCount = data["num_comments"].Value<int>();
            NSFW = data["over_18"].Value<bool>();
            Permalink = data["permalink"].Value<string>();
            Saved = data["saved"].Value<bool>();
            Score = data["score"].Value<int>();
            SelfText = data["selftext"].Value<string>();
            SelfTextHtml = data["selftext_html"].Value<string>();
            Subreddit = data["subreddit"].Value<string>();
            Thumbnail = data["thumbnail"].Value<string>();
            Title = HttpUtility.HtmlDecode(data["title"].Value<string>());
            Upvotes = data["ups"].Value<int>();
            Url = data["url"].Value<string>();
            Name = data["name"].Value<string>().Replace("t3_", "");
        }
 public void Launch()
 {
     var reddit = new Reddit();
     var user = reddit.LogIn("bot_wallpaper", "qwerty");
     var subreddit = reddit.GetSubreddit("/r/botwallpaper");
     DateTime today = DateTime.Today;
     if (today.DayOfWeek == DayOfWeek.Sunday && !sentMessages)
     {
         using (StreamReader sr = new StreamReader("subreddits.txt"))
         {
             string line;
             while ((line = sr.ReadLine()) != null)
             {
                 SubredditProcessor wallpaper = new SubredditProcessor(
                     line);
                 wallpaper.Launch();
             }
             Console.WriteLine("ServerListener: Created subreddits");
         }
         sentMessages = true;
     }
     else if (today.DayOfWeek == DayOfWeek.Monday)
     {
         sentMessages = false;
     }
 }
Example #9
5
 public Post(Reddit reddit, JToken post, IWebAgent webAgent)
     : base(reddit, webAgent, post)
 {
     Reddit = reddit;
     WebAgent = webAgent;
     JsonConvert.PopulateObject(post["data"].ToString(), this, reddit.JsonSerializerSettings);
 }
Example #10
5
 public SubredditImage(Reddit reddit, SubredditStyle subredditStyle,
     string cssLink, string name)
 {
     Reddit = reddit;
     SubredditStyle = subredditStyle;
     Name = name;
     CssLink = cssLink;
 }
Example #11
5
        public CreatedThing(Reddit reddit, JToken json)
            : base(json)
        {
            Reddit = reddit;

            var data = json["data"];
            Created = Reddit.UnixTimeStampToDateTime(data["created"].Value<double>());
        }
Example #12
5
 static void Main(string[] args)
 {
     Reddit reddit = null;
     var authenticated = false;
     while (!authenticated)
     {
         Console.Write("OAuth? (y/n) [n]: ");
         var oaChoice = Console.ReadLine();
         if (!string.IsNullOrEmpty(oaChoice) && oaChoice.ToLower()[0] == 'y')
         {
             Console.Write("OAuth token: ");
             var token = Console.ReadLine();
             reddit = new Reddit(token);
             reddit.InitOrUpdateUser();
             authenticated = reddit.User != null;
             if (!authenticated)
                 Console.WriteLine("Invalid token");
         }
         else
         {
             Console.Write("Username: "******"Password: "******"Logging in...");
                 reddit = new Reddit(username, password);
                 authenticated = reddit.User != null;
             }
             catch (AuthenticationException)
             {
                 Console.WriteLine("Incorrect login.");
                 authenticated = false;
             }
         }
     }
     Console.Write("Create post? (y/n) [n]: ");
     var choice = Console.ReadLine();
     if (!string.IsNullOrEmpty(choice) && choice.ToLower()[0] == 'y')
     {
         Console.Write("Type a subreddit name: ");
         var subname = Console.ReadLine();
         var sub = reddit.GetSubreddit(subname);
         Console.WriteLine("Making test post");
         var post = sub.SubmitTextPost("RedditSharp test", "This is a test post sent from RedditSharp");
         Console.WriteLine("Submitted: {0}", post.Url);
     }
     else
     {
         Console.Write("Type a subreddit name: ");
         var subname = Console.ReadLine();
         var sub = reddit.GetSubreddit(subname);
         foreach (var post in sub.GetTop(FromTime.Week).Take(10))
             Console.WriteLine("\"{0}\" by {1}", post.Title, post.Author);
     }
     Console.ReadKey(true);
 }
 public VotableThing(Reddit reddit, IWebAgent webAgent, JToken json)
     : base(reddit, json)
 {
     Reddit = reddit;
     WebAgent = webAgent;
     JsonConvert.PopulateObject(json["data"].ToString(), this, Reddit.JsonSerializerSettings);
 }
 public void Launch()
 {
     List<String> title = new List<string>();
     List<String> urls = new List<string>();
     string body = "";
     var reddit = new Reddit();
     var user = reddit.LogIn("bot_wallpaper", "qwerty");
     var subreddit = reddit.GetSubreddit("/r/" + _wallpaperType);
     foreach (var post in subreddit.GetTop(FromTime.Week).Take(25))
     {
         if (_resolution == "null")
         {
             title.Add(post.Title);
             urls.Add(post.Url.ToString());
         }
         else if (post.Title.Contains(_resolution))
         {
             title.Add(post.Title);
             urls.Add(post.Url.ToString());
         }
     }
     for (int i = 0; i < title.Count; i++)
     {
         body += "[" + title[i] + "](" + urls[i] + ") \n\n";
     }
     reddit.ComposePrivateMessage("Wallpapers!", "#Here is the top wallpapers of this week in **/r/" + _wallpaperType + "** \n\n" + body + "\n\n I am a bot!", _username, "", "");
     Console.WriteLine("UserProcessor: Message sent to " + _username);
 }
Example #15
4
        public Comment(Reddit reddit, JToken json, IWebAgent webAgent, Thing sender)
            : base(reddit, webAgent, json)
        {
            var data = json["data"];
            JsonConvert.PopulateObject(data.ToString(), this, reddit.JsonSerializerSettings);
            Reddit = reddit;
            WebAgent = webAgent;

            // Parse sub comments
            // TODO: Consider deserializing this properly
            var subComments = new List<Comment>();
            if (data["replies"] != null && data["replies"].Any())
            {
                foreach (var comment in data["replies"]["data"]["children"])
                    subComments.Add(new Comment(reddit, comment, webAgent, sender));
            }
            Comments = subComments.ToArray();

            this.Parent = sender;

            // Handle Reddit's API being horrible
            if (data["context"] != null)
            {
                var context = data["context"].Value<string>();
                LinkId = context.Split('/')[4];
            }
        }
        protected override async Task StartService(CancellationToken cancellationToken)
        {
            RedditCredentials credentials = await CredentialGetter.GetCredentials().ConfigureAwait(false);

            _userName = credentials.Username;

            do
            {
                try
                {
                    _webAgent = new BotWebAgent(credentials.Username, credentials.Password, credentials.ClientId,
                                                credentials.ClientSecret, credentials.RedirectUrl);
                    _webAgent.RateLimiter = new RateLimitManager(RateLimitMode.Pace);
                    //This actually authenticates with reddit, that's why it's in a try/catch while loop
                    _client = new RedditSharp.Reddit(_webAgent, true);
                    break;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    await Task.Delay(TimeSpan.FromMinutes(2)).ConfigureAwait(false);

                    Logger.LogCritical(e.Message, e);
                }
            } while (true);

            StartReddit(cancellationToken);
            Logger.LogInformation($"{Platform} started on account '{_userName}'");

            await Task.Delay(-1, cancellationToken);
        }
Example #17
0
        public async Task <IDictionary <NewsThread, List <Post> > > GetPosts(string board, IEnumerable <NewsThread> threads)
        {
            using (var op = Begin("Get posts for {0} threads for board {1}", threads.Count(), board))
            {
                var source   = $"r.{board}";
                var webAgent = new BotWebAgent(Config("Reddit:User"), Config("Reddit:Pass"), Config("Reddit:ClientId"), Config("Reddit:ClientSecret"), "https://github.com/allisterb/Canaan");
                webAgent.UserAgent = "Canaan/0.1";
                var reddit      = new RedditSharp.Reddit(webAgent);
                var threadPosts = new Dictionary <NewsThread, List <Post> >();
                var redditPosts = new Dictionary <RedditSharp.Things.Post, List <Post> >();
                var r           = await reddit.GetSubredditAsync(board);

                await r.GetPosts(Subreddit.Sort.Top, 400).ForEachAsync(async(post, p) =>
                {
                    var thread = threads.SingleOrDefault(t => t.Id == post.Id + "-" + YY);
                    if (thread != null)
                    {
                        var comments = await post.GetCommentsAsync();
                        var posts    = comments.Select((c, cp) => GetPostsFromComment(board, cp, thread.Id, c, null)).SelectMany(x => x).ToList();
                        threadPosts.Add(thread, posts);
                    }
                });

                return(threadPosts);
            }
        }
Example #18
0
        public async Task <IEnumerable <NewsThread> > GetThreads(string board)
        {
            using (var op = Begin("Get threads for board {0}", board))
            {
                var source   = $"r.{board}";
                var webAgent = new BotWebAgent(Config("Reddit:User"), Config("Reddit:Pass"), Config("Reddit:ClientId"), Config("Reddit:ClientSecret"), "https://github.com/allisterb/Canaan");
                webAgent.UserAgent = "Canaan/0.1";
                var reddit  = new RedditSharp.Reddit(webAgent);
                var threads = new List <NewsThread>();
                var r       = await reddit.GetSubredditAsync(board);

                await r.GetPosts(Subreddit.Sort.Top, 400).ForEachAsync((post, p) =>
                {
                    var text          = post.IsSelfPost ? post.SelfText : string.Empty;
                    var html          = post.IsSelfPost ? post.SelfTextHtml : null;
                    NewsThread thread = new NewsThread()
                    {
                        Id            = post.Id + "-" + YY,
                        Source        = source,
                        Position      = p + 1,
                        Subject       = post.Title,
                        DatePublished = post.CreatedUTC,
                        User          = post.AuthorName,
                        Text          = text,
                        Links         = post.IsSelfPost ? WebScraper.ExtractLinksFromHtmlFrag(html) : new Link[] { new Link()
                                                                                                                   {
                                                                                                                       Uri = post.Url
                                                                                                                   } }
                    };
                    threads.Add(thread);
                });

                return(threads);
            }
        }
 public SubredditSettings(Subreddit subreddit, Reddit reddit, JObject json)
 {
     Subreddit = subreddit;
     Reddit = reddit;
     var data = json["data"];
     AllowAsDefault = data["default_set"].Value<bool>();
     Domain = data["domain"].Value<string>();
     Description = data["description"].Value<string>();
     Language = data["language"].Value<string>();
     Title = data["title"].Value<string>();
     WikiEditKarma = data["wiki_edit_karma"].Value<int>();
     UseDomainCss = data["domain_css"].Value<bool>();
     UseDomainSidebar = data["domain_sidebar"].Value<bool>();
     HeaderHoverText = data["header_hover_text"].Value<string>();
     NSFW = data["over_18"].Value<bool>();
     PublicDescription = data["public_description"].Value<string>();
     string wikiMode = data["wikimode"].Value<string>();
     switch (wikiMode)
     {
         case "disabled":
             WikiEditMode = WikiEditMode.None;
             break;
         case "modonly":
             WikiEditMode = WikiEditMode.Moderators;
             break;
         case "anyone":
             WikiEditMode = WikiEditMode.All;
             break;
     }
     string type = data["subreddit_type"].Value<string>();
     switch (type)
     {
         case "public":
             SubredditType = SubredditType.Public;
             break;
         case "private":
             SubredditType = SubredditType.Private;
             break;
         case "restricted":
             SubredditType = SubredditType.Restricted;
             break;
     }
     ShowThumbnails = data["show_media"].Value<bool>();
     WikiEditAge = data["wiki_edit_age"].Value<int>();
     string contentOptions = data["content_options"].Value<string>();
     switch (contentOptions)
     {
         case "any":
             ContentOptions = ContentOptions.All;
             break;
         case "link":
             ContentOptions = ContentOptions.LinkOnly;
             break;
         case "self":
             ContentOptions = ContentOptions.SelfOnly;
             break;
     }
 }
Example #20
0
        public async Task<List<ImageLink>> GetImgurLinksFromSubReddit(Reddit reddit, string sub, SearchRange searchRange, Sorting sortOrder, string outputPath, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();
            Subreddit subreddit = null;
            var links = new List<ImageLink>();

            if (!string.IsNullOrWhiteSpace(sub))
            {
                try
                {
                    subreddit = reddit.GetSubreddit(sub);
                    OutputLine($"{subreddit.Name}: Begining Search...");
                }
                catch (Exception e)
                {
                    OutputLine($"Error connecting to reddit: {e.Message}");
                    return links;
                }
            }

            if (_filter == null) _filter = string.Empty;

            var searchTo = DateTime.Now;
            var searchFrom = DateTime.Now;
            switch (searchRange)
            {
                case SearchRange.Today:
                    searchFrom = searchFrom.AddDays(-1);
                    break;
                case SearchRange.Week:
                    searchFrom = searchFrom.AddDays(-7);
                    break;
                case SearchRange.Fortnight:
                    searchFrom = searchFrom.AddDays(-14);
                    break;
                case SearchRange.Month:
                    searchFrom = searchFrom.AddMonths(-1);
                    break;
                case SearchRange.ThreeMonths:
                    searchFrom = searchFrom.AddMonths(-3);
                    break;
                case SearchRange.SixMonths:
                    searchFrom = searchFrom.AddMonths(-6);
                    break;
            }

            var search = !string.IsNullOrWhiteSpace(sub)
                ? searchRange == SearchRange.AllTime ? subreddit?.Search(_filter) : subreddit?.Search(searchFrom, searchTo, sortOrder)
                : reddit.Search<Post>(_filter);

            token.ThrowIfCancellationRequested();
            var listings = search?.GetEnumerator();

            links = CombineLinkLists(await GetImagesFromListing(reddit, listings, outputPath, token), links);

            return links;
        }
Example #21
0
 public SubredditImage(Reddit reddit, SubredditStyle subredditStyle,
     string cssLink, string name, IWebAgent webAgent)
 {
     Reddit = reddit;
     WebAgent = webAgent;
     SubredditStyle = subredditStyle;
     Name = name;
     CssLink = cssLink;
 }
        public void Register(IModularContainer container)
        {
            var appConfiguration = new AppConfiguration();

            // Register the logger for the application immediately
            container.RegisterLogger(appConfiguration.LogFilename);

            // Actual login is performed here.
            var botWebAgent = new BotWebAgent
                              (
                appConfiguration.DB4Username,
                appConfiguration.DB4Password,
                appConfiguration.DB4ClientId,
                appConfiguration.DB4ClientSecret,
                "http://localhost"
                              );

            var reddit    = new RedditSharp.Reddit(botWebAgent, true);
            var subreddit = reddit.GetSubredditAsync($"/r/{appConfiguration.SubredditName}").Result;

            // Register core / shared classes
            container.RegisterSingleton(appConfiguration);
            container.RegisterSingleton <AutoRestartManager>();
            container.RegisterSingleton(botWebAgent);
            container.RegisterSingleton(reddit);
            container.RegisterSingleton(subreddit);
            container.RegisterSingleton <RedditState>();

            // Register shared services
            container.Register <IDB4Queue, DB4MemoryQueue>();

            // Register persistence services
            container.Register <IDB4Repository, DB4Repository>();

            // Register Reddit Services
            container.Register <IActivityDispatcher, RedditSharpActivityDispatcher>();
            container.Register <IActivityMonitor, RedditSharpActivityMonitor>();
            container.Register <IRedditService, RedditSharpRedditService>();
            container.Register <ISubredditService, RedditSharpSubredditService>();

            // Register functionality implementations
            container.Register <IDB4QueueDispatcher, DB4QueueDispatcher>();
            container.Register <ICommentProcessor, CommentProcessor>();
            container.Register <ICommentBuilder, CommentBuilder>();
            container.Register <ICommentDetector, CommentDetector>();
            container.Register <ICommentValidator, CommentValidator>();
            container.Register <ICommentReplier, CommentReplier>();
            container.Register <IDeltaAwarder, DeltaAwarder>();
            container.Register <IDeltaboardEditor, DeltaboardEditor>();
            container.Register <IDeltaLogEditor, DeltaLogEditor>();
            container.Register <IHealthPinger, HealthPinger>();
            container.Register <IPostBuilder, PostBuilder>();
            container.Register <IPrivateMessageProcessor, PrivateMessageProcessor>();
            container.Register <IPrivateMessageHandlerFactory, PrivateMessageHandlerFactory>();
            container.Register <IStickyCommentEditor, StickyCommentEditor>();
            container.Register <IUserWikiEditor, UserWikiEditor>();
        }
 protected internal WikiPageSettings(Reddit reddit, JToken json, IWebAgent webAgent)
 {
     var editors = json["editors"].ToArray();
     Editors = editors.Select(x =>
     {
         return new RedditUser(reddit, x, webAgent);
     });
     JsonConvert.PopulateObject(json.ToString(), this, reddit.JsonSerializerSettings);
 }
Example #24
0
        public LogOnForm()
        {
            InitializeComponent();

            this.Icon = Properties.Resources.TrayIcon;

            LoginButton.Select();

            reddit = new Reddit();
        }
Example #25
0
 static void Main(string[] args)
 {
     var reddit = new Reddit();
     var user = reddit.LogIn("botusername", "botpassword");
     var timer = new System.Threading.Timer(
     e => ModInvites(),
     null,
     TimeSpan.Zero,
     TimeSpan.FromMinutes(5));
 }
Example #26
0
 public LicensingSmasher( LicensingSmasherSettings settings, Reddit reddit, string sub ) : this() {
     RedditClient = reddit;
     Subreddit = sub;
     TermsToMatch = settings.MatchTerms.ToList();
     KnownLicensers = settings.KnownLicensers;
     Settings = settings;
     RemovalFlair = settings.RemovalFlair;
     TermMatching = new Regex( string.Join( "|", settings.MatchTerms ), RegexOptions.IgnoreCase );
     LicenserMatching = new Regex( "^" + string.Join( "$|^", settings.KnownLicensers.Keys ) + "$", RegexOptions.IgnoreCase );
 }
Example #27
0
 public SubredditImage(Reddit reddit, SubredditStyle subreddit,
     string cssLink, string name, string url, IWebAgent webAgent)
     : this(reddit, subreddit, cssLink, name, webAgent)
 {
     Url = new Uri(url);
     // Handle legacy image urls
     // http://thumbs.reddit.com/FULLNAME_NUMBER.png
     int discarded;
     if (int.TryParse(url, out discarded))
         Url = new Uri(string.Format("http://thumbs.reddit.com/{0}_{1}.png", subreddit.Subreddit.FullName, url), UriKind.Absolute);
 }
Example #28
0
 public SubredditImage(Reddit reddit, SubredditStyle subreddit,
     string cssLink, string name, string url)
     : this(reddit, subreddit, cssLink, name)
 {
     Url = url;
     // Handle legacy image urls
     // http://thumbs.reddit.com/FULLNAME_NUMBER.png
     int discarded;
     if (int.TryParse(url, out discarded))
         Url = string.Format("http://thumbs.reddit.com/{0}_{1}.png", subreddit.Subreddit.FullName, url);
 }
Example #29
0
        public VotableThing(Reddit reddit, JToken json)
            : base(reddit, json)
        {
            Reddit = reddit;

            var data = json["data"];
            Upvotes = data["ups"].Value<int>();
            Downvotes = data["downs"].Value<int>();
            if (data["likes"] != null)
                Liked = data["likes"].Value<bool?>();
        }
Example #30
0
        public RAOATools(string modMailSub)
        {
            try
            {

            _reddit = new Reddit();
            Sub = _reddit.GetSubreddit(modMailSub);
            }
            catch (Exception)
            {
            }
        }
Example #31
0
 protected internal Subreddit(Reddit reddit, JToken json)
     : base(json)
 {
     Reddit = reddit;
     JsonConvert.PopulateObject(json["data"].ToString(), this, reddit.JsonSerializerSettings);
     Name = Url;
     if (Name.StartsWith("/r/"))
         Name = Name.Substring(3);
     if (Name.StartsWith("r/"))
         Name = Name.Substring(2);
     Name = Name.TrimEnd('/');
 }
Example #32
0
 public SubredditStyle(Reddit reddit, Subreddit subreddit, JToken json, IWebAgent webAgent) : this(reddit, subreddit, webAgent)
 {
     Images = new List<SubredditImage>();
     var data = json["data"];
     CSS = HttpUtility.HtmlDecode(data["stylesheet"].Value<string>());
     foreach (var image in data["images"])
     {
         Images.Add(new SubredditImage(
             Reddit, this, image["link"].Value<string>(),
             image["name"].Value<string>(), image["url"].Value<string>(), WebAgent));
     }
 }
 public RedditUser(Reddit reddit, JToken json)
 {
     var data = json["data"];
     Name = data["name"].Value<string>();
     Id = data["id"].Value<string>();
     HasGold = data["is_gold"].Value<bool>();
     IsModerator = data["is_mod"].Value<bool>();
     LinkKarma = data["link_karma"].Value<int>();
     CommentKarma = data["comment_karma"].Value<int>();
     Created = Reddit.UnixTimeStampToDateTime(data["created"].Value<double>());
     Reddit = reddit;
 }
Example #34
0
        static void Main()
        {
            bool dbug = Debugger.IsAttached;

            Console.Title = "BookHorseBot " + Constants.Version;
            List <string> ignoredUsers = C.Ignored.User;

            //Does all the dirty work of handling oAuth and tokens. Gives botclient authentication.
            AuthorizeFimFictionBot();
            Reddit reddit     = AuthorizeRedditBot();
            string redditName = reddit.User.FullName;

            Console.WriteLine(dbug ? "Debug detected. Running on test subreddit!" : "Running on Main subreddit!");
            Subreddit             subreddit     = reddit.GetSubreddit(dbug ? "bronyvillers" : "mylittlepony");
            IEnumerable <Comment> commentStream =
                subreddit.CommentStream.Where(c => !ignoredUsers.Contains(c.AuthorName.ToLower()) &&
                                              c.CreatedUTC >= DateTime.UtcNow.AddMinutes(-120) &&
                                              c.AuthorName.ToLower() != redditName.ToLower()
                                              );


            foreach (Comment comment in commentStream)
            {
                //Look for { and }, if none are found, skip!
                MatchCollection matches = Regex.Matches(comment.Body, @"(?<=\{)[^}]*(?=\})", RegexOptions.None);
                if (matches.Count == 0)
                {
                    continue;
                }
                //Check to see if we already replied to this comment.
                Comment qualifiedComment = reddit.GetComment(new Uri(comment.Shortlink));
                if (qualifiedComment.Comments.All(x => x.AuthorName != redditName))
                {
                    string         username = qualifiedComment.AuthorName.ToLower();
                    List <Command> commands = ExtractCommands(matches, username);
                    if (commands.Count > 0)
                    {
                        GetPostText(commands);
                        string postReplyBody = GeneratePostBody(commands);
                        try
                        {
                            comment.Reply(postReplyBody);
                            Console.WriteLine($"Reply posted to {comment.AuthorName}!");
                        }
                        catch (Exception e)
                        {
                            System.Console.WriteLine(e);
                        }
                    }
                }
            }
        }
Example #35
0
 public void ClearFlairTemplates(FlairType flairType)
 {
     var request = Reddit.CreatePost(ClearFlairTemplatesUrl);
     var stream = request.GetRequestStream();
     Reddit.WritePostBody(stream, new
     {
         flair_type = flairType == FlairType.Link ? "LINK_FLAIR" : "USER_FLAIR",
         uh = Reddit.User.Modhash,
         r = Name
     });
     stream.Close();
     var response = request.GetResponse();
     var data = Reddit.GetResponseString(response.GetResponseStream());
 }
Example #36
0
 public void RemoveModerator(string id)
 {
     var request = Reddit.CreatePost(LeaveModerationUrl);
     Reddit.WritePostBody(request.GetRequestStream(), new
     {
         api_type = "json",
         uh = Reddit.User.Modhash,
         r = Name,
         type = "moderator",
         id
     });
     var response = request.GetResponse();
     var result = Reddit.GetResponseString(response.GetResponseStream());
 }
Example #37
0
        public SubredditImage(Reddit reddit, SubredditStyle subreddit,
                              string cssLink, string name, string url, IWebAgent webAgent)
            : this(reddit, subreddit, cssLink, name, webAgent)
        {
            Url = new Uri(url);
            // Handle legacy image urls
            // http://thumbs.reddit.com/FULLNAME_NUMBER.png
            int discarded;

            if (int.TryParse(url, out discarded))
            {
                Url = new Uri(string.Format("http://thumbs.reddit.com/{0}_{1}.png", subreddit.Subreddit.FullName, url), UriKind.Absolute);
            }
        }
Example #38
0
        public static Subreddit GetRSlashAll(Reddit reddit)
        {
            var rSlashAll = new Subreddit
            {
                DisplayName = "/r/all",
                Title       = "/r/all",
                Url         = new Uri("/r/all", UriKind.Relative),
                Name        = "all",
                Reddit      = reddit,
                WebAgent    = reddit._webAgent
            };

            return(rSlashAll);
        }
Example #39
0
        public static Subreddit GetFrontPage(Reddit reddit)
        {
            var frontPage = new Subreddit
            {
                DisplayName = "Front Page",
                Title       = "reddit: the front page of the internet",
                Url         = new Uri("/", UriKind.Relative),
                Name        = "/",
                Reddit      = reddit,
                WebAgent    = reddit._webAgent
            };

            return(frontPage);
        }
Example #40
0
        public void Approve()
        {
            var request = Reddit.CreatePost(ApproveUrl);
            var stream  = request.GetRequestStream();

            Reddit.WritePostBody(stream, new
            {
                id = FullName,
                uh = Reddit.User.Modhash
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());
        }
Example #41
0
        static void Main(string[] args)
        {
            RedditSharp.Reddit reddit = new RedditSharp.Reddit();

            var user = reddit.GetUser("riseofbacon");

            var posts = user.GetPosts(RedditSharp.Things.Sort.Top).Where(p => p.SubredditName == "DestinyTheGame").Take(3);

            foreach (var post in posts)
            {
                Console.WriteLine(post.Title);
            }

            Console.ReadLine();
        }
Example #42
0
 protected internal Subreddit(Reddit reddit, JToken json) : base(json)
 {
     Reddit = reddit;
     JsonConvert.PopulateObject(json["data"].ToString(), this, reddit.JsonSerializerSettings);
     Name = Url;
     if (Name.StartsWith("/r/"))
     {
         Name = Name.Substring(3);
     }
     if (Name.StartsWith("r/"))
     {
         Name = Name.Substring(2);
     }
     Name = Name.TrimEnd('/');
 }
Example #43
0
 public void SetUserFlair(string user, string cssClass, string text)
 {
     var request = Reddit.CreatePost(SetUserFlairUrl);
     var stream = request.GetRequestStream();
     Reddit.WritePostBody(stream, new
     {
         css_class = cssClass,
         text = text,
         uh = Reddit.User.Modhash,
         r = Name,
         name = user
     });
     stream.Close();
     var response = request.GetResponse();
     var data = Reddit.GetResponseString(response.GetResponseStream());
 }
Example #44
0
        void InitializeRedditApi(IRedditCredentials creds)
        {
            if (creds.AreIncomplete())
            {
                throw new InvalidConfigurationException(
                          "You must fill in your Reddit information into the settings page first.");
            }

            string      userAgent   = creds.UserAgent ?? "News Sharer";
            BotWebAgent botWebAgent = new BotWebAgent(creds.Username,
                                                      creds.Password, creds.ClientId, creds.ClientSecret,
                                                      "https://localhost/");

            botWebAgent.UserAgent = $"{userAgent} (/u/{creds.Username})";
            RedditApi             = new RedditSharp.Reddit(botWebAgent, false);
        }
Example #45
0
 public void Unsubscribe()
 {
     if (Reddit.User == null)
         throw new AuthenticationException("No user logged in.");
     var request = Reddit.CreatePost(SubscribeUrl);
     var stream = request.GetRequestStream();
     Reddit.WritePostBody(stream, new
     {
         action = "unsub",
         sr = FullName,
         uh = Reddit.User.Modhash
     });
     stream.Close();
     var response = request.GetResponse();
     var data = Reddit.GetResponseString(response.GetResponseStream());
     // Discard results
 }
Example #46
0
        public void Delete()
        {
            var request = Reddit.CreatePost(DeleteImageUrl);
            var stream  = request.GetRequestStream();

            Reddit.WritePostBody(stream, new
            {
                img_name = Name,
                uh       = Reddit.User.Modhash,
                r        = SubredditStyle.Subreddit.Name
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());

            SubredditStyle.Images.Remove(this);
        }
Example #47
0
        public void Downvote()
        {
            var request = Reddit.CreatePost(VoteUrl);
            var stream  = request.GetRequestStream();

            Reddit.WritePostBody(stream, new
            {
                dir = -1,
                id  = FullName,
                uh  = Reddit.User.Modhash
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());

            Liked = false;
        }
Example #48
0
        public void Vote(VoteType type)
        {
            var request = Reddit.CreatePost(VoteUrl);
            var stream  = request.GetRequestStream();

            Reddit.WritePostBody(stream, new
            {
                dir = (int)type,
                id  = FullName,
                uh  = Reddit.User.Modhash
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());

            Liked = null;
        }
Example #49
0
        public Comment[] GetComments()
        {
            var comments = new List <Comment>();

            var request  = Reddit.CreateGet(string.Format(GetCommentsUrl, Id));
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());
            var json     = JArray.Parse(data);

            var postJson = json.Last()["data"]["children"];

            foreach (var comment in postJson)
            {
                comments.Add(new Comment(Reddit, comment));
            }

            return(comments.ToArray());
        }
Example #50
0
        public void Unhide()
        {
            if (Reddit.User == null)
            {
                throw new AuthenticationException("No user logged in.");
            }
            var request = Reddit.CreatePost(UnhideUrl);
            var stream  = request.GetRequestStream();

            Reddit.WritePostBody(stream, new
            {
                id = FullName,
                uh = Reddit.User.Modhash
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());
        }
Example #51
0
        public void UpdateCss()
        {
            var request = Reddit.CreatePost(UpdateCssUrl);
            var stream  = request.GetRequestStream();

            Reddit.WritePostBody(stream, new
            {
                op = "save",
                stylesheet_contents = CSS,
                uh       = Reddit.User.Modhash,
                api_type = "json",
                r        = Subreddit.Name
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());
            var json     = JToken.Parse(data);
        }
Example #52
0
        public static void PostBallot(Ballot ballot)
        {
            var motion = ballot.Motion;

            if (motion.PostUrl == "")
            {
                return;
            }


            var reddit = new RedditSharp.Reddit(Config.RedditUser, Config.RedditPass, true);
            var post   = reddit.GetPost(new Uri(motion.PostUrl));

            post.Comment("###" + ballot.Moderator.Name + "###" + Environment.NewLine
                         + "*****" + Environment.NewLine
                         + DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss") + @" \(UTC\) : *" + ballot.Choice.ToString() + "*" + Environment.NewLine
                         );
        }
Example #53
0
        public void Distinguish(DistinguishType distinguishType)
        {
            if (Reddit.User == null)
            {
                throw new AuthenticationException("No user logged in.");
            }
            var    request = Reddit.CreatePost(DistinguishUrl);
            var    stream  = request.GetRequestStream();
            string how;

            switch (distinguishType)
            {
            case DistinguishType.Admin:
                how = "admin";
                break;

            case DistinguishType.Moderator:
                how = "yes";
                break;

            case DistinguishType.None:
                how = "no";
                break;

            default:
                how = "special";
                break;
            }
            Reddit.WritePostBody(stream, new
            {
                how,
                id = Id,
                uh = Reddit.User.Modhash
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());
            var json     = JObject.Parse(data);

            if (json["jquery"].Count(i => i[0].Value <int>() == 11 && i[1].Value <int>() == 12) == 0)
            {
                throw new AuthenticationException("You are not permitted to distinguish this comment.");
            }
        }
Example #54
0
 public void AddFlairTemplate(string cssClass, FlairType flairType, string text, bool userEditable)
 {
     var request = Reddit.CreatePost(FlairTemplateUrl);
     var stream = request.GetRequestStream();
     Reddit.WritePostBody(stream, new
     {
         css_class = cssClass,
         flair_type = flairType == FlairType.Link ? "LINK_FLAIR" : "USER_FLAIR",
         text = text,
         text_editable = userEditable,
         uh = Reddit.User.Modhash,
         r = Name,
         api_type = "json"
     });
     stream.Close();
     var response = request.GetResponse();
     var data = Reddit.GetResponseString(response.GetResponseStream());
     var json = JToken.Parse(data);
 }
Example #55
0
        public void UploadImage(string name, ImageType imageType, byte[] file)
        {
            var request  = Reddit.CreatePost(UploadImageUrl);
            var formData = new MultipartFormBuilder(request);

            formData.AddDynamic(new
            {
                name,
                uh       = Reddit.User.Modhash,
                r        = Subreddit.Name,
                formid   = "image-upload",
                img_type = imageType == ImageType.PNG ? "png" : "jpg",
                upload   = ""
            });
            formData.AddFile("file", "foo.png", file, imageType == ImageType.PNG ? "image/png" : "image/jpeg");
            formData.Finish();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());
            // TODO: Detect errors
        }
Example #56
0
        public void Reply(string message)
        {
            if (Reddit.User == null)
            {
                throw new AuthenticationException("No user logged in.");
            }
            var request = Reddit.CreatePost(CommentUrl);
            var stream  = request.GetRequestStream();

            Reddit.WritePostBody(stream, new
            {
                text     = message,
                thing_id = FullName,
                uh       = Reddit.User.Modhash
            });
            stream.Close();
            var response = request.GetResponse();
            var data     = Reddit.GetResponseString(response.GetResponseStream());
            var json     = JObject.Parse(data);
        }
Example #57
0
        private static Reddit AuthorizeRedditBot()
        {
            BotWebAgent webAgent = new BotWebAgent(C.Reddit.Username,
                                                   C.Reddit.Password,
                                                   C.Reddit.ClientId,
                                                   C.Reddit.ClientSecret,
                                                   "https://google.com");

            Reddit reddit = new Reddit(webAgent, true);

            reddit.LogIn(C.Reddit.Username, C.Reddit.Password);
            string redditName = reddit.User.FullName;

            if (redditName.ToLower() == C.Reddit.Username.ToLower())
            {
                Console.WriteLine("Logged in!");
            }

            return(reddit);
        }
Example #58
0
        public Comment(Reddit reddit, JToken json)
            : base(reddit, json)
        {
            var data = json["data"];

            JsonConvert.PopulateObject(data.ToString(), this, reddit.JsonSerializerSettings);
            Reddit = reddit;

            // Parse sub comments
            // TODO: Consider deserializing this properly
            var subComments = new List <Comment>();

            if (data["replies"] != null && data["replies"].Any())
            {
                foreach (var comment in data["replies"]["data"]["children"])
                {
                    subComments.Add(new Comment(reddit, comment));
                }
            }
            Comments = subComments.ToArray();
        }
Example #59
0
        public PrivateMessage(Reddit reddit, JToken json) : base(json)
        {
            Reddit = reddit;
            JsonConvert.PopulateObject(json["data"].ToString(), this, reddit.JsonSerializerSettings);
            var data = json["data"];

            if (data["replies"] != null && data["replies"].Any())
            {
                if (data["replies"]["data"] != null)
                {
                    if (data["replies"]["data"]["children"] != null)
                    {
                        var replies = new List <PrivateMessage>();
                        foreach (var reply in data["replies"]["data"]["children"])
                        {
                            replies.Add(new PrivateMessage(reddit, reply));
                        }
                        Replies = replies.ToArray();
                    }
                }
            }
        }
        static int Main(string[] args)
        {
            Reddit reddit = new Reddit();
            Login(reddit);

            Subreddit subreddit = GetFrontPage(reddit);
            IEnumerable<Post> topPosts = GetTopPosts(subreddit);
            Subreddit subredditToPostTo = reddit.GetSubreddit("readability");

            foreach (Post post in topPosts)
            {
                StringBuilder commentToPost = new StringBuilder(String.Format("Thread link: http://www.reddit.com/{0}\n\n***\n\n", post.Id));
                List<Comment> topComments = GetTopComments(post);

                foreach (Comment comment in topComments)
                {
                    commentToPost.Append(String.Format("\"{0}\"\n\n", comment.Body));

                    // Removes formatting so that linguistic analysis works properly
                    string commentText = comment.Body;
                    RemoveFormatting(ref commentText);

                    LinguisticAnalysis analysis = new LinguisticAnalysis(commentText);
                    commentToPost.Append(String.Format("`Words: {0}`\n\n`Characters: {1}`\n\n`Sentences: {2}`\n\n`Syllables: {3}`\n\n`% Hard Words: {4}`\n\n", analysis.GetWords(), analysis.GetCharacters(), analysis.GetSentences(), analysis.GetSyllables(), analysis.GetPercentageHardWords()));
                    ReadabilityAnalysis(analysis, commentToPost);
                    commentToPost.Append("***\n\n");
                }

                PostRedditThread(subredditToPostTo, post.Title, commentToPost);
            }

            Console.WriteLine(LOG_SUCCESSFUL_RUN);
            Console.Read();     // Remove later
            return 1;
        }