class RBotKit::CommandManager

Public Class Methods

new(state_provider, caces, inlinecases, locale_provider = nil) click to toggle source
# File lib/RBotKit.rb, line 88
def initialize(state_provider, caces, inlinecases, locale_provider = nil)
  @state_provider = state_provider
  @caces = caces
  @inlinecases = inlinecases
  @locale_provider = locale_provider == nil ? LocaleProvider.new : locale_provider
end
set_cmd_classprefix(kp) click to toggle source
# File lib/RBotKit.rb, line 80
def self.set_cmd_classprefix(kp)
            @@cmd_classprefix = kp
    end
set_is_test_mode() click to toggle source
# File lib/RBotKit.rb, line 84
def self.set_is_test_mode()
  @@is_test_mode = true
end

Public Instance Methods

process_request(req) click to toggle source
# File lib/RBotKit.rb, line 95
  def process_request(req) 
return if @state_provider.is_req_already_processed(req.chat_id, req.id)

@state_provider.update_last_processed_req_id(req.chat_id, req.id)

state = @state_provider.get_current_state(req.chat_id) 
cmdCase = nil  

arrs = req.class == RequestCallback ? @inlinecases : @caces 

arrs.each do |cc| 
  in_state = cc.state.class == Array ? cc.state.include?(state) : cc.state == state  
  if in_state || cc.state == :any  

          if cc.cmdtext.class == Hash 
                  regexp = cc.cmdtext[:regexp] 
                  cmdCase = cc if regexp != nil && regexp.match(req.text) 
          elsif  cc.cmdtext.class == Symbol && cc.cmdtext == :any
                  cmdCase = cc
    elsif  cc.cmdtext.class == Symbol && cc.cmdtext == :hasphoto && req.photo_id != nil 
      cmdCase = cc
          else 
                  cmdCase = cc if cc.cmdtext == req.text 
          end  
  end 

  break if cmdCase != nil
end 

return if cmdCase == nil  
begin

  cmdHandel = Object::const_get("#{@@cmd_classprefix}#{cmdCase.cmdclass}").new
  cmdHandel.request = req  
  cmdHandel.state_provider = @state_provider
  cmdHandel.before_init()
  cmdHandel.before_validate() 
  cmdHandel.handle() 
  responces = cmdHandel.responces 

  return if responces == nil || responces.empty?

  responces.each do |res|
    locale = @locale_provider.get_locale_for(res.chat_id) 
    res.set_test_mode(@@is_test_mode)
    res.call(locale)
  end

rescue UserError => e
  p "UserError #{e.message} "
  eresp = TRep.new(req.chat_id)
  eresp.txt(e.message)
  locale = @locale_provider.get_locale(req.chat_id)
  eresp.set_test_mode(@@is_test_mode)
  eresp.call(locale)
  return
rescue  => e
  p "Exc #{e} "
  return
end

  end