示例#1
0
 public void GetNewToken()
 {
     try {
         var ap = new AuthProvider( _clientId, _clientSecret, _redirectUri, _webAgent );
         AccessToken = ap.GetOAuthToken( _uname, _pass );
         _webAgent.AccessToken = AccessToken;
     }
     catch { //TODO error handling
         _timerState.TimerRunning = false;
         throw;
     }
 }
示例#2
0
        static void Main(string[] args)
        {
            var auth = new AuthProvider(_clientId, _clientSecret, _redirectUrl);

            var _authToken = auth.GetOAuthToken("curiosity_auto", "reddit18");
            
            var reddit = new Reddit(_authToken);
            
            var limit = reddit.RateLimit;
            
            var subreddit = reddit.GetSubreddit("/r/gaming");

            foreach (var post in subreddit.New.Take(250))
            {
                if (post.Title.ToLower().Contains("halo"))
                {
                    if (post.Liked.HasValue && post.Liked.Value)
                        continue;
                    post.Upvote();
                    post.Comment("hell yes");
                }
            }
        }
示例#3
0
        /// <summary>
        /// The entry point of the program, where the program control starts and ends.
        /// </summary>
        /// <param name="args">The command-line arguments.</param>
        public static void Main(string[] args)
        {
            try
             {
            //-user HFYBot -pass password -sub HFY -maxcount 500

            string username = "";
            string password = "";
            string subname = "HFY"; // GetSubreddit will remove /r/ from the front anyways. Lowercase doesn't matter
            int maxCount = 500;
            int maxDays = 60;
            bool fastcutoff = false;
            bool reallypost = false;
            bool verbose = false;
            bool quiet = false;
            bool showhelp = false;
            string oAuthClientID = "";
            string oAuthClientSecret = "";

            var optsParse = new NDesk.Options.OptionSet()
             {
            {"user="******"{username} of the account to run this bot under (required).", v => {if (v != null) username=v;} },
            {"pass="******"{password} for the account to run this bot under (required).", v => {if (v != null) password=v;} },
            {"oauthid=", "{client id} as generated by https://www.reddit.com/prefs/apps (optional).", v => {if (v != null) oAuthClientID=v;} },
            {"oauthsecret=", "{client secret} as generated by https://www.reddit.com/prefs/apps (optional).", v => {if (v != null) oAuthClientSecret=v;} },
            {"sub=", "{subbedit} to process (optional, defaults to HFY).", v => {if (v != null) subname=v;} },
            {"maxcount=", "{max} # of posts to scan (optional, defaults to 500).", (int v) =>  maxCount=v },
            {"maxdays=", "{max} # of days to scan into the past for unprocessed posts (optional, defaults to 60).", (int v) =>  maxDays=v },
            {"fastcutoff", "if set, then only considers posts made after the last HFY bot comment.", v => { if (v != null) fastcutoff=true; }  },
            {"reallypost", "if set, the posts are actually made; if not set, then dumped to console.", v => { if (v != null) reallypost=true; }  },
            {"v|verbose", "if set, then progress lines are displayed as the posts and comments are built.", v => { if (v != null) verbose=true; }  },
            {"q|quiet", "if set, then as little output as possible is generated.", v => { if (v != null) quiet=true; }  },
            {"h|help", "show this help.", v => { if (v != null) showhelp=true; }  },
             };

            try
            {
               List<string> leftovers = optsParse.Parse(args);
            }
            catch (NDesk.Options.OptionException e)
            {
               Console.WriteLine(e.Message);
               Console.WriteLine("Try 'hfybot --help' for more information.");
               return;
            }

            if (showhelp)
            {
               optsParse.WriteOptionDescriptions(Console.Out);
               return;
            }

            if (username == "" || password == "")
            {
               Console.WriteLine("Username and password must be supplied.");
               System.Environment.Exit(0);
            }

            if (subname == "")
            {
               Console.WriteLine("Subbedit name must be supplied.");
               System.Environment.Exit(0);
            }

            if (maxCount < 1 || maxCount > 500)
               maxCount = 500;   // enforce default

            if (maxDays < 1 || maxDays > 90)
               maxDays = 60;   // enforce default

            if (verbose)
               quiet = false;

            if (oAuthClientID != "" && oAuthClientSecret != "")
            {
               // Log in via oauth (which still requires the username and password, but also a secondary username and password called a client id and secret)
               if (!quiet)
                  Console.WriteLine("Logging in user {0} via OAUTH2 protocol...", username);

               try
               {
                  authProvider = new AuthProvider(oAuthClientID, oAuthClientSecret, "http://reddit.com");
                  authTokenString = authProvider.GetOAuthToken(username, password);
                  if (authTokenString == "")
                  {
                     Console.WriteLine("Login for user {0} (user:{1}) refused, empty token returned.", oAuthClientID, username);
                     System.Environment.Exit(0);
                  }
                  if (verbose)
                     Console.WriteLine("Auth token is {0}", authTokenString);
                  reddit = new Reddit(authTokenString);
               }
               catch (System.Security.Authentication.AuthenticationException)
               {
                  Console.WriteLine("Login for user {0} (user:{1}) refused.", oAuthClientID, username);
                  System.Environment.Exit(0);
               }
               catch (System.Net.WebException we)
               {
                  Console.WriteLine("Network error when connecting to reddit. Please check your connection. {0}",we.ToString());
                  System.Environment.Exit(0);
               }
            }
            else
            {
               // Log in without oauth in a traditional mode.
               if (!quiet)
                  Console.WriteLine("Logging in user {0}...", username);

               try
               {
                  reddit = new Reddit(username, password);
               }
               catch (System.Security.Authentication.AuthenticationException)
               {
                  Console.WriteLine("Login for user {0} refused.", username);
                  System.Environment.Exit(0);
               }
               catch (System.Net.WebException we)
               {
                  Console.WriteLine("Network error when connecting to reddit. Please check your connection. {0}",we.ToString());
                  System.Environment.Exit(0);
               }
            }

            reddit.RateLimit = WebAgent.RateLimitMode.Burst;

            if (!quiet)
               Console.WriteLine("Login successful. Getting sub {0}...", subname);

            RedditSharp.Things.Subreddit subit = reddit.GetSubreddit(subname);
            if (subit == null)
            {
               Console.WriteLine("Subbedit {0} does not exist.", subname);
               System.Environment.Exit(0);
            }

            if (!quiet)
            {
               Console.WriteLine("Processing posts and creating new comments as needed (maxcount={0}, maxdays={1}).", maxCount, maxDays);
               if (!reallypost)
                  Console.WriteLine("NOTE: running in TEST mode only, will not actually make comments.");
            }

            ProcessNewPosts prm = new ProcessNewPosts(reddit, subit);
            prm.Run(maxCount, maxDays, fastcutoff, reallypost, verbose);
             }
             catch (Exception e)
             {
            Console.WriteLine("General exception: {0}", e.ToString());
            System.Environment.Exit(0);
             }
        }