cinch-twitterstatus 1.0.0 → 1.0.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.
data/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
[](https://coveralls.io/r/bhaberer/cinch-twitterstatus?branch=master)
|
7
7
|
[](https://codeclimate.com/github/bhaberer/cinch-twitterstatus)
|
8
8
|
|
9
|
-
Posts the content of a linked Tweet to the channel.
|
9
|
+
Posts the content of a linked Tweet to the channel, can also follow users and post their tweets.
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
@@ -43,6 +43,18 @@ Once you have said credentials you will need to pass them to the Plugin's config
|
|
43
43
|
|
44
44
|
Then post a link to a specific tweet and the bot should post the content of said tweet to the channel.
|
45
45
|
|
46
|
+
### Watching Twitter Users ###
|
47
|
+
|
48
|
+
If you have a twitter account that the bot should watch for new tweets, you can
|
49
|
+
define it in the config as well:
|
50
|
+
|
51
|
+
c.plugins.options[Cinch::Plugins::TwitterStatus] = { consumer_key: 'consumer_key',
|
52
|
+
consumer_secret: 'consumer_secret',
|
53
|
+
oauth_token: 'oauth_token',
|
54
|
+
oauth_secret: 'oauth_secret',
|
55
|
+
watchers: { '#channel': ['twitteruser'] } }
|
56
|
+
|
57
|
+
|
46
58
|
## Contributing
|
47
59
|
|
48
60
|
1. Fork it
|
data/cinch-twitterstatus.gemspec
CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.description = %q{Cinch IRC bot Plugin that access the Twitter API to post the content of linked twitter statuses to the channel.}
|
12
12
|
gem.summary = %q{Cinch Plugin to post tweets to channel.}
|
13
13
|
gem.homepage = "https://github.com/bhaberer/cinch-twitterstatus"
|
14
|
+
gem.license = 'MIT'
|
14
15
|
|
15
16
|
gem.files = `git ls-files`.split($/)
|
16
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -22,5 +23,6 @@ Gem::Specification.new do |gem|
|
|
22
23
|
gem.add_development_dependency 'coveralls'
|
23
24
|
gem.add_development_dependency 'cinch-test'
|
24
25
|
|
25
|
-
gem.add_dependency 'twitter',
|
26
|
+
gem.add_dependency 'twitter', '~> 4.8.1'
|
27
|
+
gem.add_dependency 'cinch', '~> 2.0.0'
|
26
28
|
end
|
@@ -9,6 +9,7 @@ module Cinch::Plugins
|
|
9
9
|
self.help = 'Just link to a specific twitter status and I will post the content of that tweet.'
|
10
10
|
|
11
11
|
listen_to :channel
|
12
|
+
timer 15, method: :check_watched
|
12
13
|
|
13
14
|
def initialize(*args)
|
14
15
|
super
|
@@ -19,6 +20,37 @@ module Cinch::Plugins
|
|
19
20
|
c.oauth_token = config[:oauth_token]
|
20
21
|
c.oauth_token_secret = config[:oauth_secret]
|
21
22
|
end
|
23
|
+
|
24
|
+
if config[:watchers]
|
25
|
+
@watched = Hash.new
|
26
|
+
config[:watchers].each_pair do |chan, users|
|
27
|
+
@watched[chan] = Hash.new
|
28
|
+
users.each { |user| refresh_cache(chan, user) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def check_watched
|
35
|
+
return unless @watched
|
36
|
+
|
37
|
+
@watched.keys.each do |chan|
|
38
|
+
@watched[chan].keys.each do |user|
|
39
|
+
begin
|
40
|
+
# Just check the last tweet, if they are posting more than once
|
41
|
+
# every timer tick I don't want to spam the channel.
|
42
|
+
tweet = Twitter::Client.new.user_timeline(user).first
|
43
|
+
unless @watched[chan][user].include?(tweet.id)
|
44
|
+
@watched[chan][user] << tweet.id
|
45
|
+
|
46
|
+
msg = format_tweet(user, Twitter.status(tweet.id).text)
|
47
|
+
Channel(chan).send msg unless msg.nil?
|
48
|
+
end
|
49
|
+
refresh_cache(chan, user)
|
50
|
+
rescue Twitter::Error::NotFound
|
51
|
+
debug "You have set an invalid or protected user (#{user}) to watch, please correct this error"
|
52
|
+
end
|
53
|
+
end
|
22
54
|
end
|
23
55
|
end
|
24
56
|
|
@@ -27,12 +59,8 @@ module Cinch::Plugins
|
|
27
59
|
urls.each do |url|
|
28
60
|
if url.match(/^https?:\/\/mobile|w{3}?\.?twitter\.com/)
|
29
61
|
if tweet = url.match(/https?:\/\/mobile|w{3}?\.?twitter\.com\/?#?!?\/([^\/]+)\/statuse?s?\/(\d+)\/?/)
|
30
|
-
|
31
|
-
|
32
|
-
user = tweet[1]
|
33
|
-
unless user.nil? || status.nil?
|
34
|
-
m.reply "@#{user} tweeted \"#{status}\""
|
35
|
-
end
|
62
|
+
msg = format_tweet(tweet[1], Twitter.status(tweet[2]).text)
|
63
|
+
m.reply msg unless msg.nil?
|
36
64
|
end
|
37
65
|
end
|
38
66
|
end
|
@@ -41,5 +69,26 @@ module Cinch::Plugins
|
|
41
69
|
rescue Twitter::Error::Forbidden
|
42
70
|
debug "User attempted to post a Protected Tweet or you have not set valid Twitter credentials."
|
43
71
|
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def format_tweet(user, status)
|
76
|
+
# Return blank if we didn't get a good user and status
|
77
|
+
return if user.nil? || status.nil?
|
78
|
+
|
79
|
+
# Scrub the tweet for returns so we don't have multilined responses.
|
80
|
+
status.gsub!(/[\n]+/, " ") if status.match(/\n/)
|
81
|
+
|
82
|
+
return "@#{user} tweeted \"#{status}\""
|
83
|
+
end
|
84
|
+
|
85
|
+
def refresh_cache(chan, user)
|
86
|
+
@watched[chan][user] = []
|
87
|
+
Twitter::Client.new.user_timeline(user).each do |tweet|
|
88
|
+
@watched[chan][user] << tweet.id
|
89
|
+
end
|
90
|
+
rescue Twitter::Error::NotFound
|
91
|
+
debug "You have set an invalid or protected user (#{user}) to watch, please correct this error"
|
92
|
+
end
|
44
93
|
end
|
45
94
|
end
|
@@ -5,37 +5,48 @@ describe Cinch::Plugins::TwitterStatus do
|
|
5
5
|
include Cinch::Test
|
6
6
|
|
7
7
|
before(:all) do
|
8
|
-
@bot = make_bot(Cinch::Plugins::TwitterStatus,
|
8
|
+
@bot = make_bot(Cinch::Plugins::TwitterStatus,
|
9
9
|
{ filename: '/dev/null',
|
10
|
-
|
10
|
+
watchers: { '#foo' => ['weirdo513'] },
|
11
11
|
consumer_key: ENV['CONSUMER_KEY'],
|
12
12
|
consumer_secret: ENV['CONSUMER_SECRET'],
|
13
13
|
oauth_token: ENV['OAUTH_TOKEN'],
|
14
14
|
oauth_secret: ENV['OAUTH_SECRET'] })
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
describe "Twitter Link Parsing" do
|
18
|
+
it 'should return the text of the tweet when linked in the channel' do
|
19
|
+
get_replies(make_message(@bot, 'https://twitter.com/weirdo513/status/344186643609174016',
|
20
|
+
{ channel: '#foo', nick: 'bar' })).
|
21
|
+
first.text.should == "@weirdo513 tweeted \"HOW IS THAT MIC STILL ON JESUS\""
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
it 'should not return any text if the status is invalid' do
|
25
|
+
get_replies(make_message(@bot, 'https://twitter.com/weirdo513/status/3INVALI643609174016',
|
26
|
+
{ channel: '#foo', nick: 'bar' })).
|
27
|
+
should be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should not return any text if the status is protected' do
|
31
|
+
get_replies(make_message(@bot, 'https://twitter.com/brewtopian/status/68071618055901184',
|
32
|
+
{ channel: '#foo', nick: 'bar' })).
|
33
|
+
should be_empty
|
34
|
+
end
|
28
35
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
36
|
+
it 'should not run without credentials set' do
|
37
|
+
bot = make_bot(Cinch::Plugins::TwitterStatus)
|
38
|
+
get_replies(make_message(bot, 'https://twitter.com/weirdo513/status/344186643609174016',
|
39
|
+
{ channel: '#foo', nick: 'bar' }))
|
40
|
+
end
|
33
41
|
end
|
34
42
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
43
|
+
describe "Watchers" do
|
44
|
+
# FIXME: cinch-test does not allow timers to function
|
45
|
+
it 'should not post tweets that already existed when the bot was started' do
|
46
|
+
sleep 20
|
47
|
+
get_replies(make_message(@bot, 'https://twitter.com/weirdo513/status/344186643609174016',
|
48
|
+
{ channel: '#foo', nick: 'bar' }))
|
49
|
+
end
|
39
50
|
end
|
40
51
|
end
|
41
52
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinch-twitterstatus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -91,6 +91,22 @@ dependencies:
|
|
91
91
|
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: 4.8.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: cinch
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 2.0.0
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.0.0
|
94
110
|
description: Cinch IRC bot Plugin that access the Twitter API to post the content
|
95
111
|
of linked twitter statuses to the channel.
|
96
112
|
email:
|
@@ -112,7 +128,8 @@ files:
|
|
112
128
|
- spec/cinch-twitterstatus_spec.rb
|
113
129
|
- spec/spec_helper.rb
|
114
130
|
homepage: https://github.com/bhaberer/cinch-twitterstatus
|
115
|
-
licenses:
|
131
|
+
licenses:
|
132
|
+
- MIT
|
116
133
|
post_install_message:
|
117
134
|
rdoc_options: []
|
118
135
|
require_paths:
|