lita-reddit 0.0.5 → 0.0.6
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/Gemfile +1 -1
- data/README.md +2 -0
- data/lib/lita/handlers/reddit.rb +50 -22
- data/lita-reddit.gemspec +1 -2
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19e3ec79a7b9e2a976711a1d359ba97029e8cc39
|
4
|
+
data.tar.gz: 22faa46b29ea2e002916b243487e8b52da4727c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76549b27b0e930e8e822e43edbf92be7326051b1efd91c3d032b8e0734ef5a8556b3569dc137cfac6ee49092196f7008e21690fa11ebb49d79101b7a782354b0
|
7
|
+
data.tar.gz: 9574ff6dab9105ba81285a856afd6cf25d200ab557f993c9216139d256443bed61b1951b9e08c40b0f6447f72c4fd4f4c248827d0d8ca4e900b8b292f3164a93
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -21,6 +21,8 @@ config.handlers.reddit.client_id = "client_from_api"
|
|
21
21
|
config.handlers.reddit.client_secret = "secret_from_api"
|
22
22
|
# The delay to wait before starting the polling in seconds (optional, defaults to 30s)
|
23
23
|
config.handlers.reddit.startup_delay = 30
|
24
|
+
# The interval in between requests (optional, defaults to 300s)
|
25
|
+
config.handlers.reddit.poll_interval = 300
|
24
26
|
```
|
25
27
|
|
26
28
|
## Usage
|
data/lib/lita/handlers/reddit.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'thread'
|
2
|
-
require 'redd'
|
3
|
-
|
4
1
|
module Lita
|
5
2
|
module Handlers
|
6
3
|
class Reddit < Handler
|
@@ -11,37 +8,68 @@ module Lita
|
|
11
8
|
config :reddits, type: Array
|
12
9
|
end
|
13
10
|
config :startup_delay, type: Integer, default: 30
|
11
|
+
config :poll_interval, type: Integer, default: 300
|
14
12
|
|
15
13
|
on :connected, :setup
|
16
14
|
|
15
|
+
@@user_agent = 'ruby:lita-reddit:v0.0.6 (by /u/dosman711)'
|
16
|
+
|
17
17
|
|
18
18
|
def setup(payload)
|
19
|
+
update_token
|
19
20
|
after(config.startup_delay) do
|
20
|
-
|
21
|
+
refresh_posts
|
22
|
+
end
|
23
|
+
every (config.poll_interval) do
|
24
|
+
refresh_posts
|
25
|
+
end
|
26
|
+
# update userless token once per hour
|
27
|
+
every (3300) do
|
28
|
+
update_token
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def update_token
|
33
|
+
log.debug('updating userless oauth token')
|
34
|
+
request = http
|
35
|
+
request.basic_auth(config.client_id, config.client_secret)
|
36
|
+
auth_response = request.post do |req|
|
37
|
+
req.url 'https://www.reddit.com/api/v1/access_token'
|
38
|
+
req.headers['User-Agent'] = @@user_agent
|
39
|
+
req.body = 'grant_type=client_credentials'
|
21
40
|
end
|
41
|
+
response = MultiJson.load(auth_response.body)
|
42
|
+
@@access_token = response['access_token']
|
22
43
|
end
|
23
44
|
|
24
|
-
def
|
25
|
-
post_text = 'From /r/%s: %s (
|
45
|
+
def refresh_posts
|
46
|
+
post_text = 'From /r/%s: %s (http://redd.it/%s)'
|
26
47
|
base_redis_key = 'seen_list_%s_%s'
|
27
48
|
config.reddits.each do |reddit|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
49
|
+
log.debug ('updating posts for /r/%s' % [reddit[:subreddit]])
|
50
|
+
#new on the left
|
51
|
+
redis_key = base_redis_key % [reddit[:channel], reddit[:subreddit]]
|
52
|
+
post_limit = 3
|
53
|
+
seen_reddits = redis.lrange(redis_key, 0, 10)
|
54
|
+
request = http
|
55
|
+
resp = request.get do |req|
|
56
|
+
req.url 'https://oauth.reddit.com/r/%s/new' % [reddit[:subreddit]]
|
57
|
+
req.headers['Authorization'] = 'bearer %s' % [@@access_token]
|
58
|
+
req.headers['User-Agent'] = @@user_agent
|
59
|
+
req.params['limit'] = post_limit
|
60
|
+
req.params['before'] = redis.lindex(redis_key, 0)
|
61
|
+
end
|
62
|
+
log.debug('result of request %s' % [resp.status])
|
63
|
+
response_body = MultiJson.load(resp.body)
|
64
|
+
target = Source.new(room: reddit[:channel])
|
65
|
+
response_body['data']['children'].reverse.each do |post|
|
66
|
+
if !seen_reddits.include?(post['data']['id']) then
|
67
|
+
robot.send_message(target, post_text % [post['data']['subreddit'], post['data']['title'], post['data']['id']])
|
68
|
+
redis.lpush(redis_key, post['data']['id'])
|
42
69
|
end
|
43
|
-
|
44
|
-
|
70
|
+
# keep a few extra around, 10 is still instantaneous
|
71
|
+
redis.ltrim(redis_key, 0, 10)
|
72
|
+
end
|
45
73
|
end
|
46
74
|
end
|
47
75
|
end
|
data/lita-reddit.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "lita-reddit"
|
3
|
-
spec.version = "0.0.
|
3
|
+
spec.version = "0.0.6"
|
4
4
|
spec.authors = ["Chris Baker"]
|
5
5
|
spec.email = ["dosman711@gmail.com"]
|
6
6
|
spec.description = %q{A Reddit handler for Lita.}
|
@@ -15,7 +15,6 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.require_paths = ["lib"]
|
16
16
|
|
17
17
|
spec.add_runtime_dependency "lita", ">= 4.2"
|
18
|
-
spec.add_runtime_dependency "redd"
|
19
18
|
|
20
19
|
spec.add_development_dependency "bundler", "~> 1.3"
|
21
20
|
spec.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-reddit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Baker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lita
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: redd
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|