lita-reddit 0.0.5 → 0.0.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: 6d94ddc28ef86526e01c700c2ee3f0647263580a
4
- data.tar.gz: bc3144fd40faf24d10782ea219c0b92d35467434
3
+ metadata.gz: 19e3ec79a7b9e2a976711a1d359ba97029e8cc39
4
+ data.tar.gz: 22faa46b29ea2e002916b243487e8b52da4727c8
5
5
  SHA512:
6
- metadata.gz: 51ef41d2ced8ec2e4a9b6984dfcade18625e35e81d041d8830c2e8d1582eb30febcb807321dcb2b240dcee81a3c574c78130260ed586a1a688d32bb12d3248d4
7
- data.tar.gz: eca9dcd6e808c0889ee352771373fb1219f56d428c31aae0483196422407d79935d729028922b697c534bd2ed7d13a93d122b5e08ee8e8ef08f71f496d91a0c3
6
+ metadata.gz: 76549b27b0e930e8e822e43edbf92be7326051b1efd91c3d032b8e0734ef5a8556b3569dc137cfac6ee49092196f7008e21690fa11ebb49d79101b7a782354b0
7
+ data.tar.gz: 9574ff6dab9105ba81285a856afd6cf25d200ab557f993c9216139d256443bed61b1951b9e08c40b0f6447f72c4fd4f4c248827d0d8ca4e900b8b292f3164a93
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
1
  source "https://rubygems.org"
2
- gem "redd"
2
+
3
3
  gemspec
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
@@ -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
- setup_streams
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 setup_streams
25
- post_text = 'From /r/%s: %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
- Thread.new {
29
- #new on the left
30
- redis_key = base_redis_key % [reddit[:channel], reddit[:subreddit]]
31
- post_limit = 3
32
- seen_reddits = redis.lrange(redis_key, 0, post_limit - 1)
33
- userless = Redd.it(:userless, config.client_id, config.client_secret, user_agent: 'lita-reddit/1.0')
34
- Lita.logger.debug('setting up stream for %s' % [reddit[:subreddit]])
35
- target = Source.new(room: reddit[:channel])
36
- userless.stream :get_new, reddit[:subreddit], limit: post_limit do |post|
37
- if !seen_reddits.include?(post.fullname) then
38
- robot.send_message(target, post_text % [post.subreddit, post.title, post.short_url])
39
- redis.lpush(redis_key, post.fullname)
40
- end
41
- redis.ltrim(redis_key, 0, post_limit - 1)
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
- Lita.logger.debug('finished setting up stream for %s' % [reddit[:subreddit]])
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.5"
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.5
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-18 00:00:00.000000000 Z
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