예제 #1
0
 def loop_cli(self, stdscr):
     #    wrapper(cli_wrapper)
     stdscr.addstr(u"Enviar (c)omando\tEscrever (v)elivery\t(s)air: ")
     while True:
         cmd = stdscr.getch()
         if cmd == ord('c'):
             stdscr.clear()
             stdscr.refresh()
             stdscr.addstr(u"Digite o comando (vazio para cancelar): ")
             command_list = stdscr.getstr(1, 0, 140)
             if command_list != "":
                 time.sleep(0.001)
                 response = comandos.parse({
                     'chat_id':
                     int(str(self.usuarios_debug[0])),
                     'from_id':
                     int(str(self.usuarios_debug[0])),
                     'command_list':
                     str(command_list.decode('utf-8')),
                     'command_type':
                     "curses",
                     'config':
                     self.config,
                     'stdscr':
                     stdscr,
                 })
                 if response['status']:
                     stdscr.addstr(
                         log_str.cmd(u"%s\n" % (response['debug'])))
                     try:
                         stdscr.addstr(u"%s\n" % (': '.join([
                             str(self.usuarios_debug[0]),
                             str(response['response'])
                         ])))
                     except Exception as e:
                         stdscr.addstr(u"%s\n" % (log_str.debug(e)))
                 else:
                     try:
                         stdscr.addstr(u"%s\n" % (': '.join([
                             str(self.usuarios_debug[0]),
                             str(response['response'])
                         ])))
                         stdscr.addstr(u"%s\n" % (': '.join(
                             [u"Debug", str(response['debug'])])))
                     except Exception as e:
                         stdscr.addstr(u"%s\n" % (log_str.debug(e)))
                 stdscr.refresh()
             else:
                 pass
             return 0
         elif cmd == ord('v'):
             stdscr.addstr(u"\nVelivery")
             return 0
         elif cmd == ord('s'):
             stdscr.addstr(u"\nTchau!")
             stdscr.refresh()
             time.sleep(1)
             return 1
         else:
             pass
예제 #2
0
 def enviarMensagem(self, ids_list, reply='Nada.', parse_mode=None, reply_to_message_id = False):
   ## Log [SEND]
   try:
     self.log(log_str.send(ids_list[0], reply))
   except Exception as e:
     print(log_str.debug(u'Exceção tentando fazer log: %s' % (str(e))))
     raise
   ## Tenta enviar mensagem
   try:
     if reply_to_message_id:
       self.bot.sendMessage(ids_list[0], reply, parse_mode=parse_mode, reply_to_message_id = str(reply_to_message_id))
     else:
       self.bot.sendMessage(ids_list[0], reply, parse_mode=parse_mode)
   except telepot.exception.TelegramError as e:
     self.log(log_str.err(u'Erro do Telegram tentando enviar mensagem para %s: %s' % (ids_list[0], str(e))))
     if e.error_code == 401:
       print(log_str.err(u'Não autorizado. Vossa excelência usou o token correto durante a configuração? Fale com o @BotFather no telegram e crie um bot antes de tentar novamente.'))
       exit()
     elif e.error_code == 400:
       if e.description == 'Bad Request: message must be non-empty':
         self.bot.sendMessage(ids_list[1], u"Não consegui enviar mensagem :(\nErro: %s" % (str(e)), parse_mode=parse_mode, reply_to_message_id=reply_to_message_id)
       elif e.description == 'Forbidden: bot was blocked by the user':
         self.bot.sendMessage(ids_list[1], u"Não consegui enviar mensagem :(\nErro: %s" % (str(e)), parse_mode=parse_mode, reply_to_message_id=reply_to_message_id)
       else:
         ## FIXME isto não vai funcionar se o parse_mode não for None.
         ## O resultado vai ser um erro sem nenhum aviso.
         limit = 4000
         for chunk in [reply[i:i+limit] for i in range(0, len(reply), limit)]:
           self.bot.sendMessage(ids_list[0], chunk, parse_mode=parse_mode)
         self.log(log_str.debug(u'Não consegui enviar %s para %s. Avisei %s' % (reply, ids_list[0], ','.join(str(ids_list[1:])))))
     elif e.error_code == 403:
       mensagem = u"Eu não consigo te mandar mensagem aqui. Clica em @%s para ativar as mensagens particulares e eu poder te responder!" % (str(self.bot.getMe()['username']))
       ## Log [SEND]
       try:
         self.log(log_str.send(ids_list[1], mensagem))
       except Exception as e:
         print(log_str.debug(u"Exceção tentando fazer log: %s" % (str(e))))
       ## Tenta enviar imagem para segunda opção
       try:
         if reply_to_message_id:
           self.bot.sendMessage(ids_list[1], mensagem, parse_mode=parse_mode, reply_to_message_id=str(reply_to_message_id))
         else:
           self.bot.sendMessage(ids_list[1], mensagem)
       except telepot.exception.TelegramError as e1:
         self.log(log_str.err(u"Erro do Telegram tentando enviar mensagem para %s: %s" % (ids_list[1], str(e1))))
         if reply_to_message_id:
           self.bot.sendMessage(
             ids_list[1],
             u"Não consegui enviar mensagem :(\nErro: %s" % (str(e1)),
             reply_to_message_id=reply_to_message_id
           )
         else:
           self.bot.sendMessage(
             ids_list[1],
             u"Não consegui enviar mensagem :(\nErro: %s" % (str(e1)),
             parse_mode=parse_mode
           )
     else:
       self.log(log_str.debug(u"Não consegui enviar %s para %s. Não tentei enviar para %s" % (reply, ids_list[0], ','.join(ids_list))))
예제 #3
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
예제 #4
0
 def loop_husky(self):
     time.sleep(0.001)
     response = comandos.parse({
         'chat_id': int(str(self.grupos_local[0])),
         'from_id': int(str(self.grupos_local[0])),
         'command_list': "/husky_pendentes",
         'command_type': 'grupo',
         'bot': self.bot,
         'config': self.config,
     })
     if response['status']:
         print(log_str.cmd(response['debug']))
         try:
             #        self.bot.sendMessage(self.usuarios_local[0], str(response['response']))
             #        self.bot.sendMessage(self.grupos_local[0], str(response['response']))
             self.bot.sendMessage(self.grupos_local[0],
                                  str(response['response']))
             shiva_1({
                 'numero': self.config['agenda']['numero_3'],
                 'config': self.config,
                 'bot': self.bot,
                 'telefones': response['response']['telefones'],
             })
         except telepot.exception.TelegramError as e:
             print(log_str.debug(e))
             pass
예제 #5
0
 def loop(self):
     try:
         time.sleep(datetime.timedelta(days=1).total_seconds())
         #      self.loop_blog()
         print(u"Terminou mais um loop")
     except Exception as e:
         print(log_str.debug(e))
         pass
예제 #6
0
 def log_cli(self, stdscr, reply):
   print(reply)
   try:
     for grupo_admin in json.loads(self.config.get('plugins_grupos', 'admin')):
       if str(grupo_admin) != str(-1):
         stdscr.addstr(': '.join([str(grupo_admin), reply]))
   except Exception as e:
     print(log_str.debug(u'Exceção excepcional que não conseguimos tratar tampouco prever: %s' % (e)))
     raise
예제 #7
0
 def log(self, reply):
   print(reply)
   try:
     for grupo_admin in json.loads(self.config.get('plugins_grupos', 'admin')):
       if str(grupo_admin) != str(-1):
         self.bot.sendMessage(grupo_admin, reply)
   except telepot.exception.TelegramError as e:
     if e.error_code == 401:
       print(log_str.err(u"Não autorizado. Vossa excelência usou o token correto durante a configuração? Fale com o @BotFather no telegram e crie um bot antes de tentar novamente."))
       exit()
     if e.error_code == 400:
       print(log_str.debug(u"Grupo de admin não existe ou não fomos adicionados. Se a intenção era enviar mensagens de depuração e log para um grupo, então os dados no item 'admin' da seção 'plugins_grupos' do arquivo de configuração estão errados, incorretos, equivocados. Ou então nós nunca fomos adicionados no grupo, ou ainda fomos expulsos.\nExceção ao tentar enviar erro ao grupo de admin: %s" % (e)))
     elif e.error_code == 403:
       print(log_str.debug(u"Fomos bloqueados pelo grupo de admin!\nExceção ao tentar enviar erro ao grupo de admin: %s" % (e)))
     else:
       print(log_str.debug(u"Erro do Telegram tentando enviar mensagem para o grupo de admin: %s" % (e)))
     raise
   except Exception as e:
     print(log_str.debug(u"Exceção excepcional que não conseguimos tratar tampouco prever: %s" % (e)))
     raise
예제 #8
0
 def loop_blog(self):
     time.sleep(0.001)
     response = comandos.parse({
         'chat_id': int(str(self.grupos_local[0])),
         'from_id': int(str(self.grupos_local[0])),
         'command_list': "/cmd_blog_matehackers",
         'command_type': 'grupo',
         'bot': self.bot,
         'config': self.config,
     })
     if response['status']:
         print(log_str.cmd(response['debug']))
         try:
             self.bot.sendMessage(self.grupos_local[0],
                                  str(response['response']))
         except telepot.exception.TelegramError as e:
             print(log_str.debug(e))
             pass
예제 #9
0
    def loop(self):
        try:
            time.sleep(datetime.timedelta(days=1).total_seconds())
            #      time.sleep(datetime.timedelta(minutes=30).total_seconds())
            #      time.sleep(datetime.timedelta(minutes=4).total_seconds())
            #      time.sleep(datetime.timedelta(minutes=3).total_seconds())
            print(u"Terminou mais um loop")


#      print(log_str.info("3 minutos se passaram"))
#      self.loop_blog()
#      self.loop_husky()
#      self.loop_pendentes()
#      self.loop_atrasados()
#      self.loop_automatico()
#      pass
        except Exception as e:
            print(log_str.debug(e))
            pass
예제 #10
0
 def loop_pendentes(self):
     time.sleep(0.001)
     response = comandos.parse({
         'chat_id': int(str(self.usuarios_local[0])),
         'from_id': int(str(self.usuarios_local[0])),
         'command_list': "/pendentes",
         'command_type': 'grupo',
         'bot': self.bot,
         'config': self.config,
     })
     if response['status']:
         print(log_str.cmd(response['debug']))
         #      for grupo_local in self.grupos_local:
         #        self.enviarMensagem([grupo_local, grupos_debug[0]], response['response'], response['parse_mode'])
         #      for grupo_local in grupos_local:
         #        self.enviarMensagem([grupo_local, grupos_debug[0]], response['response'], response['parse_mode'])
         try:
             self.bot.sendMessage(self.grupos_local[0],
                                  str(response['response']))
         except telepot.exception.TelegramError as e:
             print(log_str.debug(e))
             pass
예제 #11
0
def shiva(args):
    try:
        cliente = Cliente(str(args['config']['totalvoice']['token']),
                          str(args['config']['totalvoice']['host']))
        numero = str(args['numero'])
        print(numero)
        url_audio = str(args['url_audio'])
        print(url_audio)
        response = cliente.audio.enviar(numero, url_audio)
        print(response)
        #    print(mensagem)
        #    print(type(mensagem))
        #    print(mensagem.decode())
        #    print(type(mensagem.decode()))
        #    print(mensagem.decode("UTF-8"))
        #    print(type(mensagem.decode("UTF-8")))
        ##    print(json.dumps(mensagem))
        #    print(type(json.dumps(mensagem.decode())))
        #    print(type(json.dumps(mensagem.decode("UTF-8"))))
        ##    print(json.loads(json.dumps(mensagem)))
        #    print(type(json.loads(json.dumps(mensagem.decode()))))
        #    print(type(json.loads(json.dumps(mensagem.decode("UTF-8")))))
        ##    print(type(dict(json.loads(json.dumps(mensagem.decode())))))
        ##    print(type(dict(json.loads(json.dumps(mensagem.decode("UTF-8"))))))
        ##    print(type(dict(json.dumps(mensagem.decode()))))
        ##    print(type(dict(json.dumps(mensagem.decode("UTF-8")))))
        #    args['bot'].sendMessage(json.loads(args['config']['plugins_grupos']['velivery_admin'])[0], u'Eu enviaria áudio para o número %s, mas o %s disse que eu estou em estágio probatório por enquanto...' % (' '.join(args['telefones']), str(args['config']['info']['telegram_admin'])))
        args['bot'].sendMessage(
            json.loads(args['config']['plugins_grupos']['velivery_admin'])[0],
            u'Enviando áudio %s para o número %s...' % (url_audio, numero))
        return {
            'status': True,
            'type': 'grupo',
            'multi': False,
            'response': str(response.decode()),
            'debug': str(response.decode()),
            'parse_mode': None,
        }
    except Exception as e:
        raise
        print(log_str.debug(e))
        return {
            'status': False,
            'type': 'erro',
            'multi': False,
            'response':
            u'Erro tentando enviar Audio. os desenvolvedores serão notificados de qualquer forma, mas tente novamente mais tarde.',
            'debug': u'Erro enviando Audio.\nExceção: %s' % (e),
            'parse_mode': None,
        }
    return {
        'status':
        False,
        'type':
        'erro',
        'multi':
        False,
        'response':
        u'Vossa Excelência está usando este comando de forma incorreta. Este comando tem um jeito certo e tem que usar o comando do jeito certo. E eu não vou deixar ninguém usar do jeito errado.\n\nExplicar-vos-ei o uso correto, certo do comando: /shiva 5199999999\nOnde 5199999999 é o número de telefone com código de longa distância. Em caso de dúvida, pergunte pro %s'
        % (str(args['config']['info']['telegram_admin'])),
        'debug':
        u'Erro enviando Audio.\nNúmero: %s\nMensagem: %s' %
        (str(args['numero'])),
        'parse_mode':
        None,
    }
예제 #12
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)))