twibot 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +10 -0
- data/Readme.rdoc +2 -0
- data/lib/twibot/bot.rb +33 -6
- data/lib/twibot/config.rb +2 -1
- data/lib/twibot/handlers.rb +2 -1
- data/lib/twibot.rb +1 -1
- data/test/test_bot.rb +8 -0
- data/test/test_handler.rb +6 -0
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
== 0.1.4 / 2009-03-24
|
2
|
+
|
3
|
+
* Removed some warnings
|
4
|
+
* Added error handling to avoid Twibot crashing when Twitter is down (Ben Vandgrift)
|
5
|
+
* Fixed bug: receiving tweets from named users crashed Twibot (Jens Ohlig)
|
6
|
+
|
7
|
+
== 0.1.3 / 2009-03-19
|
8
|
+
|
9
|
+
* Ruby 1.9 support
|
10
|
+
|
1
11
|
== 0.1.2 / 2009-03-18
|
2
12
|
|
3
13
|
* Removed some warnings
|
data/Readme.rdoc
CHANGED
@@ -134,6 +134,8 @@ reaches max_interval, where it will stay until Twibot finds anything.
|
|
134
134
|
== Contributors
|
135
135
|
|
136
136
|
* Dan Van Derveer (bug fixes) - http://dan.van.derveer.com/
|
137
|
+
* Ben Vandgrift (Twitter downtime error handling) - http://neovore.com/
|
138
|
+
* Jens Ohlig (warnings)
|
137
139
|
|
138
140
|
== License
|
139
141
|
|
data/lib/twibot/bot.rb
CHANGED
@@ -48,7 +48,13 @@ module Twibot
|
|
48
48
|
@processed[:message] = messages.first.id if messages.length > 0
|
49
49
|
|
50
50
|
handle_tweets = @handlers[:tweet].length + @handlers[:reply].length > 0
|
51
|
-
tweets =
|
51
|
+
tweets = []
|
52
|
+
begin
|
53
|
+
tweets = handle_tweets ? @twitter.timeline_for(:me, { :count => 1 }) : []
|
54
|
+
rescue Twitter::RESTError => e
|
55
|
+
log.error("Failed to connect to Twitter. It's likely down for a bit:")
|
56
|
+
log.error(e.to_s)
|
57
|
+
end
|
52
58
|
@processed[:tweet] = tweets.first.id if tweets.length > 0
|
53
59
|
@processed[:reply] = tweets.first.id if tweets.length > 0
|
54
60
|
|
@@ -84,7 +90,13 @@ module Twibot
|
|
84
90
|
return false unless handlers[type].length > 0
|
85
91
|
options = {}
|
86
92
|
options[:since_id] = @processed[type] if @processed[type]
|
87
|
-
|
93
|
+
begin
|
94
|
+
dispatch_messages(type, @twitter.messages(:received, options), %w{message messages})
|
95
|
+
rescue Twitter::RESTError => e
|
96
|
+
log.error("Failed to connect to Twitter. It's likely down for a bit:")
|
97
|
+
log.error(e.to_s)
|
98
|
+
0
|
99
|
+
end
|
88
100
|
end
|
89
101
|
|
90
102
|
#
|
@@ -95,7 +107,15 @@ module Twibot
|
|
95
107
|
return false unless handlers[type].length > 0
|
96
108
|
options = {}
|
97
109
|
options[:since_id] = @processed[type] if @processed[type]
|
98
|
-
|
110
|
+
begin
|
111
|
+
dispatch_messages(type,
|
112
|
+
@twitter.timeline_for(config[:include_friends] ? :friends : :me,
|
113
|
+
options), %w{tweet tweets})
|
114
|
+
rescue Twitter::RESTError => e
|
115
|
+
log.error("Failed to connect to Twitter. It's likely down for a bit:")
|
116
|
+
log.error(e.to_s)
|
117
|
+
0
|
118
|
+
end
|
99
119
|
end
|
100
120
|
|
101
121
|
#
|
@@ -106,8 +126,14 @@ module Twibot
|
|
106
126
|
return false unless handlers[type].length > 0
|
107
127
|
options = {}
|
108
128
|
options[:since_id] = @processed[type] if @processed[type]
|
109
|
-
|
110
|
-
|
129
|
+
begin
|
130
|
+
dispatch_messages(type, @twitter.status(:replies, options), %w{reply replies})
|
131
|
+
rescue Twitter::RESTError => e
|
132
|
+
log.error("Failed to connect to Twitter. It's likely down for a bit:")
|
133
|
+
log.error(e.to_s)
|
134
|
+
0
|
135
|
+
end
|
136
|
+
|
111
137
|
end
|
112
138
|
|
113
139
|
#
|
@@ -171,13 +197,14 @@ module Twibot
|
|
171
197
|
@config.password = hl.ask("Twitter password: ") { |q| q.echo = '*' } unless @conf[:password]
|
172
198
|
@conf = @config.to_hash
|
173
199
|
rescue LoadError
|
174
|
-
raise SystemExit.new <<-HELP
|
200
|
+
raise SystemExit.new( <<-HELP
|
175
201
|
Unable to continue without login and password. Do one of the following:
|
176
202
|
1) Install the HighLine gem (gem install highline) to be prompted for credentials
|
177
203
|
2) Create a config/bot.yml with login: and password:
|
178
204
|
3) Put a configure { |conf| conf.login = "..." } block in your bot application
|
179
205
|
4) Run bot with --login and --password options
|
180
206
|
HELP
|
207
|
+
)
|
181
208
|
end
|
182
209
|
end
|
183
210
|
|
data/lib/twibot/config.rb
CHANGED
data/lib/twibot/handlers.rb
CHANGED
@@ -69,7 +69,8 @@ module Twibot
|
|
69
69
|
return false if @options[:pattern] && message.text !~ @options[:pattern] # Pattern check
|
70
70
|
|
71
71
|
users = @options[:from] ? @options[:from] : nil
|
72
|
-
|
72
|
+
sender = message.respond_to?(:sender) ? message.sender : message.user
|
73
|
+
return false if users && !users.include?(sender.screen_name) # Check allowed senders
|
73
74
|
true
|
74
75
|
end
|
75
76
|
|
data/lib/twibot.rb
CHANGED
@@ -7,7 +7,7 @@ require File.join(File.dirname(__FILE__), 'hash')
|
|
7
7
|
module Twibot
|
8
8
|
|
9
9
|
# :stopdoc:
|
10
|
-
VERSION = '0.1.
|
10
|
+
VERSION = '0.1.4'
|
11
11
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
12
12
|
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
13
13
|
# :startdoc:
|
data/test/test_bot.rb
CHANGED
@@ -81,6 +81,14 @@ class TestBot < Test::Unit::TestCase
|
|
81
81
|
assert_equal 1, bot.receive_tweets
|
82
82
|
end
|
83
83
|
|
84
|
+
should "receive friend tweets if configured" do
|
85
|
+
bot = Twibot::Bot.new(Twibot::Config.new({:log_level => "error", :include_friends => true}))
|
86
|
+
bot.add_handler(:tweet, Twibot::Handler.new)
|
87
|
+
Twitter::Client.any_instance.expects(:timeline_for).with(:friends, {}).returns([tweet("cjno", "Hei der!")])
|
88
|
+
|
89
|
+
assert_equal 1, bot.receive_tweets
|
90
|
+
end
|
91
|
+
|
84
92
|
should "remember received tweets" do
|
85
93
|
bot = Twibot::Bot.new(Twibot::Config.new(:log_level => "error"))
|
86
94
|
bot.add_handler(:tweet, Twibot::Handler.new)
|
data/test/test_handler.rb
CHANGED
@@ -121,6 +121,12 @@ class TestHandler < Test::Unit::TestCase
|
|
121
121
|
assert handler.recognize?(message)
|
122
122
|
end
|
123
123
|
|
124
|
+
should "recognize tweets from allowed users" do
|
125
|
+
handler = Twibot::Handler.new :from => [:cjno, :irbno]
|
126
|
+
message = tweet "cjno", "time oslo norway"
|
127
|
+
assert handler.recognize?(message)
|
128
|
+
end
|
129
|
+
|
124
130
|
should "accept options as only argument" do
|
125
131
|
handler = Twibot::Handler.new :from => :cjno
|
126
132
|
assert_equal(:cjno, handler.instance_eval { @options[:from] })
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twibot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Johansen
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-03-
|
12
|
+
date: 2009-03-24 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|