chatterbot 2.0.0.pre → 2.0.2

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: 7333d751e027fb23ffd45e3df6a2602d271af411
4
- data.tar.gz: 29e07ecf21574c314f0603a16b6f7b65cf2af4ce
3
+ metadata.gz: dd3b277547610b8d5e0ec0993a5952d015cab80b
4
+ data.tar.gz: 114e6d11f506a6bbb331081b66395613346e3a12
5
5
  SHA512:
6
- metadata.gz: 92e31e5c24e929fe2ecca7e9a8f01b1bfdc9dfb56754817bd44ce3dcf29a2bf3beb5c8e1a259059e31b4bb1d6f005e1c5f795ac573cef52478711005dd55c2b2
7
- data.tar.gz: ae42ada56f4635ea488e3996e3f7643aa5fcac79fd724a88512e0b4c39d3683189a3f9b21803411227464265981fb051f2697750ba23b4d7b74e38ea25e9eb9a
6
+ metadata.gz: 92c72bf9e9ab384e2a5a00756d78af0128998efd1dd7d1eba9ac069b8fe427042e5ea73aeed03e2ae9dd30a140833382f9e239090b6c835794fe9207073e6d98
7
+ data.tar.gz: 3d6c202746806977bd602b9ad2f196cec49ef4dd091582ce38711906b1e7ddb9fd93be34b517b6aadeb7492e024e07784c12c4002d74e0220247bd623616fea6
@@ -4,5 +4,8 @@ rvm:
4
4
  - 2.1.1
5
5
  - 2.2.0
6
6
  - ruby-head
7
+ before_install:
8
+ - gem install bundler -v '~> 1.11'
9
+
7
10
  # uncomment this line if your project needs to run something other than `rake`:
8
11
  # script: bundle exec rspec spec
@@ -1,6 +1,11 @@
1
1
  Chatterbot
2
2
  ===========
3
3
 
4
+ Hey! This is Chatterbot 2.0. There have been some breaking changes
5
+ from older versions of the library, and it doesn't support MySQL
6
+ anymore. If you are looking for the old version,
7
+ you can try the [1.0 branch](https://github.com/muffinista/chatterbot/tree/1.0.2)
8
+
4
9
  Chatterbot is a Ruby library for making bots on Twitter. It's
5
10
  great for rapid development of bot ideas. It handles all of the basic
6
11
  Twitter API features -- searches, replies, tweets, retweets, etc. and has
@@ -51,7 +56,7 @@ A bot using chatterbot can be as simple as this:
51
56
 
52
57
  ```
53
58
  exclude "http://"
54
- blacklist "mean_user, private_user"
59
+ blocklist "mean_user, private_user"
55
60
 
56
61
  puts "checking my timeline"
57
62
  home_timeline do |tweet|
@@ -71,14 +76,15 @@ end
71
76
  ```
72
77
 
73
78
  Or you can write a bot using more traditional ruby classes, extend it if needed, and use it like so:
74
-
75
- class MyBot < Chatterbot::Bot
79
+ ```
80
+ class MyBot < Chatterbot::Bot
76
81
  def do_stuff
77
82
  search("'surely you must be joking'") do |tweet|
78
83
  reply "@#{tweet_user(tweet)} I am serious, and don't call me Shirley!", tweet
79
84
  end
80
85
  end
81
86
  end
87
+ ```
82
88
 
83
89
  Chatterbot can actually generate a template bot file for you, and will
84
90
  walk you through process of getting a bot authorized with Twitter.
@@ -101,7 +107,7 @@ to do something complicated, you should probably consider using the
101
107
 
102
108
  Basic usage is very straightforward:
103
109
 
104
- streaming true
110
+ use_streaming true
105
111
  home_timeline do |tweet|
106
112
  puts "someone i follow tweeted! #{tweet.text}"
107
113
  end
@@ -109,7 +115,7 @@ Basic usage is very straightforward:
109
115
 
110
116
  You can also run a search:
111
117
 
112
- streaming true
118
+ use_streaming true
113
119
  search("pizza") do |tweet|
114
120
  puts "someone is talking about pizza! #{tweet.text}"
115
121
  end
@@ -167,7 +173,7 @@ person who sent the original tweet.
167
173
 
168
174
  ```rb
169
175
  search "xyzzy" do |tweet|
170
- retweet(tweet[:id])
176
+ retweet(tweet.id)
171
177
  end
172
178
  ```
173
179
 
@@ -177,11 +183,11 @@ person who sent the original tweet.
177
183
 
178
184
  (NOTE: you'll need to make sure your bot has permission to send DMs)
179
185
 
180
- **blacklist** -- you can use this to specify a list of users you don't
186
+ **blocklist** -- you can use this to specify a list of users you don't
181
187
  want to interact with. If you put the following line at the top of
182
188
  your bot:
183
189
 
184
- blacklist "user1, user2, user3"
190
+ blocklist "user1, user2, user3"
185
191
 
186
192
  None of those users will trigger your bot if they come up in a
187
193
  search. However, if a user replies to one of your tweets or mentions
@@ -307,7 +313,7 @@ loop do
307
313
  search "twitter" do |tweet|
308
314
  # here you could do something with a tweet
309
315
  # if you want to retweet
310
- retweet(tweet[:id])
316
+ retweet(tweet.id)
311
317
  end
312
318
 
313
319
  replies do |tweet|
@@ -319,16 +325,16 @@ end
319
325
  ```
320
326
 
321
327
 
322
- Blacklists
328
+ Blocklists
323
329
  ----------
324
330
 
325
331
  Not everyone wants to hear from your bot. To keep annoyances to a
326
- minimum, Chatterbot has a simple blacklist tool. Using it is as simple as:
332
+ minimum, Chatterbot has a simple blocklist tool. Using it is as simple as:
327
333
 
328
- blacklist "mean_user, private_user"
334
+ blocklist "mean_user, private_user"
329
335
 
330
336
  You should really respect the wishes of users who don't want to hear
331
- from your bot, and add them to your blacklist whenever requested.
337
+ from your bot, and add them to your blocklist whenever requested.
332
338
 
333
339
  There's also an 'exclude' method which can be used to add
334
340
  words/phrases you might want to ignore -- for example, if you wanted
@@ -348,7 +354,7 @@ I can work with you on that.
348
354
  Copyright/License
349
355
  -----------------
350
356
 
351
- Copyright (c) 2015 Colin Mitchell. Chatterbot is distributed under the
357
+ Copyright (c) 2016 Colin Mitchell. Chatterbot is distributed under the
352
358
  MIT licence -- Please see LICENSE.txt for further details.
353
359
 
354
360
  http://muffinlabs.com
@@ -58,6 +58,7 @@ end
58
58
  @bot.config.delete(:token)
59
59
  @bot.require_login(false)
60
60
 
61
+
61
62
  unless @bot.screen_name.nil?
62
63
  if @botname == "tmp_bot_name"
63
64
  puts "change botname to #{@bot.screen_name}"
@@ -66,8 +67,11 @@ unless @bot.screen_name.nil?
66
67
 
67
68
  puts "Storing config info"
68
69
  puts @bot.config.inspect
69
- @bot.update_config
70
- @bot.config = nil
70
+
71
+ config_src = File.join(Dir.getwd, "tmp_bot_name.yml")
72
+ config_dest = File.join(Dir.getwd, "#{@bot.botname}.yml")
73
+ File.rename(config_src, config_dest)
74
+
71
75
 
72
76
  if @skeleton
73
77
  skel_dest = File.join(Dir.getwd, "#{@bot.botname}.rb")
@@ -21,13 +21,13 @@ Gem::Specification.new do |s|
21
21
  s.licenses = ["MIT"]
22
22
 
23
23
  s.add_development_dependency(%q<redcarpet>, [">= 0"])
24
- s.add_runtime_dependency(%q<oauth>, [">= 0.4.7"])
25
- s.add_runtime_dependency(%q<twitter>, ["5.14.0"])
24
+ s.add_runtime_dependency(%q<oauth>, ["~> 0.4.7"])
25
+ s.add_runtime_dependency(%q<twitter>, ["~> 5.16.0"])
26
26
  s.add_runtime_dependency(%q<launchy>, [">= 2.4.2"])
27
27
  s.add_runtime_dependency(%q<colorize>, [">= 0.7.3"])
28
28
  s.add_development_dependency(%q<yard>, [">= 0"])
29
29
  s.add_development_dependency(%q<shoulda>, [">= 0"])
30
- s.add_development_dependency(%q<rake>, [">= 0"])
30
+ s.add_development_dependency(%q<rake>, ["< 11"])
31
31
  s.add_development_dependency(%q<rspec>, ["~> 3.0.0"])
32
32
  s.add_development_dependency(%q<rspec-mocks>, ["~> 3.0.2"])
33
33
  s.add_development_dependency(%q<rdoc>, [">= 0"])
@@ -80,8 +80,11 @@ module Chatterbot
80
80
  args = streamify_search_options(@handlers[:search].opts)
81
81
  else
82
82
  method = :user
83
- args = nil
83
+ args = {
84
+ stall_warnings: "true"
85
+ }
84
86
  end
87
+
85
88
 
86
89
  streaming_client.send(method, args) do |object|
87
90
  handle_streaming_object(object)
@@ -131,7 +134,7 @@ module Chatterbot
131
134
  end
132
135
 
133
136
  def call_api_immediately?
134
- streaming?
137
+ !streaming?
135
138
  end
136
139
 
137
140
  def register_handler(method, opts = nil, &block)
@@ -142,8 +145,9 @@ module Chatterbot
142
145
  puts "Forcing usage of Streaming API to support #{method} calls"
143
146
  self.streaming = true
144
147
  elsif call_api_immediately?
148
+ @run_count += 1
145
149
  h = @handlers[method]
146
- send(method, *(h.opts)) do |obj|
150
+ self.send(method, *(h.opts)) do |obj|
147
151
  h.call(obj)
148
152
  end
149
153
  end
@@ -171,6 +171,7 @@ module Chatterbot
171
171
  #
172
172
  def get_screen_name(t = @access_token)
173
173
  return unless @screen_name.nil?
174
+ return if t.nil?
174
175
 
175
176
  oauth_response = t.get('/1.1/account/verify_credentials.json')
176
177
  @screen_name = JSON.parse(oauth_response.body)["screen_name"]
@@ -198,10 +199,10 @@ module Chatterbot
198
199
  @access_token = request_token.get_access_token(:oauth_verifier => pin.chomp)
199
200
  get_screen_name
200
201
 
201
- self.config[:token] = @access_token.token
202
- self.config[:secret] = @access_token.secret
202
+ self.config[:access_token] = @access_token.token
203
+ self.config[:access_token_secret] = @access_token.secret
203
204
 
204
- update_config unless ! do_update_config
205
+ #update_config unless ! do_update_config
205
206
  reset_client
206
207
 
207
208
  rescue OAuth::Unauthorized => e
@@ -93,6 +93,7 @@ module Chatterbot
93
93
  config[:consumer_key].nil? || config[:consumer_secret].nil?
94
94
  end
95
95
 
96
+
96
97
  #
97
98
  # has this script validated with Twitter OAuth?
98
99
  def needs_auth_token?
@@ -27,6 +27,12 @@ module Chatterbot
27
27
  end
28
28
  end
29
29
 
30
+ def to_h
31
+ @store.transaction do
32
+ Hash[@store.roots.map { |k| [k, @store[k]] }]
33
+ end
34
+ end
35
+
30
36
  # set/update a key
31
37
  def []=(key, value)
32
38
  return if @no_update == true
@@ -37,7 +43,7 @@ module Chatterbot
37
43
 
38
44
  # retrieve a key
39
45
  def [](key)
40
- if READ_ONLY_VARIABLES.include?(key)
46
+ if READ_ONLY_VARIABLES.include?(key) && @read_only[key]
41
47
  return @read_only[key]
42
48
  end
43
49
  @store.transaction do
@@ -7,7 +7,6 @@ module Chatterbot
7
7
  # handle the bots timeline
8
8
  def home_timeline(*args, &block)
9
9
  return unless require_login
10
-
11
10
  debug "check for home_timeline tweets since #{since_id}"
12
11
 
13
12
  opts = {
@@ -13,7 +13,7 @@ module Chatterbot
13
13
  path = File.join(Chatterbot.libdir, "..", "templates", "skeleton.txt")
14
14
  src = File.read(path)
15
15
 
16
- opts = bot.config.merge({
16
+ opts = bot.config.to_h.merge({
17
17
  :name => bot.botname,
18
18
  :timestamp => Time.now
19
19
  })
@@ -52,6 +52,8 @@ module Chatterbot
52
52
  end
53
53
  when Twitter::Streaming::FriendList
54
54
  debug "got friend list"
55
+ when Twitter::Streaming::StallWarning
56
+ debug "***** STALL WARNING *****"
55
57
  end
56
58
  end
57
59
 
@@ -22,10 +22,11 @@ module Chatterbot
22
22
  #:nocov:
23
23
  end
24
24
 
25
+
25
26
  # reply to a tweet
26
27
  def reply(txt, source)
27
28
  debug txt
28
- tweet txt, {:in_reply_to_status_id => source[:id]}, source
29
+ tweet txt, {:in_reply_to_status_id => source.id}, source
29
30
  end
30
31
  end
31
32
  end
@@ -5,7 +5,7 @@ module Chatterbot
5
5
  #
6
6
  module UI
7
7
  # Where to send users who need to get API keys
8
- API_SIGNUP_URL = "https://twitter.com/apps/new"
8
+ API_SIGNUP_URL = "https://apps.twitter.com/app/new"
9
9
 
10
10
 
11
11
  #:nocov:
@@ -52,27 +52,35 @@ module Chatterbot
52
52
  # sleep here so that if launchy has any output (which it does
53
53
  # sometimes), it doesn't interfere with our input prompt
54
54
 
55
- sleep(1)
55
+ sleep(2)
56
56
 
57
57
  puts "Paste your PIN and hit enter when you have completed authorization.\n\n"
58
58
  print "> "
59
59
 
60
- STDIN.readline.chomp
60
+ STDIN.readline.chomp.strip
61
61
  rescue Interrupt => e
62
62
  exit
63
63
  end
64
64
 
65
- #
66
- # Ask the user to get an API key from Twitter.
67
- def get_api_key
68
- green "****************************************"
69
- green "****************************************"
70
- green "**** API SETUP TIME! ****"
71
- green "****************************************"
72
- green "****************************************"
65
+ def ask_yes_no(q)
66
+ prompt = "> "
67
+ response = ""
73
68
 
69
+
70
+ while ! ["y", "n"].include?(response)
71
+ puts "#{q} [Y/N]"
72
+ print prompt
73
+ response = $stdin.gets.chomp.downcase[0]
74
+ end
74
75
 
75
- puts "Hey, looks like you need to get an API key from Twitter before you can get started."
76
+ if response == "y"
77
+ true
78
+ else
79
+ false
80
+ end
81
+ end
82
+
83
+ def send_to_app_creation
76
84
  puts "Please hit enter, and I will send you to #{API_SIGNUP_URL} to start the process."
77
85
  puts "(If it doesn't work, you can open a browser and paste the URL in manually)"
78
86
 
@@ -81,21 +89,82 @@ module Chatterbot
81
89
  STDIN.readline
82
90
 
83
91
  Launchy.open(API_SIGNUP_URL)
92
+
84
93
  # pause to allow any launchy output
85
- sleep(1)
94
+ sleep(2)
86
95
 
87
96
  puts "\n\n"
97
+
98
+
99
+ puts "Once you've filled out the app form, click on the 'Keys and Access Tokens' link"
100
+ end
101
+
102
+ #
103
+ # Ask the user to get an API key from Twitter.
104
+ def get_api_key
88
105
 
89
- print "\n\nPaste the 'API Key' here: "
106
+ green "****************************************"
107
+ green "****************************************"
108
+ green "**** API SETUP TIME! ****"
109
+ green "****************************************"
110
+ green "****************************************"
111
+
112
+
113
+ puts "\n\nWelcome to Chatterbot. Let's walk through the steps to get a bot running.\n\n"
114
+
115
+
116
+ #
117
+ # At this point, we don't have any API credentials at all for
118
+ # this bot, but it's possible the user has already setup an app.
119
+ # Let's ask!
120
+ #
121
+
122
+ puts "Hey, looks like you need to get an API key from Twitter before you can get started.\n\n"
123
+
124
+ app_already_exists = ask_yes_no("Have you already set up an app with Twitter?")
125
+
126
+ if app_already_exists
127
+ puts "Terrific! Let's get your bot running!\n\n"
128
+ else
129
+ puts "OK, I can help with that!\n\n"
130
+ send_to_app_creation
131
+ end
132
+
133
+
134
+ print "\n\nPaste the 'Consumer Key' here: "
90
135
  STDOUT.flush
91
- config[:consumer_key] = STDIN.readline.chomp
136
+ config[:consumer_key] = STDIN.readline.chomp.strip
92
137
 
93
- print "Paste the 'API Secret' here: "
138
+ print "Paste the 'Consumer Secret' here: "
94
139
  STDOUT.flush
95
- config[:consumer_secret] = STDIN.readline.chomp
140
+ config[:consumer_secret] = STDIN.readline.chomp.strip
141
+
142
+
143
+ puts "\n\nNow it's time to authorize your bot!\n\n"
144
+
145
+ if ! app_already_exists && ask_yes_no("Do you want to authorize a bot using the account that created the app?")
146
+ puts "OK, on the app page, you can click the 'Create my access token' button to proceed.\n\n"
147
+
148
+ print "Paste the 'Access Token' here: "
149
+ STDOUT.flush
150
+ config[:access_token] = STDIN.readline.chomp.strip
151
+
96
152
 
97
- # reset the client so we can re-init with new OAuth credentials
98
- reset_client
153
+ print "\n\nPaste the 'Access Token Secret' here: "
154
+ STDOUT.flush
155
+ config[:access_token_secret] = STDIN.readline.chomp.strip
156
+
157
+
158
+ # reset the client so we can re-init with new OAuth credentials
159
+ reset_client
160
+
161
+ # at this point we should have a fully validated client, so grab
162
+ # the screen name
163
+ @screen_name = client.user.screen_name rescue nil
164
+ else
165
+ reset_client
166
+ end
167
+
99
168
 
100
169
  #
101
170
  # capture ctrl-c and exit without a stack trace
@@ -1,3 +1,3 @@
1
1
  module Chatterbot
2
- VERSION = "2.0.0.pre"
2
+ VERSION = "2.0.2"
3
3
  end
@@ -14,10 +14,10 @@ describe "Chatterbot::Bot" do
14
14
 
15
15
  describe "REST API" do
16
16
  it "should work" do
17
- expect(@bot).to receive(:require_login).and_return(true)
18
- expect(@bot).to receive(:client).and_return(fake_home_timeline(3))
17
+ allow(@bot).to receive(:require_login).and_return(false)
18
+ allow(@bot).to receive(:client).and_return(fake_home_timeline(3))
19
19
  @bot.register_handler(:home_timeline) {}
20
- @bot.run!
20
+ #@bot.run!
21
21
  end
22
22
  end
23
23
 
@@ -44,6 +44,7 @@ describe "Chatterbot::Bot" do
44
44
 
45
45
  describe "stream!" do
46
46
  before(:each) do
47
+ @bot.streaming = true
47
48
  @sc = double(Twitter::Client)
48
49
  expect(@bot).to receive(:streaming_client).and_return(@sc)
49
50
  end
@@ -51,7 +52,6 @@ describe "Chatterbot::Bot" do
51
52
  it "tweaks settings for searches" do
52
53
  @bot.register_handler(:search, "hello") {}
53
54
  expect(@sc).to receive(:filter)
54
-
55
55
  @bot.stream!
56
56
  end
57
57
 
@@ -139,12 +139,11 @@ describe "Chatterbot::Client" do
139
139
  and_return(double(:token => "access_token", :secret => "access_secret"))
140
140
 
141
141
  expect(@bot).to receive(:get_screen_name)
142
- expect(@bot).to receive(:update_config)
143
142
 
144
143
  @bot.login
145
144
 
146
- expect(@bot.config[:token]).to eq("access_token")
147
- expect(@bot.config[:secret]).to eq("access_secret")
145
+ expect(@bot.config[:access_token]).to eq("access_token")
146
+ expect(@bot.config[:access_token_secret]).to eq("access_secret")
148
147
  end
149
148
 
150
149
  it "handles errors" do
@@ -9,6 +9,7 @@ describe "Chatterbot::Streaming" do
9
9
  describe "streaming_tweet_handler" do
10
10
  before(:each) do
11
11
  bot.skip_run = true
12
+ bot.streaming = true
12
13
  allow(bot.client).to receive(:user).and_return(user)
13
14
  end
14
15
 
@@ -31,6 +32,7 @@ describe "Chatterbot::Streaming" do
31
32
  describe "handle_streaming_object" do
32
33
  before(:each) {
33
34
  bot.skip_run = true
35
+ bot.streaming = true
34
36
  allow(bot.client).to receive(:user).and_return(user)
35
37
  }
36
38
 
@@ -41,7 +41,7 @@ describe "Chatterbot::Tweet" do
41
41
  it "calls require_login when replying" do
42
42
  bot = test_bot
43
43
  expect(bot).to receive(:require_login).and_return(false)
44
- bot.reply "reply test!", {"id" => 100}
44
+ bot.reply "reply test!", fake_tweet(100)
45
45
  end
46
46
 
47
47
  it "calls client.update with the right values" do
@@ -53,11 +53,8 @@ describe "Chatterbot::Tweet" do
53
53
 
54
54
  test_str = "test!"
55
55
 
56
- s = {
57
- :id => 100
58
- }
59
56
  expect(bot.client).to receive(:update).with(test_str, {:in_reply_to_status_id => 100})
60
- bot.reply test_str, s
57
+ bot.reply test_str, fake_tweet(100, 100)
61
58
  end
62
59
 
63
60
 
@@ -69,7 +66,7 @@ describe "Chatterbot::Tweet" do
69
66
  allow(bot).to receive(:debug_mode?).and_return(true)
70
67
 
71
68
  expect(bot.client).not_to receive(:update)
72
- bot.reply "no reply test!", {:id => 100}
69
+ bot.reply "no reply test!", fake_tweet(100)
73
70
  end
74
71
  end
75
72
 
@@ -21,6 +21,23 @@ require 'chatterbot/dsl'
21
21
  #
22
22
 
23
23
 
24
+ #
25
+ # These lines here are just to make sure you edit this file before
26
+ # trying to run your bot. You can safely remove them once you've
27
+ # looked through this file.
28
+ #
29
+ puts "========================"
30
+ puts "========================"
31
+ puts "========================"
32
+ puts "\n\n\n"
33
+
34
+ puts "Hey there! You should open %{name}.rb and take a look before running this script."
35
+
36
+ puts "\n\n\n"
37
+ exit
38
+
39
+
40
+
24
41
  #
25
42
  # Placing your security credentials right in a script like this is
26
43
  # handy, but potentially dangerous, especially if your code is
@@ -78,13 +95,13 @@ exclude bad_words
78
95
  only_interact_with_followers
79
96
 
80
97
  #
81
- # Specifying 'streaming true' will cause Chatterbot to use Twitter's
98
+ # Specifying 'use_streaming' will cause Chatterbot to use Twitter's
82
99
  # Streaming API. Your bot will run constantly, listening for tweets.
83
100
  # Alternatively, you can run your bot as a cron/scheduled job. In that
84
101
  # case, do not use this line. Every time you run your bot, it will
85
102
  # execute once, and then exit.
86
103
  #
87
- streaming true
104
+ use_streaming
88
105
 
89
106
  #
90
107
  # Here's the fun stuff!
@@ -100,19 +117,19 @@ streaming true
100
117
  # Still here? Hopefully it's because you're going to do something cool
101
118
  # with the data that doesn't bother other people. Hooray!
102
119
  #
103
- search "chatterbot" do |tweet|
104
- # here's the content of a tweet
105
- puts tweets.text
106
- end
120
+ #search "chatterbot" do |tweet|
121
+ # # here's the content of a tweet
122
+ # puts tweets.text
123
+ #end
107
124
 
108
125
  #
109
126
  # this block responds to mentions of your bot
110
127
  #
111
- replies do |tweet|
112
- # Any time you put the #USER# token in a tweet, Chatterbot will
113
- # replace it with the handle of the user you are interacting with
114
- reply "Yes #USER#, you are very kind to say that!", tweet
115
- end
128
+ #replies do |tweet|
129
+ # # Any time you put the #USER# token in a tweet, Chatterbot will
130
+ # # replace it with the handle of the user you are interacting with
131
+ # reply "Yes #USER#, you are very kind to say that!", tweet
132
+ #end
116
133
 
117
134
  #
118
135
  # this block handles incoming Direct Messages. if you want to do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chatterbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colin Mitchell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-01 00:00:00.000000000 Z
11
+ date: 2016-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redcarpet
@@ -28,30 +28,30 @@ dependencies:
28
28
  name: oauth
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.4.7
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.4.7
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: twitter
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 5.14.0
47
+ version: 5.16.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 5.14.0
54
+ version: 5.16.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: launchy
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -112,16 +112,16 @@ dependencies:
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "<"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '11'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "<"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '11'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -281,9 +281,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
281
281
  version: '0'
282
282
  required_rubygems_version: !ruby/object:Gem::Requirement
283
283
  requirements:
284
- - - ">"
284
+ - - ">="
285
285
  - !ruby/object:Gem::Version
286
- version: 1.3.1
286
+ version: '0'
287
287
  requirements: []
288
288
  rubyforge_project: chatterbot
289
289
  rubygems_version: 2.2.2