wit_bot 0.5.0 → 0.5.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.
- checksums.yaml +4 -4
- data/lib/generators/wit_bot/message_bus/USAGE +8 -0
- data/lib/generators/wit_bot/message_bus/message_bus_generator.rb +35 -0
- data/lib/generators/wit_bot/message_bus/templates/job.rb.erb +13 -0
- data/lib/generators/wit_bot/message_bus/templates/message_bus_controller.rb.erb +12 -0
- data/lib/generators/wit_bot/message_bus/templates/message_bus_listener.rb.erb +45 -0
- data/lib/generators/wit_bot/model/USAGE +8 -0
- data/lib/generators/wit_bot/model/model_generator.rb +30 -0
- data/lib/generators/wit_bot/model/templates/model.rb.erb +16 -0
- data/lib/wit_bot/version.rb +1 -1
- metadata +9 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6f8586c33704055bce42268f28aa62d9342368a
|
4
|
+
data.tar.gz: c64ca87eb3a43d348f737f63336f76fe4eb95a2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 742baac6a12728fd5bbcd6968889602f2d8e805e652c1e72afd1edb02074dc796c27839c8f86ad0e51cdb52d2cd4ae0988bd8cda68f4bbfb4f5a70beef4f4a67
|
7
|
+
data.tar.gz: 94c26dca334458d1350e8e20ddc35952f7f0b79c4be87fe92fb8e129b2927eb0bcfb5f691208bbf47b855d8cde74b10765a182cd8eccad6998d69d24429b3dad
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module WitBot
|
2
|
+
module Generators
|
3
|
+
class MessageBusGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :bot_name, type: :string, required: true
|
6
|
+
argument :user_model, type: :string, default: 'User'
|
7
|
+
argument :bot_channel, type: :string, default: '/witbot'
|
8
|
+
|
9
|
+
def install_dependencies
|
10
|
+
gem 'redis', '~> 3'
|
11
|
+
gem 'message_bus', '~> 2.0.0.beta.5'
|
12
|
+
Bundler.with_clean_env do
|
13
|
+
run 'bundle install'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_message_bus_listener
|
18
|
+
template 'message_bus_listener.rb.erb', 'app/wit_bot/message_bus_listener.rb'
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_message_bus_controller
|
22
|
+
template 'message_bus_controller.rb.erb', 'app/controllers/message_bus_controller.rb'
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_job
|
26
|
+
template 'job.rb.erb', 'app/jobs/message_bus_job.rb'
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def user_lower
|
31
|
+
user_model.underscore
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class MessageBusJob < ActiveJob::Base
|
2
|
+
queue_as :high
|
3
|
+
|
4
|
+
def perform(<%= user_lower %>_id, text)
|
5
|
+
# Make sure the user still exists
|
6
|
+
if <%= "(#{user_lower} = #{user_model}.find_by_id #{user_lower}_id)" %>
|
7
|
+
# Get the listener
|
8
|
+
listener = MessageBusListener.from_<%= user_lower %> <%= user_lower %>
|
9
|
+
# And send the message
|
10
|
+
listener.send_message text
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class MessageBusController < ApplicationController
|
2
|
+
<% if defined? Doorkeeper %>
|
3
|
+
before_action(only: [:send_message]){ doorkeeper_authorize! }
|
4
|
+
<% else %>
|
5
|
+
before_action :authorize!, only: [:send_message] # Replace with your authentication logic
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
def send_message
|
9
|
+
MessageBusJob.perform_later current_<%= user_model.underscore %>.id, params[:text] # Enqueue
|
10
|
+
head :accepted # Respond the with the HTTP Accepted status code.
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class MessageBusListener < WitBot::Bot::Conversation::Participant
|
2
|
+
attr_accessor :conversation_model, <%= ":#{user_lower}" %>
|
3
|
+
|
4
|
+
# Initialize the conversation, set the local <%= user_lower %>, and add the bot to the message
|
5
|
+
def initialize(conversation, <%= user_lower %>)
|
6
|
+
# Send the conversation object to the parent class
|
7
|
+
super conversation.object
|
8
|
+
|
9
|
+
# Set instance variables (@conversation is the actual conversation object)
|
10
|
+
<%= "@#{user_lower} = #{user_lower}" %>
|
11
|
+
@conversation_model = conversation
|
12
|
+
|
13
|
+
# Add the bot to the conversation
|
14
|
+
<%= "#{bot_name}." %>new @conversation<%= ", @#{user_lower}" %>
|
15
|
+
end
|
16
|
+
|
17
|
+
# A method that saves the conversation.
|
18
|
+
def save
|
19
|
+
@conversation_model.object = @conversation
|
20
|
+
@conversation_model.save
|
21
|
+
end
|
22
|
+
|
23
|
+
class << self
|
24
|
+
# A method to retrieve a listener from a <%= user_lower %>.
|
25
|
+
def from_<%= user_lower %>(<%= user_lower %>)
|
26
|
+
unless <%= "#{user_lower}." %>conversation # If the <%= user_lower %> doesn't have a conversation...
|
27
|
+
# Create one
|
28
|
+
<%= "#{user_lower}." %>conversation = Conversation.new
|
29
|
+
<%= user_lower %>.save! # Save the <%= user_lower %>
|
30
|
+
end
|
31
|
+
MessageBusListener.new <%= "#{user_lower}." %>conversation, <%= "#{user_lower}." %>to_s # Create a new listener from the conversation and the <%= user_lower %>.
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def bot?
|
36
|
+
false # Tell wit_bot that this class handles messages for a user.
|
37
|
+
end
|
38
|
+
|
39
|
+
# A method that gets called on output of a message automatically by wit_bot
|
40
|
+
def on_output(message)
|
41
|
+
save # Once we output a message, save the <%= user_lower %>.
|
42
|
+
msg_hash = {text: message.text, bot: message.bot?} # Create a hash to send to the <%= user_lower %>
|
43
|
+
MessageBus.publish '<%= bot_channel %>', msg_hash, user_ids: [<%= "@#{user_lower}." %>id] # Send the message to the <%= user_lower %>.
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module WitBot
|
2
|
+
module Generators
|
3
|
+
class ModelGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :user_model, type: :string, default: 'User'
|
6
|
+
hook_for :force, type: :boolean
|
7
|
+
|
8
|
+
def create_conversations
|
9
|
+
user_lower = user_model.underscore
|
10
|
+
|
11
|
+
migration_options = 'migration', 'CreateConversations', 'object:text', "#{user_lower}:references"
|
12
|
+
migration_options << '--force' if options[:force]
|
13
|
+
|
14
|
+
generate *migration_options
|
15
|
+
template 'model.rb.erb', 'app/models/conversation.rb'
|
16
|
+
|
17
|
+
user_file = "app/models/#{user_lower}.rb"
|
18
|
+
inject_into_class user_file, user_model, " has_one :conversation, dependent: :destroy\n"
|
19
|
+
|
20
|
+
puts <<TEXT
|
21
|
+
If you're thinking that storing conversations will take up a lot of room in your database,
|
22
|
+
you are correct. You'll want to destroy inactive conversations from the database every few hours.
|
23
|
+
Here's the guide on setting up a job to clear old conversations with Clockwork:
|
24
|
+
|
25
|
+
https://github.com/penne12/wit_bot/wiki/Clear-Old-Conversations-in-ActiveRecord-with-Clockwork-and-ActiveJob
|
26
|
+
TEXT
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Conversation < ActiveRecord::Base
|
2
|
+
<%= "belongs_to :#{user_model.underscore}" %>
|
3
|
+
store :object, coder: JSON
|
4
|
+
|
5
|
+
def object
|
6
|
+
h = super # Get the hash from the parent method
|
7
|
+
if h && !h.empty? # If the hash exists and is not empty,
|
8
|
+
WitBot::Bot::Conversation::Base.from_hash h # Then create a conversation from it.
|
9
|
+
else
|
10
|
+
WitBot::Bot::Conversation::Base.new # Otherwise, create a new conversation.
|
11
|
+
end
|
12
|
+
end
|
13
|
+
def object=(conversation)
|
14
|
+
super conversation.as_json # Turn the conversation back into a hash.
|
15
|
+
end
|
16
|
+
end
|
data/lib/wit_bot/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wit_bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben (@penne12_)
|
@@ -151,6 +151,14 @@ files:
|
|
151
151
|
- lib/generators/wit_bot/bot/USAGE
|
152
152
|
- lib/generators/wit_bot/bot/bot_generator.rb
|
153
153
|
- lib/generators/wit_bot/bot/templates/bot.rb.erb
|
154
|
+
- lib/generators/wit_bot/message_bus/USAGE
|
155
|
+
- lib/generators/wit_bot/message_bus/message_bus_generator.rb
|
156
|
+
- lib/generators/wit_bot/message_bus/templates/job.rb.erb
|
157
|
+
- lib/generators/wit_bot/message_bus/templates/message_bus_controller.rb.erb
|
158
|
+
- lib/generators/wit_bot/message_bus/templates/message_bus_listener.rb.erb
|
159
|
+
- lib/generators/wit_bot/model/USAGE
|
160
|
+
- lib/generators/wit_bot/model/model_generator.rb
|
161
|
+
- lib/generators/wit_bot/model/templates/model.rb.erb
|
154
162
|
- lib/generators/wit_bot/setup/USAGE
|
155
163
|
- lib/generators/wit_bot/setup/setup_generator.rb
|
156
164
|
- lib/generators/wit_bot/setup/templates/initializer.rb
|