def init(): global driver global contacts try: driver.close() except Exception: pass driver = WhatsAPIDriver(client='chrome') qr_tmp = driver.get_qr() qr = 'static/qr/{}'.format(qr_tmp.split('/')[-1]) shutil.move(qr_tmp, qr) return qr
def on_getQr(*args): write_log('Socket-Info', 'give the qr') global driver if driver == None: driver = WhatsAPIDriver(profile=profiledir, client='remote', command_executor=selemiunIP) if driver.is_logged_in(): write_log('Socket-Info', 'session started') socketIO.emit('sendQr', {'idSend': args[0], 'status': 'Session okay'}) else: write_log('Socket-Info', 'go to qr') name = uuid4().hex + '.png' if os.path.exists(name): os.remove(name) driver.get_qr(name) write_log('Socket-Info', 'saving qr') shutil.move('./' + name, pathSource + name) socketIO.emit('sendQr', { 'idSend': args[0], 'file': str(pathSource + name) }) on_waitLogin()
def on_getQr(*args): try: global driver if driver == None: driver = WhatsAPIDriver(profile=profiledir, client='remote', command_executor=selemiunIP) if driver.is_logged_in(): write_log('Socket-Info','session started') socketIO.emit('change',{'whatsAppJoin':True,'accountDown':False}) socketIO.emit('sendQr', {'socketId':args[0],'error':'The session is started'} ) else: write_log('Socket-Info','go to qr') name = uuid4().hex+'.png' if os.path.exists(name): os.remove(name) driver.get_qr(name) write_log('Socket-Info','saving qr') shutil.move('./'+name,pathSource+name) write_log('Socket-Info','send qr') socketIO.emit('sendQr',{'socketId':args[0],'file':str(name)}) on_waitLogin(args[0]) except Exception as e: socketIO.emit('sendQr', {'socketId':args[0],'error':traceback.format_exc()} ) write_log('Socket-Error',traceback.format_exc()) errorSend(traceback.format_exc())
def start_web_session() -> Tuple[WhatsAPIDriver, str]: """ Method to start a new session of WhatsApp Web for web app :return: returning the driver object and qr """ # create driver object with above options driver = WhatsAPIDriver(client="remote", command_executor=config("SELENIUM")) # Get the qr code qr_image_path = driver.get_qr() with open(qr_image_path, 'rb') as image: qr = b64encode(image.read()).decode('utf-8') if isfile(qr_image_path): remove(qr_image_path) return driver, qr
from webwhatsapi.objects.message import Message, MediaMessage print "Environment Mac", os.environ try: os.environ["SELENIUM"] except KeyError: print "Please set the environment variable SELENIUM to Selenium URL" sys.exit(1) driver = WhatsAPIDriver(client='remote', command_executor=os.environ["SELENIUM"]) print("Waiting for QR") qr = qrtools.QR() qr.decode("horn.png") data = qr.decode(driver.get_qr()) print(data) # prints "Version 2" driver.wait_for_login() print("Bot started") while True: time.sleep(3) print 'Checking for more messages, status', driver.get_status() for contact in driver.get_unread(): for message in contact.messages: print(json.dumps(message.get_js_obj(), indent=4)) print 'class', message.__class__.__name__ print 'message', message print 'id', message.id print 'type', message.type
logging.basicConfig(filename='logfile.txt', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logging.info('PCBot WhatsApp_Bot Iniciando....') try: os.environ["SELENIUM"] except KeyError: print ("Please set the environment variable SELENIUM to Selenium URL") sys.exit(1) ## Carga Driver y conecta con Whatsapp Web ## driver = WhatsAPIDriver(client='remote', command_executor=os.environ["SELENIUM"]) #, profile='/home/aplicaciones/.mozilla/firefox/81yyy19w.whatsapp') status = driver.get_status() if status == "NotLoggedIn" or status == "Unknown": logging.info('No esta logueado') driver.get_qr() logging.info('Esperando codigo QR') driver.wait_for_login() else: logging.info('Ya esta logueado') # driver.save_firefox_profile(remove_old=True) ## Driver subio, carga diccionarios internos ## # driver.send_message_to_id(id_whatsapp_soporte,'Bot Iniciando....') # logging.info('Actualizacion inicial data helpdesk iniciada....') # driver.send_message_to_id(id_whatsapp_soporte,'Actualizacion data helpdesk iniciada....') # apphd = helpdesk(usuario=api_helpdesk_usuario, clave=api_helpdesk_clave, authenticate_url=api_helpdesk_url_authenticate) # data_helpdesk = apphd.maestros(api_helpdesk_url) # logging.info('Actualizacion inicial data helpdesk terminada....') # driver.send_message_to_id(id_whatsapp_soporte,'Actualizacion data helpdesk terminada....') logging.info('PCBot WhatsApp_Bot Arriba')
def runReminder(): from webwhatsapi import WhatsAPIDriver print("Environment", os.environ) try: os.environ["SELENIUM"] except KeyError: print("Please set the environment variable SELENIUM to Selenium URL") sys.exit(1) from PIL import Image from resizeimage import resizeimage ##Save session on "/firefox_cache/localStorage.json". ##Create the directory "/firefox_cache", it's on .gitignore ##The "app" directory is internal to docker, it corresponds to the root of the project. ##The profile parameter requires a directory not a file. from pyzbar.pyzbar import decode dir_path = os.path.dirname(os.path.realpath(__file__)) print(")(AFYN)(ANY*FU(A*UKFA(E*FU*****************************)))") print(")(AFYN)(ANY*FU(A*UKFA(E*FU*****************************)))") print(")(AFYN)(ANY*FU(A*UKFA(E*FU*****************************)))") print(")(AFYN)(ANY*FU(A*UKFA(E*FU*****************************))),", dir_path) returned_value = os.system('export PATH="' + dir_path + ':$PATH"') # returns the exit code in unix profiledir = os.path.join(".", "firefox_cache") if not os.path.exists(profiledir): os.makedirs(profiledir) driver = WhatsAPIDriver(profile=profiledir, client="remote", command_executor=os.environ["SELENIUM"]) profiledir = os.path.join(".", "firefox_cache") if not os.path.exists(profiledir): os.makedirs(profiledir) driver = WhatsAPIDriver(profile=profiledir, client="remote", command_executor=os.environ["SELENIUM"]) import timg obj = timg.Renderer() print("Waiting for QR") driver.wait_for_login() print("Saving session") # from qrtools import qrtools # from PIL import Image # import zbarlight # qr = qrtools.QR() # # from PIL import Image # import os # import numpy as np # import pyboof as pb # # pb.init_memmap() #Optional # # class QR_Extractor: # # Src: github.com/lessthanoptimal/PyBoof/blob/master/examples/qrcode_detect.py # def __init__(self): # self.detector = pb.FactoryFiducial(np.uint8).qrcode() # # def extract(self, img_path): # if not os.path.isfile(img_path): # print('File not found:', img_path) # return None # image = pb.load_single_band(img_path, np.uint8) # self.detector.detect(image) # qr_codes = [] # for qr in self.detector.detections: # qr_codes.append({ # 'text': qr.message, # 'points': qr.bounds.convert_tuple() # }) # return qr_codes # qr_scanner = QR_Extractor() print("AAA") c = 0 s = 60 status = "NotLoggedIn" while status is not "LoggedIn": c += 1 print("status", status) # print("Checking qr, status", driver.get_status()) print("AAAAAAAAAAAAA") # img = driver.get_qr("static/img/newQR.png") im_path = os.path.join("newQR.png") pathlib.Path().absolute() os.system("cp newQR.png sample/static/img/newQR.png") img = driver.get_qr("newQR.png") # from PIL import Image print("BBBBBBBBBBBBBBB") decoded = decode(Image.open(im_path)) # print(decoded, "#######################") # print(decoded, "#######################") # print(decoded, "#######################") # print(decoded, "#######################") # print(decoded, "#######################") # print(decoded, "#######################") # print(decoded, "#######################") for barcode in decoded: print("@@@@@@@@@@@@@@@@@@@") # the barcode data is a bytes object so if we want to draw it # on our output image we need to convert it to a string first barcodeData = barcode.data.decode("utf-8") barcodeType = barcode.type # draw the barcode data and barcode type on the image text = "{} ({})".format(barcodeData, barcodeType) print(text) print("@@@@@@@@@@@@@@@@@@@") printQR(barcodeData) print("@@@@@@@@@@@@@@@@@@@X") status = driver.get_status() # output = qr_scanner.extract(img) # print(output,"!!!!!!!!!!!!!!!!WDIOUSICNOIUCJ)(Z*UCINJ)(ZP*DFJYUF)((P*SUD)(UASIDMUJ))") # print(qr.decode(img)) # print(qr.data) # print("BBBB2") # with open(img, 'r+b') as f: # with Image.open(f) as image: # cover = resizeimage.resize_cover(image, [57, 57]) # cover.save(img, image.format) # # # qr.decode(img) # print (qr.data) # print(retval,"!!!!!!!!!!!!!!!!!!!") # # print("CCC",img) # obj.load_image_from_file(img) # obj.resize(s,s) # s-=1 # print(obj) # obj.render(timg.Ansi24HblockMethod) # print("DDD",s,s,s,s) # time.sleep(10) # driver.save_firefox_profile(remove_old=False) # time.sleep(3) # try: # driver.reload_qr() # except: # print("refresh finised") print("Bot started") while True: time.sleep(.71) print("Checking for more messages, status", driver.get_status()) for contact in driver.get_unread(): for message in contact.messages: print(json.dumps(message.get_js_obj(), indent=4)) sender = message.get_js_obj( )["chat"]["contact"]["formattedName"] for contact in driver.get_contacts(): # print("CCCC",contact.get_safe_name() ) if sender in contact.get_safe_name(): chat = contact.get_chat() chat.send_message("Hi " + sender + " !!!*" + message + "*") print() print() print(sender) print() print() print("class", message.__class__.__name__) print("message", message) print("id", message.id) print("type", message.type) print("timestamp", message.timestamp) print("chat_id", message.chat_id) print("sender", message.sender) print("sender.id", message.sender.id) print("sender.safe_name", message.sender.get_safe_name()) if message.type == "chat": print("-- Chat") print("safe_content", message.safe_content) print("content", message.content) # contact.chat.send_message(message.safe_content) elif message.type == "image" or message.type == "video": print("-- Image or Video") print("filename", message.filename) print("size", message.size) print("mime", message.mime) print("caption", message.caption) print("client_url", message.client_url) message.save_media("./") else: print("-- Other")
myPhone = sys.argv[1] except: e = sys.exc_info()[0] data = { "sessionID": sessionID, "code": -1, "message": "phone number is empty ,exit.", "data": "null" } printJson(data) sys.exit() driver = WhatsAPIDriver(username="******", loadstyles=True) #print("Waiting for QR") #QR Code driver.get_qr(sessionID) try: driver.wait_for_login() data = { "sessionID": sessionID, "code": 2, "message": "Scan Succeeded", "data": "null" } printJson(data) except: data = { "sessionID": sessionID, "code": -1, "message": "Failed to Scan QR", "data": "null"
import os, sys, time, json from webwhatsapi import WhatsAPIDriver from webwhatsapi.objects.message import Message, MediaMessage print "Environment", os.environ try: os.environ["SELENIUM"] except KeyError: print "Please set the environment variable SELENIUM to Selenium URL" sys.exit(1) driver = WhatsAPIDriver(client='remote', command_executor=os.environ["SELENIUM"]) print("Waiting for QR") driver.get_qr('/pic/qr-code.png') driver.wait_for_login() print("Bot started") while True: time.sleep(3) print 'Checking for more messages, status', driver.get_status() for contact in driver.get_unread(): for message in contact.messages: print(json.dumps(message.get_js_obj(), indent=4)) print 'class', message.__class__.__name__ print 'message', message print 'id', message.id print 'type', message.type print 'timestamp', message.timestamp print 'chat_id', message.chat_id print 'sender', message.sender
print("Environment", os.environ) try: os.environ["SELENIUM"] = "http://172.22.0.2:4444/wd/hub" except KeyError: print("Please set the environment variable SELENIUM to Selenium URL") sys.exit(1) profiledir = os.path.join(".", "firefox_cache_v2") if not os.path.exists(profiledir): os.makedirs(profiledir) print("Conectando a selenium ") driver = WhatsAPIDriver(profile=profiledir, client='remote', command_executor='172.18.0.2:4444/wd/hub') print("Conecto y saco screen shot") print("Espero login 30 seg") driver.screenshot('shot.png') try: driver.wait_for_login(30) except Exception as e: print(traceback.format_exc()) if driver.is_logged_in(): print("conectado a wsp") driver.screenshot('shot.png') else: print("Waiting for QR") driver.get_qr('lala.png') print("Waiting for QR") driver.wait_for_login() print("Bot started") driver.save_firefox_profile()
from webwhatsapi import WhatsAPIDriver driver = WhatsAPIDriver(username="******") print('get_unread: ', driver.get_unread(include_me=True, include_notifications=True)) print('get_contacts: ', driver.get_contacts()) # print('save_firefox_profile: ', driver.save_firefox_profile()) getChatFrom = driver.get_chat_from_phone_number(628999871008) print('get_chat_from_phone_number: ', getChatFrom) # print('get_all_messages_in_chat: ', driver.get_all_messages_in_chat(getChatFrom.id, include_me=True, include_notifications=True)) print(driver.get_qr()) print('get_all_chats: ', driver.get_all_chats()) print(driver.wait_for_login()) # print('get_safe_name', driver.get_safe_name()) print('get_unread: ', driver.get_unread()) # print('view_unread: ', driver.view_unread())
import time import json import os import sys from QRMatrix import * from skimage import data, color from skimage.transform import rescale, resize, downscale_local_mean from webwhatsapi import WhatsAPIDriver from skimage import io driver = WhatsAPIDriver(username="******") Manager.go(driver) # driver.get_status() img = driver.get_qr("i.png") print(img) # time.sleep(4) QRCode = QRMatrix("decode", img) print(QRCode.decode()) print("@@@@@@@@@@@@@@@@@@") print("XXXXXXXX") # # i = io.imread(img) # # image = color.rgb2gray(i) # # image_rescaled = rescale(image, 0.25, anti_aliasing=False) # io.imsave(img, image_rescaled) print("XXXXXXXX") import timg obj = timg.Renderer() obj.load_image_from_file(img)
os.environ["SELENIUM"] except KeyError: print "Please set the environment variable SELENIUM to Selenium URL" sys.exit(1) ##Save session on "/firefox_cache/localStorage.json". ##Create the directory "/firefox_cache", it's on .gitignore ##The "app" directory is internal to docker, it corresponds to the root of the project. ##The profile parameter requires a directory not a file. profiledir = os.path.join(".", "firefox_cache") if not os.path.exists(profiledir): os.makedirs(profiledir) driver = WhatsAPIDriver(profile=profiledir, client='remote', command_executor=os.environ["SELENIUM"]) time.sleep(2) driver.get_qr(filename='myQR.png') print("Waiting for QR") driver.wait_for_login() print("Saving session") driver.save_firefox_profile(remove_old=False) print("Bot started") while True: time.sleep(3) print 'Checking for more messages, status', driver.get_status() for contact in driver.get_unread(): for message in contact.messages: print(json.dumps(message.get_js_obj(), indent=4)) print 'class', message.__class__.__name__ print 'message', message print 'id', message.id
from decouple import config from PIL import Image print("Starting...") chrome_options = [] gotQR = False while True: driver = WhatsAPIDriver( client="chrome", username="******", chrome_options=chrome_options, autoconnect=False ) ## Intialize webdriver ourself as API's is not working driver.driver.get(driver._URL) try: driver.get_qr(filename="qr.png") gotQR = True break except NoSuchElementException: ## Try again after 3 seconds try: time.sleep(3) driver.get_qr(filename="qr.png") gotQR = True break except NoSuchElementException: print("Failed to get QR code!" ) ## Give up, because it is likely that we have logged in gotQR = False tryAgain = input( """Do you want to try getting the QR code again? Please type "True" if you want to.""" )
class WPChannelBot(): def __init__(self): self.model = WPChannelBotModel() self.data = self.model.get_all() self.convs = self.model.get_convs() self.convs_state = self.model.get_convs_state() self.simple_steps = True self.log_file = "log/chatbot.log" self.cmd_wait_from = None self.cmd_wait = False self.profile = "profile" self.driver = None def start(self): print("Iniciando bot...") self.driver = WhatsAPIDriver(profile=self.profile) time.sleep(3) if not self.driver.get_status() == "LoggedIn": print("Carregando QRCode") self.driver.get_qr("qrcode.png") print("Escaneie o QRCode no arquivo qrcode.png") self.driver.wait_for_login() print("Bot iniciado") self.driver.save_firefox_profile() while True: time.sleep(1) for contact in self.driver.get_unread(include_me=False, include_notifications=True, use_unread_count=True): if len(contact.messages) == 1: for message in contact.messages: if isinstance(message, Message): self.new_message(message.content, contact) self.driver.chat_send_seen(contact.chat.id) time.sleep(3) else: contact.chat.send_message( "Fico confuso com muitas mensagens :S Por favor, envie uma de cada vez e espere eu responder tá?" ) contact.chat.send_message(CHANNEL_ASK_KEYWORD) def new_message(self, message, contact): if not self._is_cmd(message): if self.cmd_wait and contact.chat.id == self.cmd_wait_from: self._cmd_envio(message, contact.chat) elif not contact.chat.id in self.convs: self._proc_etapa(contact.chat.id, message, contact.chat, 2) else: for conv in self.convs_state: if conv['id'] == contact.chat.id: e = self._proc_etapa(contact.chat.id, message, contact.chat, conv['etapa']) conv['etapa'] = e self.model.conv_update(contact.chat.id, e) else: print("ADMINISTRADOR") self._run_cmd(message, contact.chat) def shutdown(self): print("Desconectando...") self.driver.close() time.sleep(3) print("Desconectado") def _already_user(self, id, chat): if isinstance(self.model.get(id), dict): chat.send_message( "Olá, você já está cadastrado neste canal. Assim que tiver novidade você vai receber!" ) return True else: return False def _is_keyword(self, content, chat): if content.lower() == CHANNEL_KEYWORD: return True else: chat.send_message(CHANNEL_ASK_KEYWORD) return False def _proc_etapa(self, id, content, chat, etapa): if etapa == 2: if not self._already_user(id, chat) and self._is_keyword( content, chat): # Efetua registros self.convs.append(id) self.convs_state.append({"id": id, "etapa": 4}) self.model.conv_add(id, 4) # Introdução do canal - Solicita nome chat.send_message(CHANNEL_INTRO) chat.send_message(CHANNEL_MSGS[0]) self._to_log("Iniciando cadastro: %s" % id) elif etapa == 4: # Armazena nome - Solicita cidade if self.simple_steps: self.data.append({"id": id, "nome": content}) # Salva no banco de dados self.model.add(id, content) chat.send_message((CHANNEL_MSGS[3] % content)) self._remove_convs(id) self._to_log("Finalizado cadastro: %s - %s" % (id, content)) else: self.data.append({ "id": id, "nome": content, "cidade": "", "bairro": "" }) chat.send_message(CHANNEL_MSGS[1]) # Salva no banco de dados self.model.add(id, content) self._to_log("Registrado nome: %s - %s" % (id, content)) return 6 elif etapa == 6: # Implementar veficação de validade de cidade # Verifica cidade - volta ao 5 : armazena cidade - solicita bairro ou passo for obj in self.data: if obj["id"] == id: obj["cidade"] = content self.model.update(id=id, cidade=content) chat.send_message(CHANNEL_MSGS[2]) self._to_log("Registrado cidade: %s - %s" % (id, content)) return 7 elif etapa == 7: # Implementar veficação de validade de bairro if content == "passo": # Finaliza caso não seja informado bairro chat.send_message((CHANNEL_MSGS[3] % self._get_conv_nome(id))) self._remove_convs(id) self._to_log("Finalizado cadastro: %s - %s" % (id, content)) else: # Armazena bairro - Finaliza cadastro for obj in self.data: if obj["id"] == id: obj["bairro"] = content self.model.update(id=id, bairro=content) chat.send_message( (CHANNEL_MSGS[3] % self._get_conv_nome(id))) self._remove_convs(id) self._to_log("Finalizado cadastro: %s - %s" % (id, content)) def _to_log(self, log): file = open(self.log_file, "a") file.write("\n>> %s " % log) file.close() return def _get_conv_nome(self, id): for obj in self.data: if obj["id"] == id: return obj["nome"] def _remove_convs(self, id): self.convs.remove(id) for conv in self.convs_state: if conv["id"] == id: self.convs_state.remove(conv) self.model.conv_delete(id) def _is_cmd(self, content): if content[:4] == "/cmd": return True else: return False def _run_cmd(self, content, chat): cmd = content[5:] if not self.model.check_admin(chat.id) == False: if cmd == "usuarios": self._cmd_usuarios(chat) elif cmd == "envio": self.cmd_wait = True self.cmd_wait_from = chat.id chat.send_message( "*ENVIE A SEGUIR A MENSAGEM A SER ENVIADA PARA O CANAL*") else: chat.send_message("*COMANDO NÃO RECONHECIDO*") elif self.model.check_admin(id=None, all=True) == False and cmd[:5] == "admin": print("Cadastrando novo admin") self.model.add_admin(chat.id, content[11:]) chat.send_message("*ADMINISTRADOR CADASTRADO*") else: chat.send_message(CHANNEL_ASK_KEYWORD) def _cmd_usuarios(self, chat): response = "*USUÁRIOS CADASTRADOS*\n\n" i = 0 users = self.model.get_all() for user in users: i += 1 response += "\n%d) %s - %s" % (i, user['id'], user['nome']) chat.send_message(response) def _cmd_envio(self, content, chat): i = 0 users = self.model.get_all() for user in users: i += 1 self.driver.send_message_to_id(user['id'], content) self.cmd_wait_from = None self.cmd_wait = False chat.send_message("*MENSAGEM ENVIADA PARA %d USUÁRIOS DO CANAL*" % i)
os.environ["SELENIUM"] = "http://172.17.0.3:4444/wd/hub" except KeyError: print("Please set the environment variable SELENIUM to Selenium URL") sys.exit(1) profiledir = os.path.join(".", "firefox_cache") if not os.path.exists(profiledir): os.makedirs(profiledir) print("Conectando a wsp") driver = WhatsAPIDriver(profile=profiledir, client='remote', command_executor=os.environ["SELENIUM"]) print('Pedira el qr') name = uuid4().hex + '.png' if os.path.exists(name): os.remove(name) driver.get_qr(name) print('Guarda el qr') os.rename('./' + name, '/app/files/qr/' + name) print("Waiting for QR") driver.wait_for_login() while True: time.sleep(30) driver.send_message_to_id("*****@*****.**", "hola") print(" Bateria ", driver.get_battery_level()) print(" Number ", driver.get_phone_number()) print(" Status ", driver.get_status()) name = uuid4().hex + '.png' if os.path.exists(name): os.remove(name) driver.screenshot(name)