Example #1
0
  def init_cli(self):
    print(log_str.info(u"Iniciando em modo interativo..."))
    try:
      stdscr = curses.initscr()
      self.log_cli(stdscr, log_str.info(u"Iniciando %s...\n" % (u"MateBot")))
      self.matebot_local = local.local({'mode': "cli", 'config':self.config})
    except Exception as e:
      print(log_str.debug(u"Excecao: %s\nEncerrando abruptamente." % (e)))
      exit()

    while True:
      try:
        if self.matebot_local.loop_cli(stdscr) > 0:
          self.cli_croak(stdscr)
          return
        else:
          stdscr.addstr(u"\n")
          stdscr.refresh()
      except KeyboardInterrupt:
        self.cli_croak(stdscr)
        return
      except Exception as e:
        self.cli_croak(stdscr)
        print(log_str.err(u"%s morta(o) por exceção: %s" % (u"MateBot", e)))
        raise
        continue
Example #2
0
 def cli_croak(self, stdscr):
   self.log_cli(stdscr, log_str.info(u"Gentilmente encerrando %s..." % (u"MateBot")))
   curses.nocbreak()
   stdscr.keypad(False)
   curses.echo()
   curses.endwin()
   print(log_str.info(u"Tchau!"))
Example #3
0
  def init_telepot(self):
    print(log_str.info(u"O nosso token do @BotFather é '%s', os ids de usuária(o)s administradora(e)s são '%s' e os ids dos grupos administradores são '%s'. O nome de usuário da(o) administrador(a) é '%s'." % (self.config['botfather']['token'], json.loads(self.config.get('plugins_usuarios', 'admin')), json.loads(self.config.get('plugins_grupos', 'admin')), self.config['info']['telegram_admin'])))
    try:
      self.bot = telepot.Bot(self.config['botfather']['token'])
      ## TODO Reler o manual do telepot e fazer uma coisa mais inteligente
      self.bot.message_loop(self.rcv)
    except Exception as e:
      self.log(log_str.err(u"Erro do Telegram/Telepot: %s\nEncerrando abruptamente." % (e)))
      exit()
    try:
      print(log_str.info(u"Iniciando %s..." % (self.bot.getMe()['first_name'])))
      self.log(log_str.info(u"%s online!" % (self.bot.getMe()['first_name'])))
    except Exception as e:
      print(log_str.err(u"Problema de conexão. Verifique se este computador está conectado na rede.\nExceção: %s" % (e)))
      raise

    self.matebot_local = local.local({'config':self.config,'bot':self.bot})
    while True:
      try:
        self.matebot_local.loop()
      except KeyboardInterrupt:
        self.log(log_str.info(u"Gentilmente encerrando %s..." % (self.bot.getMe()['first_name'])))
        return
      except Exception as e:
        self.log(log_str.err(u"%s morta(o) por exceção: %s" % (self.bot.getMe()['first_name'], e)))
        raise
        continue
Example #4
0
    def __init__(self, mode, config_file):
        self.config_file = u"config/.%s.cfg" % (config_file)
        try:
            self.config = configparser.ConfigParser()
        except NameError:
            self.config = ConfigParser.ConfigParser()
        print(log_str.info(u"Tentando iniciar MateBot..."))
        try:
            self.config.read(self.config_file)
        except Exception as e:
            print(
                log_str.err(
                    u"Problema com o arquivo de configuração.\nVossa excelência lerdes o manual antes de tentar usar este bot?\nCertificai-vos de que as instruções do arquivo README.md, seção 'Configurando' foram lidas e obedecidas.\nEncerrando abruptamente.\nMais informações: %s %s"
                    % (type(e), e)))
            exit()

        self.interativo = 0

        ## TODO usar getattr
        if mode == "telepot":
            self.init_telepot()


#    elif mode == "cli":
#      self.init_cli()
        else:
            ## TODO mudar esta frase quando esta informação se tornar incorreta
            print(
                log_str.info(
                    u"Por enquanto o único modo de operação é telepot"))
            exit()
Example #5
0
  def __init__(self, mode, config_file):
    self.config_dir = 'instance'
    ## Compatiblidade com v0.0.13
    if not os.path.isdir(self.config_dir):
      print(log_str.warn(
u"""O diretório 'instance' não existe. O diretório 'config' não vai \
mais ser utilizado nas próximas versões. Leia o README.md e atualize o \
arquivo de configuração."""))
      self.config_dir = 'config'
    self.config_file = u"%s/.%s.cfg" % (self.config_dir, config_file)
    if not os.path.isfile(self.config_file):
      print(log_str.err(
u"""Problema com o arquivo de configuração.\nVossa excelência lerdes o \
manual antes de tentar usar este bot?\nCertificai-vos de que as \
instruções do arquivo README.md, seção 'Configurando' foram lidas e \
obedecidas.\nEncerrando abruptamente."""))
      exit()
    try:
      self.config = configparser.ConfigParser()
    except NameError:
      self.config = ConfigParser.ConfigParser()
    print(log_str.info(u"Tentando iniciar MateBot..."))
    try:
      self.config.read(self.config_file)
    except Exception as e:
      try:
        self.config_file = u"config/.%s.cfg" % (config_file)
        self.config = configparser.ConfigParser()
        self.config.read(self.config_file)
      except Exception as e:
        print(log_str.err(
u"""Problema com o arquivo de configuração.\nVossa excelência lerdes o \
manual antes de tentar usar este bot?\nCertificai-vos de que as \
instruções do arquivo README.md, seção 'Configurando' foram lidas e \
obedecidas.\nEncerrando abruptamente.\nMais informações: %s %s"""
        % (type(e), str(e))))
        exit()

    self.interativo = 0

    ## TODO usar getattr
    if mode == "telepot":
      self.init_telepot()
#    elif mode == "cli":
#      self.init_cli()
    else:
      ## TODO mudar esta frase quando esta informação se tornar incorreta
      print(log_str.info(u"Por enquanto o único modo de operação é telepot"))
      exit()
Example #6
0
  def rcv(self, msg):
#    self.log(log_str.rcv(str(msg['chat']['id']), str(msg)))
    self.log(log_str.rcv(str(msg['chat']['id']), json.dumps(msg, sort_keys=True, indent=2)))
    glance = telepot.glance(msg)
    if glance[0] == 'text':
      chat_id = self.config['plugins_grupos']['admin']
      command_list = list()
      try:
        from_id = int(msg['from']['id'])
        chat_id = int(msg['chat']['id'])
        message_id = int(msg['message_id'])
        command_list = msg['text']
      except Exception as e:
        self.log(log_str.err(u'Erro do Telepot tentando receber mensagem: %s' % (e)))

      if self.interativo > 0:
        args.update
        automatico(args)
      elif command_list[0][0] == '/':
        self.log(log_str.cmd(command_list))
        response = comandos.parse(
          {
            'chat_id': chat_id,
            'from_id': from_id,
            'message_id': message_id,
            'command_list': command_list,
            'bot': self.bot,
            'config': self.config,
            'command_type': 'grupo',
          }
        )
        try:
          ## Log
          if str(response['type']) == 'erro':
            self.log(log_str.err(response['debug']))
          elif str(response['type']) == 'feedback':
            self.log('#feedback enviado de %s por %s:\n\n%s' % (chat_id, from_id, response['feedback']))
          elif str(response['type']) == "whisper":
            self.log('#whisper enviado de %s por %s para %s:\n\n%s' % (chat_id, from_id, response['to_id'], response['response']))
          else:
            self.log(log_str.info(response['debug']))
          ## Enviando resultado do comando
          ## TODO solução temporária, isto serve para controlar exibição em HTML ou Markdown.
          ## TODO https://core.telegram.org/bots/api#sendmessage
          if not 'parse_mode' in response:
            response.update(parse_mode = None)
            print(log_str.debug(u"parse_mode nao exisitia!"))
          ## TODO mais solução temporária
          if not 'reply_to_message_id' in response:
            response.update(reply_to_message_id = False)
            print(log_str.debug(u"reply_to_message_id nao exisitia!"))
          if str(response['type']) == 'nada':
            self.log(u"#nada\n\nresponse:\n%s\n\ndebug:\n%s" % (response['response'], response['debug']))
            pass
          elif str(response['type']) == 'feedback':
            self.enviarMensagem([from_id, chat_id], response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == "image":
            self.enviarImagem((from_id, chat_id), response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == 'qrcode':
            self.enviarImagem((from_id, chat_id), response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == 'mensagem':
            if response['multi']:
              for chunk in response['response'].split('$$$EOF$$$'):
                self.enviarMensagem([from_id, chat_id], chunk, response['parse_mode'], response['reply_to_message_id'])
            else:
              self.enviarMensagem([from_id, chat_id], response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == 'grupo':
            if response['multi']:
              for chunk in response['response'].split('$$$EOF$$$'):
                self.enviarMensagem([chat_id, chat_id], chunk, response['parse_mode'], response['reply_to_message_id'])
            else:
              self.enviarMensagem([chat_id, chat_id], response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == 'erro':
            self.enviarMensagem([from_id, chat_id], response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == 'whisper':
            self.enviarMensagem([response['to_id'], chat_id], response['response'], response['parse_mode'], False)
          elif str(response['type']) == 'comando':
            ## TODO não lembro qual era a relevância disto
#            mensagem = comandos.parse(chat_id, from_id, [''.join(['/', response['response'][0]]), response['response'][1:]])
            self.enviarMensagem([chat_id, from_id], mensagem['response'], response['parse_mode'], response['reply_to_message_id'])
          else:
            self.enviarMensagem([str(json.loads(self.config['plugins_usuarios']['admin'])[0]), str(json.loads(self.config['plugins_usuarios']['admin'])[0])], log_str.debug(response['debug']), response['parse_mode'], response['reply_to_message_id'])
        except Exception as e:
          raise
          self.log(log_str.debug(u'%s de %s para %s falhou.\nResponse: %s\nException: %s' % (command_list, from_id, chat_id, response, e)))