reddit_bot 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -7
  3. data/examples/boilerplate.rb +2 -2
  4. data/examples/councilofricks/Gemfile +2 -2
  5. data/examples/councilofricks/Gemfile.lock +8 -7
  6. data/examples/councilofricks/main.rb +24 -13
  7. data/examples/cptflairbot3/.bashrc +1 -0
  8. data/examples/cptflairbot3/Code.gs +13 -0
  9. data/examples/cptflairbot3/Gemfile +2 -1
  10. data/examples/cptflairbot3/Gemfile.lock +64 -4
  11. data/examples/cptflairbot3/app.js +40 -0
  12. data/examples/cptflairbot3/casual/casualpokemontrades.htm +910 -0
  13. data/examples/cptflairbot3/casual/script.js +55 -0
  14. data/examples/cptflairbot3/casual/style.css +1099 -0
  15. data/examples/cptflairbot3/log.htm +1 -0
  16. data/examples/cptflairbot3/main.rb +31 -10
  17. data/examples/cptflairbot3/package.json +6 -0
  18. data/examples/cptflairbot3/pubsub.rb +30 -0
  19. data/examples/cptflairbot3/update_gas_hook_secret.rb +4 -0
  20. data/examples/devflairbot/Gemfile +1 -1
  21. data/examples/devflairbot/Gemfile.lock +3 -3
  22. data/examples/devflairbot/main.rb +1 -1
  23. data/examples/largeimages/Gemfile +5 -0
  24. data/examples/largeimages/Gemfile.lock +26 -0
  25. data/examples/largeimages/main.rb +183 -0
  26. data/examples/mlgtv/Gemfile +1 -1
  27. data/examples/mlgtv/Gemfile.lock +3 -3
  28. data/examples/mlgtv/channels.txt +110 -0
  29. data/examples/mlgtv/main.rb +67 -12
  30. data/examples/realtimeww2/Gemfile +4 -0
  31. data/examples/realtimeww2/Gemfile.lock +23 -0
  32. data/examples/realtimeww2/main.rb +82 -0
  33. data/examples/sexypizza/Gemfile +1 -1
  34. data/examples/sexypizza/Gemfile.lock +4 -4
  35. data/examples/wallpaper/Gemfile +1 -1
  36. data/examples/wallpaper/Gemfile.lock +3 -3
  37. data/examples/wallpaper/main.rb +1 -1
  38. data/examples/yayornay/Gemfile +1 -5
  39. data/examples/yayornay/Gemfile.lock +3 -3
  40. data/examples/yayornay/main.rb +1 -1
  41. data/lib/reddit_bot/version.rb +3 -0
  42. data/lib/reddit_bot.rb +3 -7
  43. data/reddit_bot.gemspec +1 -4
  44. metadata +20 -2
@@ -0,0 +1,82 @@
1
+ require_relative "../boilerplate"
2
+
3
+ require "nethttputils"
4
+ TWITTER_ACCESS_TOKEN = JSON.load(
5
+ NetHTTPUtils.request_data "https://api.twitter.com/oauth2/token", :post,
6
+ auth: File.read("twitter.token").split,
7
+ form: {grant_type: :client_credentials}
8
+ )["access_token"]
9
+
10
+ SUBREDDIT = "RealTimeWW2"
11
+ BOT = RedditBot::Bot.new YAML.load(File.read "secrets.yaml"), subreddit: SUBREDDIT
12
+
13
+ TWITTER = "RealTimeWWII"
14
+ tweet2text = lambda do |tweet|
15
+ text = ""
16
+ contains_media = false
17
+ up = ->s{ s.split.map{ |w| "^#{w}" }.join " " }
18
+ if tweet["entities"]["media"]
19
+ contains_media = true
20
+ tweet["entities"]["media"].each_with_index do |media, i|
21
+ text.concat "* [Image #{i + 1}](#{media["media_url_https"]})\n\n"
22
+ end
23
+ end
24
+ text.concat "^- #{
25
+ up[tweet["user"]["name"]]
26
+ } [^\\(@#{TWITTER}\\)](https://twitter.com/#{TWITTER}) ^| [#{
27
+ up[Date.parse(tweet["created_at"]).strftime "%B %-d, %Y"]
28
+ }](https://twitter.com/#{TWITTER}/status/#{tweet["id"]})"
29
+ [text, contains_media]
30
+ end
31
+ test = "* [Image 1](https://pbs.twimg.com/media/DJHq71BXYAA6KJ0.jpg)\n\n^- ^WW2 ^Tweets ^from ^1939 [^\\(@#{TWITTER}\\)](https://twitter.com/#{TWITTER}) ^| [^September ^7, ^2017](https://twitter.com/#{TWITTER}/status/905764294687633408)"
32
+ unless test == temp = ( tweet2text.call JSON.load NetHTTPUtils.request_data(
33
+ "https://api.twitter.com/1.1/statuses/show.json?id=905764294687633408&tweet_mode=extended",
34
+ header: { Authorization: "Bearer #{TWITTER_ACCESS_TOKEN}" }
35
+ ) ).first
36
+ puts "expected:\n#{test.inspect}"
37
+ puts "got:\n#{temp.inspect}"
38
+ abort "FORMATTING ERROR"
39
+ end
40
+ abort "OK" if ENV["TEST"]
41
+
42
+ require "cgi"
43
+ loop do
44
+ id = BOT.new_posts.find do |post|
45
+ /\(https:\/\/twitter\.com\/#{TWITTER}\/status\/(\d{18,})\)/i =~ post["selftext"] and break $1
46
+ end.to_i
47
+ fail "no tweets found in subreddit" if id.zero? unless %w{ RealTimeWW2_TEST }.include? SUBREDDIT
48
+
49
+ fail unless flair = BOT.json(:get, "/r/#{SUBREDDIT}/api/link_flair").find do |flair|
50
+ flair["text"] == "Contains Media"
51
+ end
52
+
53
+ JSON.load( NetHTTPUtils.request_data(
54
+ "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=#{TWITTER}&count=200&tweet_mode=extended",
55
+ header: { Authorization: "Bearer #{TWITTER_ACCESS_TOKEN}" }
56
+ ) do |res|
57
+ next unless res.key? "x-rate-limit-remaining"
58
+ remaining = res.fetch("x-rate-limit-remaining").to_i
59
+ next if 100 < remaining
60
+ t = (res.fetch("x-rate-limit-reset").to_i - Time.now.to_i + 1).fdiv remaining
61
+ puts "sleep #{t}"
62
+ sleep t
63
+ end ).reverse_each do |tweet|
64
+ next if tweet["id"] <= id
65
+ # next unless tweet["id"] == 905724018996772865 # two media files
66
+ # tweet["entities"]["urls"].first["url"],
67
+ text, contains_media = tweet2text[tweet]
68
+ result = BOT.json :post, "/api/submit", {
69
+ sr: SUBREDDIT,
70
+ kind: "self",
71
+ title: CGI::unescapeHTML(tweet["full_text"]).sub(/ https:\/\/t\.co\/[0-9a-zA-Z]{10}\z/, ""),
72
+ text: text,
73
+ }.tap{ |h| h.merge!({ flair_id: flair["id"] }) if contains_media }
74
+ pp result
75
+ next if result["json"]["errors"].empty?
76
+ fail unless result["json"]["errors"].map(&:first) == ["ALREADY_SUB"]
77
+ puts "ALREADY_SUB error for #{tweet["id"]}"
78
+ end
79
+
80
+ puts "END LOOP #{Time.now}"
81
+ sleep 300
82
+ end
@@ -1,3 +1,3 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "reddit_bot", "~>1.1.5"
3
+ gem "reddit_bot", "~>1.3.0"
@@ -1,15 +1,15 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- json (1.8.3)
5
- reddit_bot (1.1.5)
4
+ json (2.1.0)
5
+ reddit_bot (1.3.0)
6
6
  json
7
7
 
8
8
  PLATFORMS
9
9
  ruby
10
10
 
11
11
  DEPENDENCIES
12
- reddit_bot (~> 1.1.5)
12
+ reddit_bot (~> 1.3.0)
13
13
 
14
14
  BUNDLED WITH
15
- 1.11.2
15
+ 1.13.1
@@ -1,5 +1,5 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gem "fastimage", "1.7.0"
4
- gem "reddit_bot", "~>1.1.5"
4
+ gem "reddit_bot", "~>1.3.0"
5
5
  gem "net_http_utils", ?0, gist: "97549ceb58d21e1fcbc0e6cdaf92fce8"
@@ -10,8 +10,8 @@ GEM
10
10
  addressable (2.3.8)
11
11
  fastimage (1.7.0)
12
12
  addressable (~> 2.3, >= 2.3.5)
13
- json (2.0.2)
14
- reddit_bot (1.1.8)
13
+ json (2.1.0)
14
+ reddit_bot (1.3.0)
15
15
  json
16
16
 
17
17
  PLATFORMS
@@ -20,7 +20,7 @@ PLATFORMS
20
20
  DEPENDENCIES
21
21
  fastimage (= 1.7.0)
22
22
  net_http_utils (= 0)!
23
- reddit_bot (~> 1.1.5)
23
+ reddit_bot (~> 1.3.0)
24
24
 
25
25
  BUNDLED WITH
26
26
  1.13.1
@@ -1,6 +1,6 @@
1
1
  require_relative "../boilerplate"
2
2
 
3
- BOT = RedditBot::Bot.new YAML.load(File.read "secrets.yaml"), ignore_captcha: true
3
+ BOT = RedditBot::Bot.new YAML.load File.read "secrets.yaml"
4
4
  SUBREDDIT = "wallpaper"
5
5
 
6
6
  if Gem::Platform.local.os == "darwin"
@@ -1,7 +1,3 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- if ENV["DEV"]
4
- gem "reddit_bot", path: "../.."
5
- else
6
- gem "reddit_bot", "~>1.1.0"
7
- end
3
+ gem "reddit_bot", "~>1.3.0"
@@ -1,15 +1,15 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- json (2.0.2)
5
- reddit_bot (1.1.8)
4
+ json (2.1.0)
5
+ reddit_bot (1.3.0)
6
6
  json
7
7
 
8
8
  PLATFORMS
9
9
  ruby
10
10
 
11
11
  DEPENDENCIES
12
- reddit_bot (~> 1.1.0)
12
+ reddit_bot (~> 1.3.0)
13
13
 
14
14
  BUNDLED WITH
15
15
  1.13.1
@@ -1,7 +1,7 @@
1
1
  require_relative "../boilerplate"
2
2
 
3
3
  SUBREDDIT = "yayornay"
4
- BOT = RedditBot::Bot.new YAML.load(File.read "secrets.yaml"), ignore_captcha: true, subreddit: SUBREDDIT
4
+ BOT = RedditBot::Bot.new YAML.load(File.read "secrets.yaml"), subreddit: SUBREDDIT
5
5
 
6
6
  loop do
7
7
  Hearthbeat.beat "u_gotfan247_r_yayornay", 310 unless Gem::Platform.local.os == "darwin"
@@ -0,0 +1,3 @@
1
+ module RedditBot
2
+ VERSION = "1.3.1" # :nodoc:
3
+ end
data/lib/reddit_bot.rb CHANGED
@@ -1,15 +1,12 @@
1
1
  STDOUT.sync = true
2
-
3
2
  require "pp"
4
3
 
5
4
  require "net/http"
6
5
  require "openssl"
7
6
  require "json"
8
7
 
9
-
8
+ require_relative "reddit_bot/version"
10
9
  module RedditBot
11
- VERSION = "1.3.0" # :nodoc:
12
-
13
10
  class Bot
14
11
 
15
12
  # bot's Reddit username; set via constructor parameter secrets[:login]
@@ -117,7 +114,7 @@ module RedditBot
117
114
  result = cache.call(args){ json *args }
118
115
  fail if result.keys != %w{ kind data }
119
116
  fail if result["kind"] != "Listing"
120
- fail if result["data"].keys != %w{ modhash children after before }
117
+ fail if result["data"].keys != %w{ modhash whitelist_status children after before }
121
118
  result["data"]["children"].each do |post|
122
119
  fail "unknown type post['kind']: #{post["kind"]}" unless post["kind"] == "t3"
123
120
  e << post["data"]
@@ -170,7 +167,7 @@ module RedditBot
170
167
  "User-Agent" => "bot/#{@username}/0.0.0 by /u/nakilon",
171
168
  }, [@secrets[0], @secrets[1]]
172
169
  unless @token_cached = response["access_token"]
173
- fail "bot isn't a 'developer' of app at https://www.reddit.com/prefs/apps/" if response == {"error"=>"invalid_grant"}
170
+ fail "bot #{@username} isn't a 'developer' of app at https://www.reddit.com/prefs/apps/" if response == {"error"=>"invalid_grant"}
174
171
  fail response.inspect
175
172
  end
176
173
  puts "new token is: #{@token_cached}"
@@ -289,5 +286,4 @@ module RedditBot
289
286
  end
290
287
 
291
288
  end
292
-
293
289
  end
data/reddit_bot.gemspec CHANGED
@@ -1,7 +1,4 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "reddit_bot"
1
+ require_relative "lib/reddit_bot/version"
5
2
 
6
3
  Gem::Specification.new do |spec|
7
4
  spec.name = "reddit_bot"
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.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Maslov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-04 00:00:00.000000000 Z
11
+ date: 2017-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -40,25 +40,42 @@ files:
40
40
  - examples/councilofricks/Gemfile
41
41
  - examples/councilofricks/Gemfile.lock
42
42
  - examples/councilofricks/main.rb
43
+ - examples/cptflairbot3/.bashrc
44
+ - examples/cptflairbot3/Code.gs
43
45
  - examples/cptflairbot3/Gemfile
44
46
  - examples/cptflairbot3/Gemfile.lock
47
+ - examples/cptflairbot3/app.js
48
+ - examples/cptflairbot3/casual/casualpokemontrades.htm
49
+ - examples/cptflairbot3/casual/script.js
50
+ - examples/cptflairbot3/casual/style.css
51
+ - examples/cptflairbot3/log.htm
45
52
  - examples/cptflairbot3/main.rb
53
+ - examples/cptflairbot3/package.json
54
+ - examples/cptflairbot3/pubsub.rb
55
+ - examples/cptflairbot3/update_gas_hook_secret.rb
46
56
  - examples/devflairbot/Gemfile
47
57
  - examples/devflairbot/Gemfile.lock
48
58
  - examples/devflairbot/main.rb
49
59
  - examples/iostroubleshooting/Gemfile
50
60
  - examples/iostroubleshooting/Gemfile.lock
51
61
  - examples/iostroubleshooting/main.rb
62
+ - examples/largeimages/Gemfile
63
+ - examples/largeimages/Gemfile.lock
64
+ - examples/largeimages/main.rb
52
65
  - examples/largeimagesreview/Gemfile
53
66
  - examples/largeimagesreview/Gemfile.lock
54
67
  - examples/largeimagesreview/main.rb
55
68
  - examples/mlgtv/Gemfile
56
69
  - examples/mlgtv/Gemfile.lock
70
+ - examples/mlgtv/channels.txt
57
71
  - examples/mlgtv/main.rb
58
72
  - examples/net_http_utils.rb
59
73
  - examples/oneplus/Gemfile
60
74
  - examples/oneplus/Gemfile.lock
61
75
  - examples/oneplus/main.rb
76
+ - examples/realtimeww2/Gemfile
77
+ - examples/realtimeww2/Gemfile.lock
78
+ - examples/realtimeww2/main.rb
62
79
  - examples/sexypizza/Gemfile
63
80
  - examples/sexypizza/Gemfile.lock
64
81
  - examples/sexypizza/main.rb
@@ -69,6 +86,7 @@ files:
69
86
  - examples/yayornay/Gemfile.lock
70
87
  - examples/yayornay/main.rb
71
88
  - lib/reddit_bot.rb
89
+ - lib/reddit_bot/version.rb
72
90
  - reddit_bot.gemspec
73
91
  homepage: https://github.com/Nakilon/reddit_bot
74
92
  licenses: