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 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