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
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))))
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
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
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
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
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
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
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
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
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, }
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)))