reddit_bot 1.1.8 → 1.2.0
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.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/examples/boilerplate.rb +2 -9
- data/examples/devflairbot/Gemfile.lock +3 -3
- data/examples/flairmotron/Gemfile.lock +3 -3
- data/examples/mlgtv/Gemfile +1 -0
- data/examples/mlgtv/Gemfile.lock +10 -3
- data/examples/mlgtv/main.rb +18 -14
- data/examples/oneplus/Gemfile.lock +3 -3
- data/examples/pokemon_trading/Gemfile.lock +3 -3
- data/examples/pokemon_trading/main.rb +1 -1
- data/examples/sexypizza/main.rb +12 -7
- data/examples/wallpaper/Gemfile.lock +3 -3
- data/examples/yayornay/Gemfile.lock +3 -3
- data/lib/reddit_bot.rb +43 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c023e24b1aa289bee8f5a718ebdcd3d4dc64acc
|
4
|
+
data.tar.gz: 73f61de52f02b15c75607cb99d042b4590424f4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da386cce14eeb419ef0fc23968bed4a7a3c94c3ae797ff96ddfa1defb2f802d68cb4dfaee5b79b920049108eb9b978a343de8031b862ca1f0b632ed8d425cc3b
|
7
|
+
data.tar.gz: 6fc65d233f2572e8bbb9847c3a2dd99a3cb99834e4c7250f9cf4d91d554e078dcee1ec766960149c6de5b9a9344c0a3b13b203609593efa111597675dd3a691a
|
data/README.md
CHANGED
@@ -79,6 +79,10 @@ probably Gemfile:
|
|
79
79
|
TODO: Write usage instructions here
|
80
80
|
TODO: manual on how to create bots with Reddit web interface and run via bash console
|
81
81
|
|
82
|
+
To update the gem version in Gemfile.lock when using Gemfile like this: `gem "reddit_bot", "~>1.1.0"`, do the:
|
83
|
+
|
84
|
+
$ bundle update reddit_bot
|
85
|
+
|
82
86
|
#### Contributing and License
|
83
87
|
|
84
88
|
Bug reports and pull requests are welcome.
|
data/examples/boilerplate.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
STDOUT.sync = true
|
2
|
-
|
3
2
|
require "pp"
|
4
3
|
|
5
|
-
|
6
|
-
*("../download_with_retry" if ENV["LOGNAME"] == "nakilon"),
|
7
|
-
"download_with_retry"
|
4
|
+
require "net_http_utils" if Gem.loaded_specs.include? "net_http_utils"
|
8
5
|
|
9
6
|
if ENV["DEV"]
|
10
7
|
require_relative "../lib/reddit_bot"
|
@@ -12,10 +9,6 @@ else
|
|
12
9
|
require "reddit_bot"
|
13
10
|
end
|
14
11
|
|
15
|
-
|
16
|
-
|
17
|
-
require_relative File.join "../..",
|
18
|
-
*(".." if ENV["LOGNAME"] == "nakilon"),
|
19
|
-
"awsstatus/2.rb"
|
12
|
+
require_relative "#{Dir.home}/beat.rb" unless Gem::Platform.local.os == "darwin"
|
20
13
|
|
21
14
|
require "yaml"
|
data/examples/mlgtv/Gemfile
CHANGED
data/examples/mlgtv/Gemfile.lock
CHANGED
@@ -1,15 +1,22 @@
|
|
1
|
+
GIT
|
2
|
+
remote: https://gist.github.com/97549ceb58d21e1fcbc0e6cdaf92fce8.git
|
3
|
+
revision: 54c47ab3f9665f3e35a8e94fdd267e3743c736a9
|
4
|
+
specs:
|
5
|
+
net_http_utils (0)
|
6
|
+
|
1
7
|
GEM
|
2
8
|
remote: https://rubygems.org/
|
3
9
|
specs:
|
4
|
-
json (
|
5
|
-
reddit_bot (1.1.
|
10
|
+
json (2.0.2)
|
11
|
+
reddit_bot (1.1.8)
|
6
12
|
json
|
7
13
|
|
8
14
|
PLATFORMS
|
9
15
|
ruby
|
10
16
|
|
11
17
|
DEPENDENCIES
|
18
|
+
net_http_utils (= 0)!
|
12
19
|
reddit_bot (~> 1.1.5)
|
13
20
|
|
14
21
|
BUNDLED WITH
|
15
|
-
1.
|
22
|
+
1.13.1
|
data/examples/mlgtv/main.rb
CHANGED
@@ -5,19 +5,16 @@ BOT = RedditBot::Bot.new YAML.load(File.read "secrets.yaml"), ignore_captcha: tr
|
|
5
5
|
SUBREDDIT = "codcompetitive"
|
6
6
|
|
7
7
|
loop do
|
8
|
-
|
8
|
+
Hearthbeat.beat "u_OpTicNaDeBoT_r_CoDCompetitive", 70 unless Gem::Platform.local.os == "darwin"
|
9
9
|
catch :loop do
|
10
10
|
|
11
11
|
text = " Live Streams\n\n" + [].tap do |list|
|
12
12
|
|
13
13
|
throw :loop unless statuses = JSON.parse(
|
14
|
-
|
14
|
+
NetHTTPUtils.request_data("http://streamapi.majorleaguegaming.com/service/streams/all")[/\{.+\}/m]
|
15
15
|
)["data"]["items"]
|
16
16
|
begin
|
17
|
-
JSON.parse
|
18
|
-
# DownloadWithRetry::download_with_retry("http://www.majorleaguegaming.com/api/channels/all.js?fields=id,name,slug,subtitle,game_id,stream_name,type,default_tab,is_hidden,chat_is_disabled,image_1_1,image_16_9,image_16_9_small,image_16_9_medium,image_background,url,embed_code,stream_featured,stream_sort_order,tags,tag_names,children,description,subscription_url,donate_url,donate_text,partner_embed")
|
19
|
-
"http://www.majorleaguegaming.com/api/channels/all.js?fields=name,url,tags,stream_name"
|
20
|
-
)
|
17
|
+
JSON.parse NetHTTPUtils.request_data "http://www.majorleaguegaming.com/api/channels/all.js?fields=name,url,tags,stream_name"
|
21
18
|
rescue JSON::ParserError
|
22
19
|
puts "JSON::ParserError"
|
23
20
|
sleep 60
|
@@ -40,14 +37,20 @@ loop do
|
|
40
37
|
# 0. see 'client_id' here https://www.twitch.tv/settings/connections and 'client_secret' from local ./readme file
|
41
38
|
# 1. get 'code' by visiting in browser: https://api.twitch.tv/kraken/oauth2/authorize?response_type=code&client_id=*******&redirect_uri=http://www.example.com/unused/redirect/uri&scope=channel_read channel_feed_read
|
42
39
|
# 2. NetHTTPUtils.request_data("https://api.twitch.tv/kraken/oauth2/token", :post, form: {client_id: "*******", client_secret: "*****", grant_type: "authorization_code", redirect_uri: "http://www.example.com/unused/redirect/uri", code: "*******"})
|
43
|
-
|
44
|
-
"
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
40
|
+
[
|
41
|
+
"Call of Duty: Infinite Warfare",
|
42
|
+
"Call of Duty: Modern Warfare Remastered",
|
43
|
+
"Call of Duty 4: Modern Warfare",
|
44
|
+
].each do |game|
|
45
|
+
(JSON.parse(
|
46
|
+
NetHTTPUtils.request_data "https://api.twitch.tv/kraken/streams?game=#{CGI::escape game}&access_token=#{File.read("twitch.token").strip}&client_id=#{File.read("client.id").strip}&channel=Ricky,ACHES,Lacefield,Clayster,Enable,Zoomaa,Attach,TheFEARS,PHiZZURP,MiRx1,SaintsRF,StuDyy,SpaceLyTV,NAMELESS,Scumperjumper,FORMAL,Crimsix,Karma,Loony,Slacked,Octane,MJChino,Diabolic_TV,ImTheIvy,Senderxz,Jkap,John,SlasheRAL,Apathy,ColtHavok,MikeSwarley,ParasiteTV,TyreeLegal,Silly,Blfire,methodz,TwiZzyTV,Mochila,Remy,Xotic16,AquA,Faccento,Nagafen,Tylerfelo,TheoryCoD,ColeChanTV,happyy97,goonjar,Burns,Dedo,Neslo,TeeCM,K1lla93,NeLsoNNaTeR,ProoFy,Whea7s,MBoZe,Merk,Nadeshot,ReeP,Sharp,TeePee,Braaain2015,Nolsonn,QwiKeRTHaNu,Zedenyer1,Jurd,Tommey,Swanny,MadCatEU,Rated_EU1,BsportJoshh,Sy_Vortex,TheMarkyB,Peatie95,urbandm,TreiZer0,iDqvee,Tojor,MethodZ_TV,Gotaga,WailersWL,TCM_Moose,RampageSkrapz,Reedy,fighta71,Swiftazor,BacabecNZ,Zeuss_Gaming,Hopeyy,GuydraCOD,mattmrx,Maven,CouRageJD,Revan,BriceyHD,Benson,PHILWHI7"
|
47
|
+
)["streams"] || []).each do |channel|
|
48
|
+
list << "* [](#twitch) [](#live) [**#{
|
49
|
+
channel["channel"]["display_name"]
|
50
|
+
}**](#{
|
51
|
+
channel["channel"]["url"]
|
52
|
+
})"
|
53
|
+
end
|
51
54
|
end
|
52
55
|
|
53
56
|
end.join(" \n") + "\n"
|
@@ -72,6 +75,7 @@ loop do
|
|
72
75
|
end
|
73
76
|
next puts "nothing to change" if prefix + text + postfix == settings["description"]
|
74
77
|
|
78
|
+
puts "updating sidebar..."
|
75
79
|
settings["description"] = prefix + text + postfix
|
76
80
|
_ = BOT.json :post, "/api/site_admin", settings.to_a
|
77
81
|
fail _.inspect if _ != {"json"=>{"errors"=>[]}} && !(_["json"]["errors"].map(&:first) - ["BAD_CAPTCHA"]).empty?
|
@@ -4,8 +4,8 @@ GEM
|
|
4
4
|
addressable (2.4.0)
|
5
5
|
fastimage (1.7.0)
|
6
6
|
addressable (~> 2.3, >= 2.3.5)
|
7
|
-
json (
|
8
|
-
reddit_bot (1.1.
|
7
|
+
json (2.0.2)
|
8
|
+
reddit_bot (1.1.8)
|
9
9
|
json
|
10
10
|
|
11
11
|
PLATFORMS
|
@@ -16,4 +16,4 @@ DEPENDENCIES
|
|
16
16
|
reddit_bot (~> 1.1.5)
|
17
17
|
|
18
18
|
BUNDLED WITH
|
19
|
-
1.
|
19
|
+
1.12.0
|
@@ -9,7 +9,7 @@ loop do
|
|
9
9
|
# next unless msg["data"]["author"] == "nakilon" if ENV["LOGNAME"] == "nakilon"
|
10
10
|
next puts "bad destination: #{msg["data"]["dest"]}" unless msg["data"]["dest"] == "CPTFlairBot3"
|
11
11
|
case msg["data"]["subject"]
|
12
|
-
when "casualpokemontrades"
|
12
|
+
when "casualpokemontrades"#, "relaxedpokemontrades"
|
13
13
|
unless /^(?<name>\S+)\n(?<id>\d\d\d\d-\d\d\d\d-\d\d\d\d)\n(?<css_class>\S+)$/ =~ msg["data"]["body"]
|
14
14
|
puts "invalid message for #{msg["data"]["subject"]}: %p" % msg["data"]["body"] if ENV["LOGNAME"] == "nakilon"
|
15
15
|
# puts "marking invalid message as read: %p" % msg["data"]["body"]
|
data/examples/sexypizza/main.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
require_relative "../boilerplate"
|
2
2
|
|
3
|
+
BOT = RedditBot::Bot.new YAML.load(File.read "secrets.yaml"), ignore_captcha: true
|
3
4
|
SUBREDDIT = "sexypizza"
|
4
|
-
BOT = RedditBot::Bot.new YAML.load(File.read "secrets.yaml"), ignore_captcha: true#, subreddit: SUBREDDIT
|
5
|
-
|
6
5
|
|
7
6
|
loop do
|
8
|
-
|
7
|
+
Hearthbeat.beat "u_SexyPizzaBot_r_sexypizza", 3610 unless Gem::Platform.local.os == "darwin"
|
9
8
|
puts "LOOP #{Time.now}"
|
10
9
|
|
11
10
|
flairs = BOT.json(:get, "/r/#{SUBREDDIT}/api/flairlist", {limit: 1000})["users"]
|
@@ -16,14 +15,20 @@ loop do
|
|
16
15
|
"--------------|-----------------\n" +
|
17
16
|
flairs.
|
18
17
|
group_by{ |flair| flair["flair_text"] }.
|
19
|
-
# reject{ |flair, | flair.empty? }.
|
20
18
|
sort_by{ |_, group| -group.size }.
|
21
19
|
map{ |flair, group| "#{flair} | #{group.size}" }.
|
22
|
-
# map{ |flair, group| "#{flair} | #{group.size} | #{group.map{ |u| u["user"] }.join ", "}" }.
|
23
20
|
join("\n")
|
24
|
-
puts text
|
25
21
|
|
26
|
-
|
22
|
+
if text != BOT.json(:get, "/r/#{SUBREDDIT}/wiki/toppings")["data"]["content_md"]
|
23
|
+
puts "editing wiki page '/r/#{SUBREDDIT}/wiki/toppings'"
|
24
|
+
pp text
|
25
|
+
p json :post,
|
26
|
+
"/r/#{SUBREDDIT}/api/wiki/edit",
|
27
|
+
page: "toppings",
|
28
|
+
content: text
|
29
|
+
else
|
30
|
+
puts "nothing to change"
|
31
|
+
end
|
27
32
|
|
28
33
|
sleep 3600
|
29
34
|
end
|
@@ -4,8 +4,8 @@ GEM
|
|
4
4
|
addressable (2.3.8)
|
5
5
|
fastimage (1.7.0)
|
6
6
|
addressable (~> 2.3, >= 2.3.5)
|
7
|
-
json (
|
8
|
-
reddit_bot (1.1.
|
7
|
+
json (2.0.2)
|
8
|
+
reddit_bot (1.1.8)
|
9
9
|
json
|
10
10
|
|
11
11
|
PLATFORMS
|
@@ -16,4 +16,4 @@ DEPENDENCIES
|
|
16
16
|
reddit_bot (~> 1.1.5)
|
17
17
|
|
18
18
|
BUNDLED WITH
|
19
|
-
1.
|
19
|
+
1.13.1
|
data/lib/reddit_bot.rb
CHANGED
@@ -8,7 +8,7 @@ require "json"
|
|
8
8
|
|
9
9
|
|
10
10
|
module RedditBot
|
11
|
-
VERSION = "1.
|
11
|
+
VERSION = "1.2.0" # :nodoc:
|
12
12
|
|
13
13
|
class Bot
|
14
14
|
|
@@ -50,17 +50,17 @@ module RedditBot
|
|
50
50
|
response
|
51
51
|
end
|
52
52
|
|
53
|
-
# [subreddit] +String+ subreddit name without "/r" prefix
|
54
|
-
# [page] +String+ page name without "/wiki/" prefix
|
55
|
-
# [text] :nodoc:
|
56
|
-
def wiki_edit subreddit, page, text
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
53
|
+
# # [subreddit] +String+ subreddit name without "/r" prefix
|
54
|
+
# # [page] +String+ page name without "/wiki/" prefix
|
55
|
+
# # [text] :nodoc:
|
56
|
+
# def wiki_edit subreddit, page, text
|
57
|
+
# puts "editing wiki page '/r/#{subreddit}/wiki/#{page}'"
|
58
|
+
# json :post,
|
59
|
+
# "/r/#{subreddit}/api/wiki/edit",
|
60
|
+
# page: page,
|
61
|
+
# content: text
|
62
|
+
# # ["previous", result["data"]["children"].last["id"]],
|
63
|
+
# end
|
64
64
|
|
65
65
|
# [reason] :nodoc:
|
66
66
|
# [thing_id] +String+ fullname of a "link, commenr or message"
|
@@ -98,6 +98,36 @@ module RedditBot
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
|
+
# :yields: JSON objects: ["data"] part of post or self.post
|
102
|
+
def new_posts caching = false
|
103
|
+
cache = lambda do |id, &block|
|
104
|
+
next block.call unless caching
|
105
|
+
require "fileutils"
|
106
|
+
FileUtils.mkdir_p "cache"
|
107
|
+
filename = "cache/#{Digest::MD5.hexdigest id.inspect}"
|
108
|
+
next YAML.load File.read filename if File.exist? filename
|
109
|
+
block.call.tap do |data|
|
110
|
+
File.write filename, YAML.dump(data)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
Enumerator.new do |e|
|
114
|
+
after = {}
|
115
|
+
loop do
|
116
|
+
args = [:get, "/r/#{@subreddit}/new", {limit: 100}.merge(after)]
|
117
|
+
result = cache.call(args){ json *args }
|
118
|
+
fail if result.keys != %w{ kind data }
|
119
|
+
fail if result["kind"] != "Listing"
|
120
|
+
fail if result["data"].keys != %w{ modhash children after before }
|
121
|
+
result["data"]["children"].each do |post|
|
122
|
+
fail "unknown type post['kind']: #{post["kind"]}" unless post["kind"] == "t3"
|
123
|
+
e << post["data"]
|
124
|
+
end
|
125
|
+
break unless marker = result["data"]["after"]
|
126
|
+
after = {after: marker}
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
101
131
|
# :yields: JSON objects: ["data"] part of post or self.post, top level comment (["children"] element)
|
102
132
|
def each_new_post_with_top_level_comments
|
103
133
|
json(:get, "/r/#{@subreddit}/new")["data"]["children"].each do |post|
|
@@ -239,7 +269,7 @@ module RedditBot
|
|
239
269
|
x-ratelimit-used
|
240
270
|
x-ratelimit-reset
|
241
271
|
}.map{ |key| "#{key}=#{response.to_hash[key]}" }.join ", " \
|
242
|
-
if
|
272
|
+
if Gem::Platform.local.os == "darwin"
|
243
273
|
# if response.to_hash["x-ratelimit-remaining"]
|
244
274
|
# p response.to_hash["x-ratelimit-remaining"][0]
|
245
275
|
# fail response.to_hash["x-ratelimit-remaining"][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.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Maslov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|