lita-ai 0.1.0
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 +7 -0
- data/.gitignore +17 -0
- data/.ruby-version +1 -0
- data/.travis.yml +9 -0
- data/Gemfile +3 -0
- data/README.md +40 -0
- data/Rakefile +6 -0
- data/example.png +0 -0
- data/lib/lita-ai.rb +13 -0
- data/lib/lita/handlers/ai.rb +35 -0
- data/lita-ai.gemspec +27 -0
- data/locales/en.yml +4 -0
- data/spec/lita/handlers/ai_spec.rb +78 -0
- data/spec/spec_helper.rb +14 -0
- data/templates/.gitkeep +0 -0
- metadata +187 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2931af0b523c0e3e4ffd89b5bc0aaaac5422ae40
|
4
|
+
data.tar.gz: be07695ab49fee17646e53625280eccbb0de6dfa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2b64d9274a6955b626b6b6cd6fbfcfdc3f178d0983965b3b70e29dc9467d1a741337ea9a1ef0e8ffb1692eae75ba5dd043bc77e73ba32ead49d751236167e677
|
7
|
+
data.tar.gz: 09fc0d1d3d421e5a257d7077d4c42b59df17cecbc6c9a381d125ab98025662356e01d053070cbe8ab1673baaaba05ccace35cfc7aca6ec8e1c590cbc08ea1d1f
|
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.3
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# lita-ai
|
2
|
+
|
3
|
+
[](https://travis-ci.org/tombeynon/lita-ai)
|
4
|
+
[](https://coveralls.io/github/tombeynon/lita-ai?branch=master)
|
5
|
+
|
6
|
+
A Lita handler like no other; this makes Lita respond to any unhandled messages using Cleverbot.
|
7
|
+
|
8
|
+
What does that mean?
|
9
|
+
|
10
|
+

|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add lita-ai to your Lita instance's Gemfile:
|
15
|
+
|
16
|
+
``` ruby
|
17
|
+
gem 'lita-ai'
|
18
|
+
```
|
19
|
+
|
20
|
+
## Configuration
|
21
|
+
|
22
|
+
None
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
Just send a message mentioning your robot by it's name or alias, either directly as a command or anywhere else in the message.
|
27
|
+
|
28
|
+
```
|
29
|
+
> lita what's up?
|
30
|
+
#=> Not much, I baked brownies today.
|
31
|
+
|
32
|
+
> could I have some lita?
|
33
|
+
#=> Sure, when and where?
|
34
|
+
```
|
35
|
+
|
36
|
+
Your robots name will be stripped from the message we send to Cleverbot.. we don't want to confuse it anymore than it already is.
|
37
|
+
|
38
|
+
## License
|
39
|
+
|
40
|
+
[MIT](http://opensource.org/licenses/MIT)
|
data/Rakefile
ADDED
data/example.png
ADDED
Binary file
|
data/lib/lita-ai.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "lita"
|
2
|
+
require "clever-api"
|
3
|
+
|
4
|
+
Lita.load_locales Dir[File.expand_path(
|
5
|
+
File.join("..", "..", "locales", "*.yml"), __FILE__
|
6
|
+
)]
|
7
|
+
|
8
|
+
require "lita/handlers/ai"
|
9
|
+
|
10
|
+
Lita::Handlers::Ai.template_root File.expand_path(
|
11
|
+
File.join("..", "..", "templates"),
|
12
|
+
__FILE__
|
13
|
+
)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Lita
|
2
|
+
module Handlers
|
3
|
+
class Ai < Handler
|
4
|
+
on :unhandled_message, :chat
|
5
|
+
|
6
|
+
def self.cleverbot
|
7
|
+
@cleverbot ||= CleverBot.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def chat(payload)
|
11
|
+
return unless chatting?(payload[:message])
|
12
|
+
message = extract_aliases(payload[:message])
|
13
|
+
reply = self.class.cleverbot.think(message.body)
|
14
|
+
robot.send_message(message.source, reply)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def chatting?(message)
|
20
|
+
message.command? || message.body =~ /#{aliases.join('|')}/i
|
21
|
+
end
|
22
|
+
|
23
|
+
def extract_aliases(message)
|
24
|
+
body = message.body.sub(/#{aliases.join('|')}/i, '').strip
|
25
|
+
Message.new(robot, body, message.source)
|
26
|
+
end
|
27
|
+
|
28
|
+
def aliases
|
29
|
+
[robot.mention_name, robot.alias].map{|a| a unless a == ''}.compact
|
30
|
+
end
|
31
|
+
|
32
|
+
Lita.register_handler(self)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lita-ai.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-ai"
|
3
|
+
spec.version = "0.1.0"
|
4
|
+
spec.authors = ["Tom Beynon"]
|
5
|
+
spec.email = ["tom@tombeynon.co.uk"]
|
6
|
+
spec.description = "Makes lita respond to unhandled messages using Cleverbot"
|
7
|
+
spec.summary = "Makes lita respond to unhandled messages using Cleverbot"
|
8
|
+
spec.homepage = "https://github.com/tombeynon/lita-ai"
|
9
|
+
spec.license = "MIT"
|
10
|
+
spec.metadata = { "lita_plugin_type" => "handler" }
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_runtime_dependency "lita", ">= 4.6"
|
18
|
+
spec.add_runtime_dependency "clever-api", "~> 0.0.2"
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
spec.add_development_dependency "pry-byebug"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rack-test"
|
24
|
+
spec.add_development_dependency "rspec", ">= 3.0.0"
|
25
|
+
spec.add_development_dependency "simplecov"
|
26
|
+
spec.add_development_dependency "coveralls"
|
27
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lita::Handlers::Ai, lita_handler: true do
|
4
|
+
describe 'handling unhandled_message' do
|
5
|
+
context 'unhandled directed at lita' do
|
6
|
+
it 'uses cleverbot to reply' do
|
7
|
+
allow(subject.class.cleverbot).to receive(:think){ 'Hello' }
|
8
|
+
send_message('Hi lita')
|
9
|
+
expect(replies.last).to eq('Hello')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
context 'unhandled not directed at lita' do
|
13
|
+
it 'doesn\'t reply' do
|
14
|
+
send_message('Not talking to you')
|
15
|
+
expect(replies.last).to be_nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#chat' do
|
21
|
+
let(:cleverbot){ double(:cleverbot) }
|
22
|
+
let(:source){ double(:source) }
|
23
|
+
context 'commanding lita' do
|
24
|
+
let(:message){ double(:message, body: 'Hello', command?: true, source: source) }
|
25
|
+
|
26
|
+
it 'strips out the robot name' do
|
27
|
+
expect(subject.class.cleverbot).to receive(:think).with('Hello')
|
28
|
+
subject.chat(message: message)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'strips out the robot aliases' do
|
32
|
+
robot.alias = 'bender'
|
33
|
+
allow(message).to receive(:body){ 'Hi bender' }
|
34
|
+
expect(subject.class.cleverbot).to receive(:think).with('Hi')
|
35
|
+
subject.chat(message: message)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'sends a message with cleverbot\'s response' do
|
39
|
+
reply = double(:reply)
|
40
|
+
expect(subject.class.cleverbot).to receive(:think).with('Hello'){ reply }
|
41
|
+
expect(subject.robot).to receive(:send_message).with(source, reply)
|
42
|
+
subject.chat(message: message)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'mentioning lita' do
|
47
|
+
let(:message){ double(:message, body: 'Hi lita', command?: false, source: source) }
|
48
|
+
|
49
|
+
it 'strips out the robot name' do
|
50
|
+
expect(subject.class.cleverbot).to receive(:think).with('Hi')
|
51
|
+
subject.chat(message: message)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'strips out the robot aliases' do
|
55
|
+
robot.alias = 'bender'
|
56
|
+
allow(message).to receive(:body){ 'Hello bender' }
|
57
|
+
expect(subject.class.cleverbot).to receive(:think).with('Hello')
|
58
|
+
subject.chat(message: message)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'sends a message with cleverbot\'s response' do
|
62
|
+
reply = double(:reply)
|
63
|
+
expect(subject.class.cleverbot).to receive(:think).with('Hi'){ reply }
|
64
|
+
expect(subject.robot).to receive(:send_message).with(source, reply)
|
65
|
+
subject.chat(message: message)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'is not chatting' do
|
70
|
+
let(:message){ double(:message, body: 'Not talking to you', command?: false, source: source) }
|
71
|
+
|
72
|
+
it 'Doesn\'t call cleverbot' do
|
73
|
+
expect(subject.class.cleverbot).to_not receive(:think)
|
74
|
+
subject.chat(message: message)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "simplecov"
|
2
|
+
require "coveralls"
|
3
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
4
|
+
SimpleCov::Formatter::HTMLFormatter,
|
5
|
+
Coveralls::SimpleCov::Formatter
|
6
|
+
]
|
7
|
+
SimpleCov.start { add_filter "/spec/" }
|
8
|
+
|
9
|
+
require "lita-ai"
|
10
|
+
require "lita/rspec"
|
11
|
+
|
12
|
+
# A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
|
13
|
+
# was generated with Lita 4, the compatibility mode should be left disabled.
|
14
|
+
Lita.version_3_compatibility_mode = false
|
data/templates/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-ai
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Beynon
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lita
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: clever-api
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack-test
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 3.0.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.0.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: coveralls
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: Makes lita respond to unhandled messages using Cleverbot
|
140
|
+
email:
|
141
|
+
- tom@tombeynon.co.uk
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- ".gitignore"
|
147
|
+
- ".ruby-version"
|
148
|
+
- ".travis.yml"
|
149
|
+
- Gemfile
|
150
|
+
- README.md
|
151
|
+
- Rakefile
|
152
|
+
- example.png
|
153
|
+
- lib/lita-ai.rb
|
154
|
+
- lib/lita/handlers/ai.rb
|
155
|
+
- lita-ai.gemspec
|
156
|
+
- locales/en.yml
|
157
|
+
- spec/lita/handlers/ai_spec.rb
|
158
|
+
- spec/spec_helper.rb
|
159
|
+
- templates/.gitkeep
|
160
|
+
homepage: https://github.com/tombeynon/lita-ai
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata:
|
164
|
+
lita_plugin_type: handler
|
165
|
+
post_install_message:
|
166
|
+
rdoc_options: []
|
167
|
+
require_paths:
|
168
|
+
- lib
|
169
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
179
|
+
requirements: []
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 2.4.5.1
|
182
|
+
signing_key:
|
183
|
+
specification_version: 4
|
184
|
+
summary: Makes lita respond to unhandled messages using Cleverbot
|
185
|
+
test_files:
|
186
|
+
- spec/lita/handlers/ai_spec.rb
|
187
|
+
- spec/spec_helper.rb
|