class BotoSanStack(object): def __init__(self, credentials, encryptionEnabled=True): self.stack = YowStackBuilder().pushDefaultLayers(encryptionEnabled)\ .push(BotosanLayer)\ .build() self.stack.setCredentials(credentials) def start(self): self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) try: self.stack.loop() except AuthError as e: print("Authentication Error: %s" % e.message)
class YowsupMyStack(object): def __init__(self, credentials): self.layer = MailLayer() self.stack = YowStackBuilder().pushDefaultLayers(axolotl = True) \ .push(MailLayer) \ .build() self.stack.setCredentials(credentials) def startInputThread(self): print "Starting input thread" confinc = config['ingoing'] if confinc['with'] == "LMTP": sockpath = confinc['socket'] self.server = YoLMTPServer(self.layer, self.stack, sockpath, None) atexit.register(clean_lmtp) elif confinc['with'] == "SMTP": host = confinc['host'] port = confinc['port'] self.server = YoSMTPServer(self.layer, self.stack, (host, port), None) elif confinc['with'] == "POP3": self.server = Pop3Client(self.layer, self.stack, confinc) elif confinc['with'] == "IMAP": self.server = ImapClient(self.layer, self.stack, confinc) else: raise Exception("Unknown ingoing type") def start(self): self.startInputThread() self.server.start() self.stack.broadcastEvent( YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) try: while True: # FIXME: polling for IMAP and POP3, use async instead if args.debug: print "== WhatsApp loop" self.stack.loop(timeout=10, count=1) if args.debug: print "== Server loop" self.server.loop() except AuthError as e: print("Authentication Error: %s" % e.message) except Exception as e: content = "Exception: %s\n\n%s" % (str(e), traceback.format_exc()) self.layer.sendEmailRaw(content, subject="WhatsApp crashed") raise
class YowsupMyStack(object): def __init__(self, credentials): self.layer = MailLayer() self.stack = YowStackBuilder().pushDefaultLayers(axolotl = True) \ .push(MailLayer) \ .build() self.stack.setCredentials(credentials) def startInputThread(self): print "Starting input thread" confinc = config['ingoing'] if confinc['with'] == "LMTP": sockpath = confinc['socket'] self.server = YoLMTPServer(self.layer, self.stack, sockpath, None) atexit.register(clean_lmtp) elif confinc['with'] == "SMTP": host = confinc['host'] port = confinc['port'] self.server = YoSMTPServer(self.layer, self.stack,(host, port), None) elif confinc['with'] == "POP3": self.server = Pop3Client(self.layer, self.stack, confinc) elif confinc['with'] == "IMAP": self.server = ImapClient(self.layer, self.stack, confinc) else: raise Exception("Unknown ingoing type") def start(self): self.startInputThread() self.server.start() self.stack.broadcastEvent( YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) try: while True: # FIXME: polling for IMAP and POP3, use async instead if args.debug: print "== WhatsApp loop" self.stack.loop(timeout = 10, count = 1) if args.debug: print "== Server loop" self.server.loop() except AuthError as e: print("Authentication Error: %s" % e.message) except Exception as e: content = "Exception: %s\n\n%s" % (str(e), traceback.format_exc()) self.layer.sendEmailRaw(content, subject="WhatsApp crashed") raise
class WhatsappInstance: def __init__(self): self.stack = YowStackBuilder() \ .pushDefaultLayers(True) \ .push(MyLayer) \ .build() def start(self): self.stack.setCredentials(credentials) self.stack.broadcastEvent( YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT) ) # sending the connect signal def startThread(): try: self.stack.loop(timeout=0.5, discrete=0.5) except AuthError as e: print("Auth Error, reason %s" % e) except KeyboardInterrupt: print("\nYowsdown KeyboardInterrupt") sys.exit(0) except Exception as e: print("\nYowsdown General Exception") print(traceback.format_exc()) t1 = threading.Thread(target=startThread) t1.daemon = True t1.start() def sendmessage(self, user_id, message): mylayer = self.stack.getLayer(8) mylayer.toLower(AvailablePresenceProtocolEntity()) outgoingMessageProtocolEntity = TextMessageProtocolEntity(message, to=user_id) mylayer.send(outgoingMessageProtocolEntity) time.sleep(5) mylayer.toLower(UnavailablePresenceProtocolEntity())