/mobb

The simplest, most lightweight, fastest Bot framework written by Ruby.

Primary LanguageRubyMIT LicenseMIT

Mobb

Mobb is the simplest, most lightweight, fastest Bot framework written by Ruby.

Install

you can install Mobb by rubygems like

gem isntall mobb

or you can use a bundler. Writes the following in Gemfile

source "https://rubygems.org"

gem "mobb", "~> 0.1"

and install

bundle install

Examples

Write your logic in app.rb like...

require 'mobb'

set :name, "example bot"

on "hello" do
  "hi! i'm #{settings.name}!"
end

and start mobb application

ruby app.rb

then the shell will start to wait for your input, so you can type 'hello' and hit enter, then you get.

hi! i'm example bot!"

Helpers

You can define helper methods like this.

require 'mobb'

helpers do
  def greet(name)
    "Hi #{name}, what't up"
  end
end

on "hello" do
  greet(@env.user.name)
end

Conditions

You can use conditions react_to_bot, include_myself and reply_to_me.

require 'mobb'
set :service, 'slack'

# Mobb ignore all bot messages, but when set reply_to_bot true, Mobb react all bot messages
# this example will act infinit loop when receive message 'Yo'
on 'Yo', react_to_bot: true do
  'Yo'
end

# This block react only message reply to bot
on /Hi/, reply_to_me: true do
  "Hi #{@env.user.name}"
end

And you can define conditions yourself.

require 'mobb'
set :service, 'slack'

set(:probability) { |value| condition { rand <= value } }

on /Yo/, reply_to_me: true, probability: 0.1 do
  "Yo"
end

on /Yo/, reply_to_me: true do
  "Ha?"
end

Chain methods

If you want to act heavy task your bot, you can use chain/trigger syntax.

require 'mobb'

on /taks start (\w+)/ do |name|
  chain 'heavy task1', 'heavy task2', name: name
  'start!'
end

trigger 'heavy task1' do
  payload = @env.payload
  sleep 19
  "task1 #{payload[:name]} done!"
end

trigger 'heavy task2' do
  payload = @env.payload
  sleep 30
  "task2 #{payload[:name]} done!"
end

Pass

You can pass block to use pass keyword

require 'mobb'

on 'yo' do
  $stderr.puts 'this block will be pass'
  pass
  'this value never evaluted'
end

on 'yo' do
  $stderr.puts 'catch!'
  'yo'
end

Service handlers

Mobb is implemented based on Repp Interface. Shell and Slack adapter is currently available.

require 'mobb'
set :serice, 'slack'

on /hey (\w+)/ do |someone|
  "hey #{someone}, waz up?"
end

TODO

  • Test, Test, Test
  • Documents
  • Parallel event handling