reddit_bot 1.6.5 → 1.6.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: afe3593cb266098860316251a4126efdccced3c0
4
- data.tar.gz: bcf920ee2ccf254f5f84aeef64c5a5471400165d
3
+ metadata.gz: fb0c92530c0139f3abcf98680613b118ab21eeb8
4
+ data.tar.gz: 68ff542161f8ea0e73bbeb0ca3ecd2a3fef6d618
5
5
  SHA512:
6
- metadata.gz: 00c876b7cde3299b2ec06ac5c8f7a34e2299a651ac91c7815d168e547c220c3c4a6317a4eab544c2e81656263ce9d2cf7687dcec062f90952a20d8092e2a6185
7
- data.tar.gz: c74d1fac23dafb7ed17165875b164ceec1f2cde7f21f1defc590661f2f6de86c1ec4b446e69320d2dce72491b42a4081cda2b0e5d8d5e979537697de7d8cf6f0
6
+ metadata.gz: 6f162ba96a47e7ea121f26dc2a1e4a79a23c5448355fdf931b6c518216881758aa527880957e608f8b356a1340dd00999154440678105517b44540d893e4e134
7
+ data.tar.gz: 9143a8d2ba251a0871097ab726eab1fdae48449a678363ae1c58c73a98baa204cb7f12d5b325bdc4d87a561f7bbf8e2c100540b96dee32681f8ed82b7034148b
data/README.md CHANGED
@@ -74,6 +74,7 @@ You obviously can't run these examples as is, because they use some dependencies
74
74
  :client_secret: Fqo.....................AFI
75
75
  :password: mybotpassword
76
76
  :login: MyBotUsername
77
+ # :user_agent: optional_custom_useragent_to_bypass_reddit_spam_protection
77
78
 
78
79
  To update the gem version in Gemfile.lock when using Gemfile like this: `gem "reddit_bot", "~>1.1.0"`, do the:
79
80
 
@@ -1,3 +1,3 @@
1
1
  module RedditBot
2
- VERSION = "1.6.5" # :nodoc:
2
+ VERSION = "1.6.6" # :nodoc:
3
3
  end
data/lib/reddit_bot.rb CHANGED
@@ -17,8 +17,7 @@ module RedditBot
17
17
  # [secrets] +Hash+ with keys :client_id, :client_secret, :password: and :login
18
18
  # [kwargs] keyword params may include :subreddit for clever methods
19
19
  def initialize secrets, **kwargs
20
- @secrets = secrets.values_at *%i{ client_id client_secret password login }
21
- @name = secrets[:login]
20
+ @name, @secret_password, @user_agent, *@secret_auth = secrets.values_at *%i{ login password user_agent client_id client_secret }
22
21
  # @ignore_captcha = true
23
22
  # @ignore_captcha = kwargs[:ignore_captcha] if kwargs.has_key?(:ignore_captcha)
24
23
  @subreddit = kwargs[:subreddit]
@@ -30,11 +29,12 @@ module RedditBot
30
29
  def json mtd, path, _form = []
31
30
  form = Hash[_form]
32
31
  response = JSON.parse resp_with_token mtd, path, form.merge({api_type: "json"})
33
- if response.is_a?(Hash) && response["json"] # for example, flairlist.json and {"error": 403} do not have it
34
- puts "ERROR OCCURED on #{[mtd, path]}" unless response["json"]["errors"].empty?
35
- # pp response["json"]
36
- response["json"]["errors"].each do |error, description|
37
- puts "error: #{[error, description]}"
32
+ if response.is_a?(Hash) && response["json"] && # for example, flairlist.json and {"error": 403} do not have it
33
+ !response["json"]["errors"].empty?
34
+ puts "ERROR OCCURED on #{[mtd, path]}"
35
+ fail "unknown how to handle multiple errors" if 1 < response["json"]["errors"].size
36
+ puts "error: #{response["json"]["errors"]}"
37
+ error, description = response["json"]["errors"].first
38
38
  case error
39
39
  when "ALREADY_SUB" ; puts "was rejected by moderator if you didn't see in dups"
40
40
  # when "BAD_CAPTCHA" ; update_captcha
@@ -42,9 +42,13 @@ module RedditBot
42
42
  # iden: @iden_and_captcha[0],
43
43
  # captcha: @iden_and_captcha[1],
44
44
  # } ) unless @ignore_captcha
45
+ when "RATELIMIT"
46
+ fail error unless description[/\Ayou are doing that too much\. try again in (\d) minutes\.\z/]
47
+ puts "retrying in #{$1.to_i + 1} minutes"
48
+ sleep ($1.to_i + 1) * 60
49
+ return json mtd, path, _form
45
50
  else ; fail error
46
51
  end
47
- end
48
52
  end
49
53
  response
50
54
  end
@@ -163,16 +167,17 @@ module RedditBot
163
167
 
164
168
  def token
165
169
  return @token_cached if @token_cached
170
+ # TODO handle with nive error message if we get 403 -- it's probably because of bad user agent
166
171
  response = JSON.parse reddit_resp :post,
167
172
  "https://www.reddit.com/api/v1/access_token", {
168
173
  grant_type: "password",
169
- username: @username = @secrets[3],
170
- password: @secrets[2],
174
+ username: @name,
175
+ password: @secret_password,
171
176
  }, {
172
- "User-Agent" => "bot/#{@username}/#{RedditBot::VERSION} by /u/nakilon",
173
- }, [@secrets[0], @secrets[1]]
177
+ "User-Agent" => "bot/#{@user_agent || @name}/#{RedditBot::VERSION} by /u/nakilon",
178
+ }, @secret_auth
174
179
  unless @token_cached = response["access_token"]
175
- fail "bot #{@username} isn't a 'developer' of app at https://www.reddit.com/prefs/apps/" if response == {"error"=>"invalid_grant"}
180
+ fail "bot #{@name} isn't a 'developer' of app at https://www.reddit.com/prefs/apps/" if response == {"error"=>"invalid_grant"}
176
181
  fail response.inspect
177
182
  end
178
183
  puts "new token is: #{@token_cached}"
@@ -195,10 +200,10 @@ module RedditBot
195
200
  begin
196
201
  reddit_resp mtd, "https://oauth.reddit.com" + path, form, {
197
202
  "Authorization" => "bearer #{token}",
198
- "User-Agent" => "bot/#{@username}/#{RedditBot::VERSION} by /u/nakilon",
203
+ "User-Agent" => "bot/#{@user_agent || @name}/#{RedditBot::VERSION} by /u/nakilon",
199
204
  }
200
205
  rescue NetHTTPUtils::Error => e
201
- # sleep 5
206
+ sleep 5
202
207
  raise unless e.code == 401
203
208
  @token_cached = nil
204
209
  retry
@@ -206,9 +211,9 @@ module RedditBot
206
211
  end
207
212
 
208
213
  def reddit_resp *args
209
- mtd, url, form, headers, base_auth = *args
214
+ mtd, url, form, headers, basic_auth = *args
210
215
  begin
211
- NetHTTPUtils.request_data(url, mtd, form: form, header: headers, auth: base_auth) do |response|
216
+ NetHTTPUtils.request_data(url, mtd, form: form, header: headers, auth: basic_auth) do |response|
212
217
  next unless remaining = response.to_hash["x-ratelimit-remaining"]
213
218
  if Gem::Platform.local.os == "darwin"
214
219
  puts %w{
data/reddit_bot.gemspec CHANGED
@@ -15,6 +15,7 @@ Gem::Specification.new do |spec|
15
15
  # spec.require_paths = ["lib"]
16
16
 
17
17
  spec.add_runtime_dependency "json"
18
+ spec.add_runtime_dependency "nethttputils", "~> 0.2.4.1"
18
19
  # spec.add_development_dependency "bundler", "~> 1.11"
19
20
  # spec.add_development_dependency "rake", "~> 10.0"
20
21
  # spec.add_development_dependency "rspec", "~> 3.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reddit_bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.5
4
+ version: 1.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Maslov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-13 00:00:00.000000000 Z
11
+ date: 2018-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nethttputils
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.4.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.4.1
27
41
  description: better than PRAW
28
42
  email:
29
43
  - nakilon@gmail.com