Пример #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
Пример #2
0
  def init_telepot(self):
    print(log_str.info(
      u"O nosso token do @BotFather é '{}', \
      os ids de usuária(o)s administradora(e)s são '{}'. \
      O nome de usuário da(o) administrador(a) é '{}'.".format(
      self.config['token'],
      self.config['users']['alpha'],
      self.config['info']['admin'])
    ))
    try:
      self.bot = telepot.Bot(self.config['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
Пример #3
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:
      from instance.config import Config
      config = Config()
      self.config = config.bots[config_file]
    except Exception as e:
      print(log_str.debug(str(e)))
      self.config = None
    ## Compatibilidade com v0.0.14
    if self.config is None:
      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()
Пример #4
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!"))
Пример #5
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['users']['alpha'][0]
      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([chat_id, chat_id], response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == "image":
            self.enviarImagem((chat_id, chat_id), response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == 'qrcode':
            self.enviarImagem((chat_id, chat_id), response['response'], response['parse_mode'], response['reply_to_message_id'])
          elif str(response['type']) == 'video':
            self.log(log_str.info(response['debug']))
          elif str(response['type']) == 'mensagem':
            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([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([chat_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(self.config['users']['alpha'][0]), str(self.config['users']['alpha'][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)))