chatterbot 1.0.2 → 2.0.0.pre
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 +4 -4
- data/.travis.yml +2 -2
- data/LICENSE.txt +18 -9
- data/README.markdown +83 -65
- data/bin/chatterbot-register +0 -1
- data/chatterbot.gemspec +3 -10
- data/examples/class_bot.rb +0 -1
- data/examples/echoes_bot.rb +2 -2
- data/examples/search_bot.rb +1 -1
- data/examples/streaming_bot.rb +21 -15
- data/lib/chatterbot.rb +7 -12
- data/lib/chatterbot/blocklist.rb +61 -0
- data/lib/chatterbot/bot.rb +118 -13
- data/lib/chatterbot/client.rb +52 -20
- data/lib/chatterbot/config.rb +92 -215
- data/lib/chatterbot/config_manager.rb +49 -0
- data/lib/chatterbot/direct_messages.rb +46 -0
- data/lib/chatterbot/dsl.rb +157 -78
- data/lib/chatterbot/followers.rb +4 -0
- data/lib/chatterbot/handler.rb +29 -0
- data/lib/chatterbot/helpers.rb +14 -3
- data/lib/chatterbot/home_timeline.rb +5 -8
- data/lib/chatterbot/logging.rb +0 -17
- data/lib/chatterbot/profile.rb +0 -1
- data/lib/chatterbot/reply.rb +6 -11
- data/lib/chatterbot/retweet.rb +2 -6
- data/lib/chatterbot/safelist.rb +33 -0
- data/lib/chatterbot/search.rb +26 -16
- data/lib/chatterbot/skeleton.rb +7 -38
- data/lib/chatterbot/streaming.rb +26 -33
- data/lib/chatterbot/tweet.rb +0 -1
- data/lib/chatterbot/ui.rb +9 -2
- data/lib/chatterbot/utils.rb +13 -0
- data/lib/chatterbot/version.rb +1 -1
- data/spec/blocklist_spec.rb +170 -0
- data/spec/bot_spec.rb +83 -8
- data/spec/client_spec.rb +61 -7
- data/spec/config_manager_spec.rb +59 -0
- data/spec/config_spec.rb +33 -158
- data/spec/direct_messages_spec.rb +115 -0
- data/spec/dsl_spec.rb +95 -53
- data/spec/handler_spec.rb +27 -0
- data/spec/helpers_spec.rb +7 -11
- data/spec/home_timeline_spec.rb +42 -31
- data/spec/logging_spec.rb +0 -34
- data/spec/reply_spec.rb +10 -34
- data/spec/search_spec.rb +65 -6
- data/spec/spec_helper.rb +25 -1
- data/spec/streaming_spec.rb +56 -58
- data/spec/whitelist_spec.rb +10 -10
- data/specs.watchr +2 -4
- data/templates/skeleton.txt +148 -12
- metadata +20 -22
- data/bin/chatterbot-blacklist +0 -65
- data/bin/chatterbot-status +0 -55
- data/examples/loop_bot.rb +0 -44
- data/lib/chatterbot/blacklist.rb +0 -61
- data/lib/chatterbot/db.rb +0 -79
- data/lib/chatterbot/streaming_handler.rb +0 -96
- data/lib/chatterbot/whitelist.rb +0 -32
- data/spec/blacklist_spec.rb +0 -116
- data/spec/db_spec.rb +0 -53
- data/spec/streaming_handler_spec.rb +0 -78
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:
|
4
|
+
version: 2.0.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Colin Mitchell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redcarpet
|
@@ -28,14 +28,14 @@ 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
|
@@ -196,9 +196,7 @@ description: A ruby framework for writing bots that run on Twitter. Comes with a
|
|
196
196
|
DSL for easy coding.
|
197
197
|
email: colin@muffinlabs.com
|
198
198
|
executables:
|
199
|
-
- chatterbot-blacklist
|
200
199
|
- chatterbot-register
|
201
|
-
- chatterbot-status
|
202
200
|
extensions: []
|
203
201
|
extra_rdoc_files: []
|
204
202
|
files:
|
@@ -209,50 +207,50 @@ files:
|
|
209
207
|
- LICENSE.txt
|
210
208
|
- README.markdown
|
211
209
|
- Rakefile
|
212
|
-
- bin/chatterbot-blacklist
|
213
210
|
- bin/chatterbot-register
|
214
|
-
- bin/chatterbot-status
|
215
211
|
- chatterbot.gemspec
|
216
212
|
- examples/class_bot.rb
|
217
213
|
- examples/config.yml.example
|
218
214
|
- examples/dsl_test.rb
|
219
215
|
- examples/echoes_bot.rb
|
220
|
-
- examples/loop_bot.rb
|
221
216
|
- examples/search_bot.rb
|
222
217
|
- examples/streaming_bot.rb
|
223
218
|
- examples/tweet_logger.rb
|
224
219
|
- lib/chatterbot.rb
|
225
|
-
- lib/chatterbot/
|
220
|
+
- lib/chatterbot/blocklist.rb
|
226
221
|
- lib/chatterbot/bot.rb
|
227
222
|
- lib/chatterbot/client.rb
|
228
223
|
- lib/chatterbot/config.rb
|
229
|
-
- lib/chatterbot/
|
224
|
+
- lib/chatterbot/config_manager.rb
|
225
|
+
- lib/chatterbot/direct_messages.rb
|
230
226
|
- lib/chatterbot/dsl.rb
|
231
227
|
- lib/chatterbot/favorite.rb
|
232
228
|
- lib/chatterbot/followers.rb
|
229
|
+
- lib/chatterbot/handler.rb
|
233
230
|
- lib/chatterbot/helpers.rb
|
234
231
|
- lib/chatterbot/home_timeline.rb
|
235
232
|
- lib/chatterbot/logging.rb
|
236
233
|
- lib/chatterbot/profile.rb
|
237
234
|
- lib/chatterbot/reply.rb
|
238
235
|
- lib/chatterbot/retweet.rb
|
236
|
+
- lib/chatterbot/safelist.rb
|
239
237
|
- lib/chatterbot/search.rb
|
240
238
|
- lib/chatterbot/skeleton.rb
|
241
239
|
- lib/chatterbot/streaming.rb
|
242
|
-
- lib/chatterbot/streaming_handler.rb
|
243
240
|
- lib/chatterbot/tweet.rb
|
244
241
|
- lib/chatterbot/ui.rb
|
245
242
|
- lib/chatterbot/utils.rb
|
246
243
|
- lib/chatterbot/version.rb
|
247
|
-
-
|
248
|
-
- spec/blacklist_spec.rb
|
244
|
+
- spec/blocklist_spec.rb
|
249
245
|
- spec/bot_spec.rb
|
250
246
|
- spec/client_spec.rb
|
247
|
+
- spec/config_manager_spec.rb
|
251
248
|
- spec/config_spec.rb
|
252
|
-
- spec/
|
249
|
+
- spec/direct_messages_spec.rb
|
253
250
|
- spec/dsl_spec.rb
|
254
251
|
- spec/favorite_spec.rb
|
255
252
|
- spec/followers_spec.rb
|
253
|
+
- spec/handler_spec.rb
|
256
254
|
- spec/helpers_spec.rb
|
257
255
|
- spec/home_timeline_spec.rb
|
258
256
|
- spec/logging_spec.rb
|
@@ -262,7 +260,6 @@ files:
|
|
262
260
|
- spec/search_spec.rb
|
263
261
|
- spec/skeleton_spec.rb
|
264
262
|
- spec/spec_helper.rb
|
265
|
-
- spec/streaming_handler_spec.rb
|
266
263
|
- spec/streaming_spec.rb
|
267
264
|
- spec/tweet_spec.rb
|
268
265
|
- spec/utils_spec.rb
|
@@ -271,7 +268,7 @@ files:
|
|
271
268
|
- templates/skeleton.txt
|
272
269
|
homepage: http://github.com/muffinista/chatterbot
|
273
270
|
licenses:
|
274
|
-
-
|
271
|
+
- MIT
|
275
272
|
metadata: {}
|
276
273
|
post_install_message:
|
277
274
|
rdoc_options: []
|
@@ -284,9 +281,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
284
281
|
version: '0'
|
285
282
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
286
283
|
requirements:
|
287
|
-
- - "
|
284
|
+
- - ">"
|
288
285
|
- !ruby/object:Gem::Version
|
289
|
-
version:
|
286
|
+
version: 1.3.1
|
290
287
|
requirements: []
|
291
288
|
rubyforge_project: chatterbot
|
292
289
|
rubygems_version: 2.2.2
|
@@ -294,14 +291,16 @@ signing_key:
|
|
294
291
|
specification_version: 4
|
295
292
|
summary: A ruby framework for writing Twitter bots
|
296
293
|
test_files:
|
297
|
-
- spec/
|
294
|
+
- spec/blocklist_spec.rb
|
298
295
|
- spec/bot_spec.rb
|
299
296
|
- spec/client_spec.rb
|
297
|
+
- spec/config_manager_spec.rb
|
300
298
|
- spec/config_spec.rb
|
301
|
-
- spec/
|
299
|
+
- spec/direct_messages_spec.rb
|
302
300
|
- spec/dsl_spec.rb
|
303
301
|
- spec/favorite_spec.rb
|
304
302
|
- spec/followers_spec.rb
|
303
|
+
- spec/handler_spec.rb
|
305
304
|
- spec/helpers_spec.rb
|
306
305
|
- spec/home_timeline_spec.rb
|
307
306
|
- spec/logging_spec.rb
|
@@ -311,7 +310,6 @@ test_files:
|
|
311
310
|
- spec/search_spec.rb
|
312
311
|
- spec/skeleton_spec.rb
|
313
312
|
- spec/spec_helper.rb
|
314
|
-
- spec/streaming_handler_spec.rb
|
315
313
|
- spec/streaming_spec.rb
|
316
314
|
- spec/tweet_spec.rb
|
317
315
|
- spec/utils_spec.rb
|
data/bin/chatterbot-blacklist
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
3
|
-
|
4
|
-
require 'chatterbot'
|
5
|
-
require 'optparse'
|
6
|
-
|
7
|
-
include Chatterbot::Helpers
|
8
|
-
include Chatterbot::Blacklist
|
9
|
-
include Chatterbot::Config
|
10
|
-
include Chatterbot::DB
|
11
|
-
include Chatterbot::Logging
|
12
|
-
|
13
|
-
Chatterbot::from_helper = true
|
14
|
-
|
15
|
-
@display_blacklist = false
|
16
|
-
|
17
|
-
#
|
18
|
-
# pull in any arguments and set them as env variables
|
19
|
-
#
|
20
|
-
opts = OptionParser.new
|
21
|
-
opts.banner = "Usage: #{File.basename($0)} [options]"
|
22
|
-
|
23
|
-
opts.separator ""
|
24
|
-
opts.separator "Specific options:"
|
25
|
-
|
26
|
-
opts.on('-d', '--db [ARG]', "Specify a DB connection URI") { |d| ENV["chatterbot_db"] = d }
|
27
|
-
opts.on('-c', '--config [ARG]', "Specify a config file to use") { |c| ENV["chatterbot_config"] = c }
|
28
|
-
opts.on('-p', '--print', "Print out the current blacklist") { @display_blacklist = true }
|
29
|
-
opts.on_tail("-h", "--help", "Show this message") do
|
30
|
-
puts opts
|
31
|
-
exit
|
32
|
-
end
|
33
|
-
|
34
|
-
extra = opts.parse!(ARGV)
|
35
|
-
|
36
|
-
if ! has_db?
|
37
|
-
puts "You need to specify a db connection!"
|
38
|
-
exit
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
if @display_blacklist
|
43
|
-
db[:blacklist].each do |u|
|
44
|
-
puts u.inspect
|
45
|
-
end
|
46
|
-
|
47
|
-
elsif extra.empty?
|
48
|
-
#
|
49
|
-
# iterate through STDIN and add anything to the blacklist. nothing too shiny here.
|
50
|
-
#
|
51
|
-
$stdin.each_line do |l|
|
52
|
-
add_to_blacklist(l.chomp)
|
53
|
-
end
|
54
|
-
else
|
55
|
-
#
|
56
|
-
# add any users specified on the command-line
|
57
|
-
#
|
58
|
-
extra.each do |l|
|
59
|
-
add_to_blacklist(l.chomp)
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
|
data/bin/chatterbot-status
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
3
|
-
|
4
|
-
require 'chatterbot'
|
5
|
-
require 'optparse'
|
6
|
-
|
7
|
-
include Chatterbot::Helpers
|
8
|
-
include Chatterbot::Config
|
9
|
-
include Chatterbot::DB
|
10
|
-
|
11
|
-
Chatterbot::from_helper = true
|
12
|
-
|
13
|
-
@tweet_count = 5
|
14
|
-
|
15
|
-
#
|
16
|
-
# pull in any arguments and set them as env variables
|
17
|
-
#
|
18
|
-
opts = OptionParser.new
|
19
|
-
opts.banner = "Usage: #{File.basename($0)} [options]"
|
20
|
-
|
21
|
-
opts.separator ""
|
22
|
-
opts.separator "Specific options:"
|
23
|
-
|
24
|
-
opts.on('-d', '--db [ARG]', "Specify a DB connection URI") { |d| ENV["chatterbot_db"] = d }
|
25
|
-
opts.on('-c', '--config [ARG]', "Specify a config file to use") { |c| ENV["chatterbot_config"] = c }
|
26
|
-
opts.on('-t', '--tweets [ARG]', "How many tweets to display") { |t| @tweet_count = t.to_i }
|
27
|
-
|
28
|
-
opts.on_tail("-h", "--help", "Show this message") do
|
29
|
-
puts opts
|
30
|
-
exit
|
31
|
-
end
|
32
|
-
|
33
|
-
extra = opts.parse!(ARGV)
|
34
|
-
|
35
|
-
#
|
36
|
-
# will only work if user is tracking tweets in a db
|
37
|
-
#
|
38
|
-
if ! has_db?
|
39
|
-
puts "You need to specify a db connection!"
|
40
|
-
exit
|
41
|
-
end
|
42
|
-
|
43
|
-
#
|
44
|
-
# return total number of tweets sent in last 'days' days
|
45
|
-
#
|
46
|
-
def count_for_period(bot, days=1)
|
47
|
-
db[:tweets].filter(:bot => bot[:id]).filter{created_at > (Time.now - (days*86400))}.count
|
48
|
-
end
|
49
|
-
|
50
|
-
db[:config].each do |bot|
|
51
|
-
puts "Tweets from #{bot[:id]} #{[1,7,30].collect{|d| count_for_period(bot, d)}.join("/")}"
|
52
|
-
db[:tweets].filter(:bot => bot[:id]).order(:created_at.desc).limit(@tweet_count).each do |t|
|
53
|
-
puts "#{t[:created_at]}: #{t[:txt]} (#{t[:source_tweet]})"
|
54
|
-
end
|
55
|
-
end
|
data/examples/loop_bot.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
#
|
4
|
-
# simple example of how to run a bot in a loop. if you want to do
|
5
|
-
# that, you need to call update_config to update the database at the
|
6
|
-
# end of each iteration -- this will keep you from processing the same
|
7
|
-
# tweets multiple times
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
#
|
12
|
-
# require the dsl lib to include all the methods you see below.
|
13
|
-
#
|
14
|
-
require 'rubygems'
|
15
|
-
require 'chatterbot/dsl'
|
16
|
-
|
17
|
-
puts "Loading echoes_bot.rb"
|
18
|
-
|
19
|
-
##
|
20
|
-
## If I wanted to exclude some terms from triggering this bot, I would list them here.
|
21
|
-
## For now, we'll block URLs to keep this from being a source of spam
|
22
|
-
##
|
23
|
-
exclude "http://"
|
24
|
-
|
25
|
-
blacklist "mean_user, private_user"
|
26
|
-
|
27
|
-
loop do
|
28
|
-
|
29
|
-
puts "run search #{since_id}"
|
30
|
-
search "twitter" do |tweet|
|
31
|
-
# here you could do something with a tweet
|
32
|
-
end
|
33
|
-
|
34
|
-
puts "checking for replies to me"
|
35
|
-
replies do |tweet|
|
36
|
-
src = "#USER# it is very nice of you to say that!"
|
37
|
-
reply src, tweet
|
38
|
-
end
|
39
|
-
|
40
|
-
# explicitly update our config
|
41
|
-
update_config
|
42
|
-
|
43
|
-
sleep 1
|
44
|
-
end
|
data/lib/chatterbot/blacklist.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
module Chatterbot
|
2
|
-
|
3
|
-
#
|
4
|
-
# methods for preventing the bot from spamming people who don't want to hear from it
|
5
|
-
module Blacklist
|
6
|
-
attr_accessor :exclude, :blacklist
|
7
|
-
|
8
|
-
# return a list of text strings which we will check for in incoming tweets.
|
9
|
-
# If the text is listed, we won't use this tweet
|
10
|
-
def exclude
|
11
|
-
@exclude || []
|
12
|
-
end
|
13
|
-
|
14
|
-
# A list of Twitter users that don't want to hear from the bot.
|
15
|
-
def blacklist
|
16
|
-
@blacklist || []
|
17
|
-
end
|
18
|
-
def blacklist=(b)
|
19
|
-
@blacklist = b
|
20
|
-
end
|
21
|
-
|
22
|
-
#
|
23
|
-
# Based on the text of this tweet, should it be skipped?
|
24
|
-
def skip_me?(s)
|
25
|
-
search = s.respond_to?(:text) ? s.text : s
|
26
|
-
exclude.detect { |e| search.downcase.include?(e) } != nil
|
27
|
-
end
|
28
|
-
|
29
|
-
#
|
30
|
-
# Is this tweet from a user on our blacklist?
|
31
|
-
def on_blacklist?(s)
|
32
|
-
search = (s.respond_to?(:user) ? from_user(s) : s).downcase
|
33
|
-
blacklist.any? { |b| search.include?(b.downcase) } ||
|
34
|
-
on_global_blacklist?(search)
|
35
|
-
end
|
36
|
-
|
37
|
-
#
|
38
|
-
# Is this user on our global blacklist?
|
39
|
-
def on_global_blacklist?(user)
|
40
|
-
return false if ! has_db?
|
41
|
-
db[:blacklist].where(:user => user).count > 0
|
42
|
-
end
|
43
|
-
|
44
|
-
#
|
45
|
-
# add the specified user to the global blacklist
|
46
|
-
def add_to_blacklist(user)
|
47
|
-
user = user.is_a?(Hash) ? user[:from_user] : user
|
48
|
-
|
49
|
-
# don't try and add if we don't have a DB connection, or if the
|
50
|
-
# user is already on the list
|
51
|
-
return if ! has_db? || on_global_blacklist?(user)
|
52
|
-
|
53
|
-
# make sure we don't have an @ at the beginning of the username
|
54
|
-
user.gsub!(/^@/, "")
|
55
|
-
debug "adding #{user} to blacklist"
|
56
|
-
|
57
|
-
db[:blacklist].insert({ :user => user, :created_at => Time.now }) #
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
data/lib/chatterbot/db.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
module Chatterbot
|
2
|
-
|
3
|
-
#
|
4
|
-
# routines for optionally interacting with a database for logging
|
5
|
-
# tweets, and storing config data there. Uses Sequel to handle the
|
6
|
-
# heavy lifing.
|
7
|
-
module DB
|
8
|
-
#
|
9
|
-
# connect to the database, and generate any missing tables
|
10
|
-
def db
|
11
|
-
@_db ||= connect_and_validate
|
12
|
-
end
|
13
|
-
|
14
|
-
#:nocov:
|
15
|
-
def display_db_config_notice
|
16
|
-
puts "ERROR: You have specified a DB connection, but you need to install the sequel gem to use it"
|
17
|
-
end
|
18
|
-
#:nocov:
|
19
|
-
|
20
|
-
protected
|
21
|
-
|
22
|
-
#
|
23
|
-
# get a DB object from Sequel
|
24
|
-
def get_connection
|
25
|
-
if ! has_sequel? && config.has_key?(:db_uri)
|
26
|
-
display_db_config_notice
|
27
|
-
elsif has_sequel?
|
28
|
-
Sequel.connect(config[:db_uri])
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
#
|
33
|
-
# try and connect to the DB, and create tables that are missing.
|
34
|
-
def connect_and_validate
|
35
|
-
conn = get_connection
|
36
|
-
return if conn.nil?
|
37
|
-
|
38
|
-
if ! conn.tables.include?(:blacklist)
|
39
|
-
conn.create_table :blacklist do
|
40
|
-
String :user, :primary_key => true
|
41
|
-
DateTime :created_at
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
if ! conn.tables.include?(:tweets)
|
46
|
-
conn.create_table :tweets do
|
47
|
-
primary_key :id
|
48
|
-
String :txt
|
49
|
-
String :bot
|
50
|
-
String :user
|
51
|
-
String :source_id
|
52
|
-
String :source_tweet
|
53
|
-
|
54
|
-
DateTime :created_at
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
if ! conn.tables.include?(:config)
|
59
|
-
conn.create_table :config do
|
60
|
-
String :id, :primary_key => true
|
61
|
-
|
62
|
-
Bignum :since_id
|
63
|
-
Bignum :since_id_reply
|
64
|
-
|
65
|
-
String :secret
|
66
|
-
String :token
|
67
|
-
String :consumer_secret
|
68
|
-
String :consumer_key
|
69
|
-
|
70
|
-
DateTime :created_at
|
71
|
-
DateTime :updated_at
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
conn
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
end
|