docs: def on_message(self, con, event):
          """Handles messge stanzas"""
          msg_type = event.getType()
          nick = event.getFrom().getResource()
          from_jid = event.getFrom().getStripped()
          body = event.getBody()
  
          if msg_type == 'chat' and body is None:
              return
  
          logger.debug('msg_type[%s] from[%s] nick[%s] body[%s]' % (msg_type, from_jid, nick, body,))
  
          sender = filter(lambda m: m['JID'] == from_jid, self.params['MEMBERS'])
  
          should_process = msg_type in ['message', 'chat', None] and body is not None and len(sender) == 1
          if not should_process: return
          sender = sender[0]
  
          try:
              for p in self.command_patterns:
                  reg, cmd = p
                  m = reg.match(body)
                  if m:
                      logger.info('pattern matched for bot command \'%s\'' % (cmd,))
                      function = getattr(self, str(cmd), None)
                      if function:
                          return function(sender, body, m)
  
              words = body.split(' ')
              cmd, args = words[0], words[1:]
              if cmd and cmd[0] == '/':
                  cmd = cmd[1:]
                  command_handler = getattr(self, 'do_'+cmd, None)
                  if command_handler:
                      return command_handler(sender, body, args)
  
              broadcast_body = '[%s] %s' % (sender['NICK'], body,)
              return self.broadcast(broadcast_body, exclude=(sender,))
          except:
              logger.exception('Error handling message [%s] from [%s]' % (body, sender['JID']))