class Qbot::Base

Public Class Methods

cron(pattern, &block) click to toggle source
# File lib/qbot/base.rb, line 22
def cron(pattern, &block)
  schedule(pattern, &block)
end
help(usages) click to toggle source
# File lib/qbot/base.rb, line 26
def help(usages)
  Qbot.app.help_text(usages)
end
new(pattern, **options, &block) click to toggle source
# File lib/qbot/base.rb, line 50
def initialize(pattern, **options, &block)
  @pattern  = pattern
  @options  = options
  @callback = block
end
on(pattern, **options, &block) click to toggle source
# File lib/qbot/base.rb, line 16
def on(pattern, **options, &block)
  pattern  = Regexp.new("\b#{pattern}\b") unless Regexp === pattern
  instance = new(pattern, **options, &block)
  Qbot.app.add_bot(instance)
end

Private Class Methods

schedule(pattern, &block) click to toggle source
# File lib/qbot/base.rb, line 31
def schedule(pattern, &block)
  parser  = CronParser.new(pattern)
  current = Time.now
  delay   = parser.next(current) - current

  Qbot.app.timers.after(delay) do
    begin
      instance = new(pattern)
      instance.instance_eval(&block)
    rescue => e
      Qbot.app.logger.error("#{instance.class} - Error: #{e}")
    end

    schedule(pattern, &block)
  end
end

Public Instance Methods

cache() click to toggle source
# File lib/qbot/base.rb, line 76
def cache
  Qbot.app.storage.namespace(self.class.name)
end
listen(message) click to toggle source
# File lib/qbot/base.rb, line 56
def listen(message)
  if @options[:global]
    return unless message.match(@pattern)
  else
    return unless message.mentioned?
    return unless message.match(@pattern, prefix: message.mention)
  end

  Qbot.app.logger.debug("#{self.class} - Recieve message: '#{message.text}'")

  @message = message
  instance_exec(@message, &@callback)
rescue => e
  Qbot.app.logger.error("#{self.class} - Error: #{e}")
end
post(text, **options) click to toggle source
# File lib/qbot/base.rb, line 72
def post(text, **options)
  Qbot.app.adapter.post(text, reply_to: @message, **options)
end