示例#1
0
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
示例#4
0
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())