예제 #1
0
파일: run.py 프로젝트: maruen/yowsup
def send_message(destination, message):

    ''' destination is <phone number> without '+'
        and with country code of type string,
        message is string
        e.g send_message('11133434343','hello')
    '''
    messages = [(destination, message)]
    layers = (EchoLayer,
              (YowAuthenticationProtocolLayer,
               YowMessagesProtocolLayer,
               YowReceiptProtocolLayer,
               YowAckProtocolLayer,
               YowPresenceProtocolLayer)
              ) + YOWSUP_CORE_LAYERS
    stack = YowStack(layers)
    stack.setProp(EchoLayer.PROP_MESSAGES, messages)
    stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
    # Setting credentials
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)

    # WhatsApp server address
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)              
    stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    # Sending connecting signal
    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
    try:
        # Program main loop
        stack.loop()
    except AuthError as e:
        print('Authentication error %s' % e.message)
        sys.exit(1)
예제 #2
0
def send_message(destination, message):

    ''' destination is <phone number> without '+'
        and with country code of type string,
        message is string
        e.g send_message('11133434343','hello')
    '''
    messages = [(destination, message)]
    layers = (EchoLayer,
              (YowAuthenticationProtocolLayer,
               YowMessagesProtocolLayer,
               YowReceiptProtocolLayer,
               YowAckProtocolLayer,
               YowPresenceProtocolLayer)
              ) + YOWSUP_CORE_LAYERS
    stack = YowStack(layers)
    stack.setProp(EchoLayer.PROP_MESSAGES, messages)
    stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
    # Setting credentials
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)

    # WhatsApp server address
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)              
    stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    # Sending connecting signal
    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
    try:
        # Program main loop
        stack.loop()
    except AuthError as e:
        print('Authentication error %s' % e.message)
        sys.exit(1)
예제 #3
0
class YowsupEchoStack(object):
    def __init__(self, credentials, encryptionEnabled=False):
        if encryptionEnabled:
            from yowsup.layers.axolotl import YowAxolotlLayer
            layers = (EchoLayer,
                      YowParallelLayer([
                          YowAuthenticationProtocolLayer,
                          YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                          YowAckProtocolLayer, YowMediaProtocolLayer,
                          YowIqProtocolLayer, YowCallsProtocolLayer
                      ]), YowAxolotlLayer, YowLoggerLayer, YowCoderLayer,
                      YowCryptLayer, YowStanzaRegulator, YowNetworkLayer)
        else:
            layers = (EchoLayer,
                      YowParallelLayer([
                          YowAuthenticationProtocolLayer,
                          YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                          YowAckProtocolLayer, YowMediaProtocolLayer,
                          YowIqProtocolLayer, YowCallsProtocolLayer
                      ]), YowLoggerLayer, YowCoderLayer, YowCryptLayer,
                      YowStanzaRegulator, YowNetworkLayer)

        self.stack = YowStack(layers)
        self.stack.setCredentials(credentials)

    def start(self):
        self.stack.broadcastEvent(
            YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            logging.info("Whatsapp IS STARTING : ReceiveStack")
            self.stack.loop(timeout=1, count=100)
            logging.info("Stopping ... ")
        except AuthError as e:
            logging.info("Authentication Error: %s" % e.message)
예제 #4
0
파일: run.py 프로젝트: maruen/yowsup
def receive_message(credentials):

    layers = (  EchoLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
                YowReceiptProtocolLayer, YowAckProtocolLayer,
                YowPresenceProtocolLayer)
             ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)
    # Setting credentials
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)

    # WhatsApp server address
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
    stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    stack.setProp(EchoLayer.PROP_CREDENTIALS, credentials)

    # Sending connecting signal
    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
    try:
        # Program main loop
        stack.loop()
    except AuthError as e:
        print('Authentication error %s' % e.message)
        sys.exit(1)
예제 #5
0
class YowsupEchoStack(object):
    def __init__(self, encryption_enabled = True):
        if encryption_enabled:
            from yowsup.layers.axolotl import YowAxolotlLayer
            layers = (
                EchoLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                EchoLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setCredentials(settings.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)
예제 #6
0
class YowsupSendVCardStack(object):
    def __init__(self, credentials, to):
        """
        :param credentials:
        :param to:
        :param encryptionEnabled:
        :return:
        """
        layers = (
            SendVCardLayer,
            (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer),
            YowLoggerLayer,
            YowCoderLayer,
            YowCryptLayer,
            YowStanzaRegulator,
            YowNetworkLayer
        )

        self.stack = YowStack(layers)
        self.stack.setProp(SendVCardLayer.PROP_TO, to)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    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)
예제 #7
0
def run(wttQueue, ttwQueue, config):
    logger.info("Starting Whatsapp Self-Bot")

    keypair = KeyPair.from_bytes(
        base64.b64decode(config["client_static_keypair"]))

    credentials = (config["phone"], keypair)

    layers = (
        WhatsappLayer(wttQueue, ttwQueue),
        YowParallelLayer([
            YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
            YowReceiptProtocolLayer, YowAckProtocolLayer, YowIqProtocolLayer,
            YowGroupsProtocolLayer, YowMediaProtocolLayer
        ]),
        AxolotlControlLayer,
        YowParallelLayer((AxolotlSendLayer, AxolotlReceivelayer)),
    ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                  credentials)  # setting credentials
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                  YowConstants.ENDPOINTS[0])  # whatsapp server address
    # stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
    # stack.setProp(YowCoderLayer.PROP_RESOURCE, YowsupEnv.getCurrent().getResource()) #info about us as WhatsApp client

    stack.broadcastEvent(YowLayerEvent(
        YowNetworkLayer.EVENT_STATE_CONNECT))  # sending the connect signal

    stack.loop()
예제 #8
0
class YowsupReceiveStack(object):

    def __init__(self, credentials):
        layers = (ReceiveLayer,
                  (YowAuthenticationProtocolLayer,
                   YowMessagesProtocolLayer,
                   YowReceiptProtocolLayer,
                   YowAckProtocolLayer,
                   YowMediaProtocolLayer),
                  YowAxolotlLayer,
                  YowCoderLayer,
                  YowCryptLayer,
                  YowStanzaRegulator,
                  YowNetworkLayer)

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    def start(self):
        #print '-------------------------'
        #print 'En el start de YowsupReceiveStack'
        #print '-------------------------'
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            self.stack.loop(count=4)
            #self.stack.loop(timeout = 0.5, discrete = 0.5)
        except AuthError as e:
            print("Authentication Error: %s" % e.message)
예제 #9
0
파일: whatsapp.py 프로젝트: tax/pywhatsapp
class Client(object):

    def __init__(self, login, password):
        self.login = login
        self.password = password

    def _send_message(self, to, message, is_media=False):
        layers = (SendLayer,) + (YOWSUP_PROTOCOL_LAYERS_FULL,) + YOWSUP_CORE_LAYERS
        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, (self.login, self.password))
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.YowsupEnv.getCurrent().getResource())

        self.stack.setProp(SendLayer.PROP_MESSAGES, [([to, message, is_media])])
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            self.stack.loop()
        except KeyboardInterrupt:
            pass

    def send_message(self, to, message):
        self._send_message(to, message)

    def send_media(self, to, path):
        self._send_message(to, path, is_media=True)
예제 #10
0
파일: stack.py 프로젝트: cutec-chris/yowsup
class YowsupEchoStack(object):
    def __init__(self, credentials, encryptionEnabled=False):
        if encryptionEnabled:
            env.CURRENT_ENV = env.S40YowsupEnv()
            layers = (EchoLayer, (YowAuthenticationProtocolLayer,
                                  YowMessagesProtocolLayer,
                                  YowReceiptProtocolLayer, YowAckProtocolLayer,
                                  YowMediaProtocolLayer), YowAxolotlLayer,
                      YowLoggerLayer, YowCoderLayer, YowCryptLayer,
                      YowStanzaRegulator, YowNetworkLayer)
        else:
            layers = (EchoLayer, (YowAuthenticationProtocolLayer,
                                  YowMessagesProtocolLayer,
                                  YowReceiptProtocolLayer, YowAckProtocolLayer,
                                  YowMediaProtocolLayer), YowLoggerLayer,
                      YowCoderLayer, YowCryptLayer, YowStanzaRegulator,
                      YowNetworkLayer)

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                           credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                           YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
                           env.CURRENT_ENV.getResource())

    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)
예제 #11
0
def run(phone, password, config):

    # @TODO check phone, password is set
    credentials = (phone.encode(), password.encode())

    layers = (
        secretary(config),
        (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
        YowAxolotlLayer,
    ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)

    # Setting credentials
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)

    # Whatsapp server address
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])

    # Info about us as WhatsApp client
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
    stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    # Sending the connect signal
    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))

    stack.loop()
예제 #12
0
파일: stack.py 프로젝트: xcution/yowsup
class YowsupSyncStack(object):
    def __init__(self, credentials, contacts, encryptionEnabled=False):
        """
        :param credentials:
        :param contacts: list of [jid ]
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            from yowsup.layers.axolotl import YowAxolotlLayer
            layers = (SyncLayer,
                      (YowAuthenticationProtocolLayer,
                       YowContactsIqProtocolLayer, YowReceiptProtocolLayer,
                       YowAckProtocolLayer), YowAxolotlLayer, YowLoggerLayer,
                      YowCoderLayer, YowCryptLayer, YowStanzaRegulator,
                      YowNetworkLayer)
        else:
            layers = (SyncLayer,
                      (YowAuthenticationProtocolLayer,
                       YowContactsIqProtocolLayer, YowReceiptProtocolLayer,
                       YowAckProtocolLayer), YowLoggerLayer, YowCoderLayer,
                      YowCryptLayer, YowStanzaRegulator, YowNetworkLayer)

        self.stack = YowStack(layers)
        self.stack.setProp(SyncLayer.PROP_CONTACTS, contacts)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        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)
예제 #13
0
def recv_message():
    layers = (
        EchoLayer,
        YowParallelLayer([
            YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
            YowReceiptProtocolLayer, YowAckProtocolLayer
        ]),
        AxolotlControlLayer,
        YowParallelLayer((AxolotlSendLayer, AxolotlReceivelayer)),
    ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)
    # Setting credentials
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)

    # WhatsApp server address
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
    stack.setProp(YowCoderLayer.PROP_RESOURCE,
                  YowsupEnv.getCurrent().getResource())

    # Sending connecting signal
    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
    try:
        # Program main loop
        stack.loop()
    except AuthError as e:
        print('Authentication error %s' % e.message)
        sys.exit(1)
예제 #14
0
class YowsupEchoStack(object):
    def __init__(self, encryption_enabled=True):
        if encryption_enabled:
            from yowsup.layers.axolotl import YowAxolotlLayer
            layers = (EchoLayer,
                      YowParallelLayer([
                          YowAuthenticationProtocolLayer,
                          YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                          YowAckProtocolLayer, YowMediaProtocolLayer,
                          YowIqProtocolLayer, YowCallsProtocolLayer
                      ]), YowAxolotlLayer, YowLoggerLayer, YowCoderLayer,
                      YowCryptLayer, YowStanzaRegulator, YowNetworkLayer)
        else:
            layers = (EchoLayer,
                      YowParallelLayer([
                          YowAuthenticationProtocolLayer,
                          YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                          YowAckProtocolLayer, YowMediaProtocolLayer,
                          YowIqProtocolLayer, YowCallsProtocolLayer
                      ]), YowLoggerLayer, YowCoderLayer, YowCryptLayer,
                      YowStanzaRegulator, YowNetworkLayer)

        self.stack = YowStack(layers)
        self.stack.setCredentials(settings.CREDENTIALS)

    def start(self):
        self.stack.broadcastEvent(
            YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            self.stack.loop(timeout=120)
        except AuthError as e:
            print("Authentication Error: %s" % e.message)
        except Exception as e:
            print("Another Error: %s" % str(e))
예제 #15
0
class YowsupBotStack(object):
    def __init__(self, credentials):
        """Default Yowsup setup, with the Route Layer on top"""
        layers = (RouteLayer,
                  YowParallelLayer([YowAuthenticationProtocolLayer,
                                    YowGroupsProtocolLayer,
                                    YowMessagesProtocolLayer,
                                    YowReceiptProtocolLayer,
                                    YowAckProtocolLayer,
                                    YowMediaProtocolLayer,
                                    YowIqProtocolLayer]),
                  YowAxolotlLayer,
                  ) + YOWSUP_CORE_LAYERS
        self.stack = YowStack(layers)
        self.stack.setCredentials(credentials)
        self.credentials = credentials


    def start(self):
        "Starts the connection with Whatsapp servers,"
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            logging.info("#" * 50)
            logging.info("Server started. Phone number: %s" % self.credentials[0])
            logging.info("#" * 50)
            self.stack.loop()
        except AuthError as e:
            logging.exception("Authentication Error: %s" % e.message)
        except Exception as e:
            logging.exception("Unknown Error: %s" % e.message)
            raise e
예제 #16
0
class Client(object):
    def __init__(self, login, password):
        self.login = login
        self.password = password

    def _send_message(self, to, message, is_media=False):
        layers = (SendLayer, ) + (
            YOWSUP_PROTOCOL_LAYERS_FULL, ) + YOWSUP_CORE_LAYERS
        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                           (self.login, self.password))
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                           YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
                           env.YowsupEnv.getCurrent().getResource())

        self.stack.setProp(SendLayer.PROP_MESSAGES,
                           [([to, message, is_media])])
        self.stack.broadcastEvent(
            YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            self.stack.loop()
        except KeyboardInterrupt:
            pass

    def send_message(self, to, message):
        self._send_message(to, message)

    def send_media(self, to, path):
        self._send_message(to, path, is_media=True)
class YowsupMyStack(object):
    def __init__(self, credentials):
        env.CURRENT_ENV = env.S40YowsupEnv()
        layers = (
            MailLayer,
            (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
                YowReceiptProtocolLayer, YowAckProtocolLayer,
                YowMediaProtocolLayer, YowIqProtocolLayer,
                YowPresenceProtocolLayer)
            ) + YOWSUP_CORE_LAYERS

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
                env.CURRENT_ENV.getResource())

    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)
예제 #18
0
class YowsupCommandServerStack(object):
    def __init__(self, credentials, allowed_users, encryptionEnabled = False):
        if encryptionEnabled:
            from yowsup.layers.axolotl                     import YowAxolotlLayer
            layers = (
                CommandServerLayer(allowed_users),
                YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer]),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                CommandServerLayer(allowed_users),
                YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer]),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        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)
예제 #19
0
class YowsupCommandServerStack(object):
    def __init__(self, credentials, allowed_users, encryptionEnabled=False):
        if encryptionEnabled:
            from yowsup.layers.axolotl import YowAxolotlLayer
            layers = (CommandServerLayer(allowed_users),
                      YowParallelLayer([
                          YowAuthenticationProtocolLayer,
                          YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                          YowAckProtocolLayer, YowMediaProtocolLayer,
                          YowIqProtocolLayer, YowCallsProtocolLayer
                      ]), YowAxolotlLayer, YowLoggerLayer, YowCoderLayer,
                      YowCryptLayer, YowStanzaRegulator, YowNetworkLayer)
        else:
            layers = (CommandServerLayer(allowed_users),
                      YowParallelLayer([
                          YowAuthenticationProtocolLayer,
                          YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                          YowAckProtocolLayer, YowMediaProtocolLayer,
                          YowIqProtocolLayer, YowCallsProtocolLayer
                      ]), YowLoggerLayer, YowCoderLayer, YowCryptLayer,
                      YowStanzaRegulator, YowNetworkLayer)

        self.stack = YowStack(layers)
        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)
예제 #20
0
class YowsupBotStack(object):
    def __init__(self, credentials):
        """Default Yowsup setup, with the Route Layer on top"""
        layers = (RouteLayer,
                  YowParallelLayer([YowAuthenticationProtocolLayer,
                                    YowGroupsProtocolLayer,
                                    YowMessagesProtocolLayer,
                                    YowReceiptProtocolLayer,
                                    YowAckProtocolLayer,
                                    YowMediaProtocolLayer,
                                    YowIqProtocolLayer]),
                  YowAxolotlLayer,
                  ) + YOWSUP_CORE_LAYERS
        self.stack = YowStack(layers)
        self.stack.setCredentials(credentials)
        self.credentials = credentials

    def start(self):
        "Starts the connection with Whatsapp servers,"
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            logging.info("#" * 50)
            logging.info("Server started. Phone number: %s" % self.credentials[0])
            logging.info("#" * 50)
            self.stack.loop()
        except AuthError as e:
            logging.exception("Authentication Error: %s" % e.message)
        except Exception as e:
            logging.exception("Unknown Error: %s" % e.message)
            raise e
예제 #21
0
class YowsupSendStack(object):
    def __init__(self, credentials, messages, encryptionEnabled=False):
        """
        :param credentials:
        :param messages: list of (jid, message) tuples
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            env.CURRENT_ENV = env.S40YowsupEnv()
            layers = (
                SendLayer,
                (
                    YowAuthenticationProtocolLayer,
                    YowMessagesProtocolLayer,
                    YowReceiptProtocolLayer,
                    YowAckProtocolLayer,
                ),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer,
            )
        else:
            layers = (
                SendLayer,
                (
                    YowAuthenticationProtocolLayer,
                    YowMessagesProtocolLayer,
                    YowReceiptProtocolLayer,
                    YowAckProtocolLayer,
                ),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer,
            )

        self.stack = YowStack(layers)
        self.stack.setProp(SendLayer.PROP_MESSAGES, messages)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    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)
예제 #22
0
class YowsupMiddleManStack(object):
    def __init__(self, credentials, groups, encryptionEnabled=False):
        if encryptionEnabled:
            from yowsup.layers.axolotl import YowAxolotlLayer

            layers = (
                MiddleManLayer,
                (
                    YowAuthenticationProtocolLayer,
                    YowMessagesProtocolLayer,
                    YowReceiptProtocolLayer,
                    YowAckProtocolLayer,
                    YowMediaProtocolLayer,
                    YowIqProtocolLayer,
                    YowCallsProtocolLayer,
                ),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer,
            )
        else:
            layers = (
                MiddleManLayer,
                (
                    YowAuthenticationProtocolLayer,
                    YowMessagesProtocolLayer,
                    YowReceiptProtocolLayer,
                    YowAckProtocolLayer,
                    YowMediaProtocolLayer,
                    YowIqProtocolLayer,
                    YowCallsProtocolLayer,
                ),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer,
            )

        self.stack = YowStack(layers)
        self.stack.setProp(MiddleManLayer.PROP_GROUPS, groups[0])
        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)
예제 #23
0
파일: run.py 프로젝트: lolu/yowsup-setup
def start_server():
    layers = (
        EchoLayer,
        YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),YowAxolotlLayer
    ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)         #setting credentials
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])    #whatsapp server address
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
    stack.setProp(YowCoderLayer.PROP_RESOURCE, YowsupEnv.getCurrent().getResource())          #info about us as WhatsApp client

    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))   #sending the connect signal

    stack.loop()
예제 #24
0
class YowsupSendStack(object):
    def __init__(self, credentials, messages, encryptionEnabled = False):
        """
        :param credentials:
        :param messages: list of (jid, message) tuples
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            from yowsup.layers.axolotl                     import YowAxolotlLayer
            layers = (
                SendLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                SendLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setProp(SendLayer.PROP_MESSAGES, messages)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setCredentials(credentials)

    def start(self):
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            self.stack.loop()
        
        except KeyboardInterrupt as e:
            raise e

        except AuthError as e:
            print("Authentication Error: %s" % e.message)
예제 #25
0
class YowsupRobotStack(object):
    def __init__(self, credentials, encryptionEnabled = False,interactionProtocol=None,url=None,flaskApp=None):
        if encryptionEnabled:
            from yowsup.layers.axolotl                     import YowAxolotlLayer
            layers = (
                RobotLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                RobotLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setCredentials(credentials)
        self.stack.setProp('url',url)
        self.stack.setProp('flaskApp',flaskApp)

    def start(self):
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        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 e
        t1=threading.Thread(target=startThread)
        t1.daemon=True
        t1.start()
예제 #26
0
class SendMediaStack(object):
    def __init__(self, credentials, messages):
        layers=(SendMediaLayer,)+(YOWSUP_PROTOCOL_LAYERS_FULL,)+YOWSUP_CORE_LAYERS
        self.stack=YowStack(layers)
        self.stack.setProp(SendMediaLayer.PROP_MESSAGES,messages)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE,True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN,YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,env.CURRENT_ENV.getResource())

    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)
예제 #27
0
파일: stack.py 프로젝트: vishwasjois/yowsup
class YowsupSyncStack(object):
    def __init__(self, credentials, contacts, encryptionEnabled = False):
        """
        :param credentials:
        :param contacts: list of [jid ]
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            from yowsup.layers.axolotl                     import YowAxolotlLayer
            layers = (
                SyncLayer,
                (YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                SyncLayer,
                (YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setProp(SyncLayer.PROP_CONTACTS, contacts)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    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)
예제 #28
0
파일: stack.py 프로젝트: vmosoti/yowsup
class YowsupSyncStack(object):
    def __init__(self, credentials, contacts, encryptionEnabled = False):
        """
        :param credentials:
        :param contacts: list of [jid ]
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            layers = (
                SyncLayer,
                (YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            env.CURRENT_ENV = env.S40YowsupEnv()
            layers = (
                SyncLayer,
                (YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setProp(SyncLayer.PROP_CONTACTS, contacts)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    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)
예제 #29
0
파일: stack.py 프로젝트: oscardb22/yowsup
class YowsupSyncStack(object):
    def __init__(self, credentials, contacts, encryptionEnabled=False):
        """
        :param credentials:
        :param contacts: list of [jid ]
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            from yowsup.layers.axolotl import YowAxolotlLayer

            layers = (
                SyncLayer,
                (YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer,
                 YowAckProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                SyncLayer,
                (YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer,
                 YowAckProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setProp(SyncLayer.PROP_CONTACTS, contacts)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        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: {0}".format(e))
예제 #30
0
    def run(self):
        mess = None
        to = None
        phone = None
        passw = None
        with open(appPath + "/config.cfg") as f:
            for line in f:
                if line.find("phone number:", 0) == 0:
                    phone = line[13:]
                    phone = phone.strip()
                elif line.find("password:"******"send_message_startup:", 0) == 0:
                    mess = line[21:-1]
                    mess = "'" + mess + "'"
                elif line.find("allowed1:", 0) == 0:
                    to = line[9:-1]
                CREDENTIALS = (phone, passw)
        print("/send.py " + to + " " + mess)
        p = subprocess.Popen(appPath + "/send.py " + to + " " + mess, stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        while True:
            layers = (
                DaemonLayer,
                (
                    YowAuthenticationProtocolLayer,
                    YowMessagesProtocolLayer,
                    YowReceiptProtocolLayer,
                    YowAckProtocolLayer,
                ),
            ) + YOWSUP_CORE_LAYERS

            stack = YowStack(layers)
            stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)
            stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
            stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
            stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())
            stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
            interface = stack.getLayer(6)
            interface.initialize(appPath)
            try:
                stack.loop()
            except:
                pass
예제 #31
0
class sendmediafile(object):

    def __init__(self, credentials, messages):
        layers = (SendMedia,) + (YOWSUP_PROTOCOL_LAYERS_FULL,) + YOWSUP_CORE_LAYERS

        self.stack = YowStack(layers)
        self.stack.setProp(SendMedia.PROP_MESSAGES, messages)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    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)
예제 #32
0
class YowsupEchoStack(object):
    def __init__(self, credentials, encryptionEnabled = False):
        if encryptionEnabled:
            layers = (
                EchoLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            env.CURRENT_ENV = env.S40YowsupEnv()
            layers = (
                EchoLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())
        

        
    def start(self):
        while True:
            try:
                self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
                self.stack.loop()
            except AuthError as e:
                break
            except Exception as e:
                print(e)
                time.sleep(20)
예제 #33
0
class YowsupSendStack(object):
    def __init__(self, credentials, messages, encryptionEnabled = False):
        """
        :param credentials:
        :param messages: list of (jid, message) tuples
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            from yowsup.layers.axolotl                     import YowAxolotlLayer
            layers = (
                SendLayer,
                YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                SendLayer,
                YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setProp(SendLayer.PROP_MESSAGES, messages)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        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)
예제 #34
0
class YowsupSendStack(object):
    def __init__(self, credentials, messages, encryptionEnabled=False):
        """
        :param credentials:
        :param messages: list of (jid, message) tuples
        :param encryptionEnabled:
        :return:
        """
        if encryptionEnabled:
            from yowsup.layers.axolotl import YowAxolotlLayer
            layers = (SendLayer,
                      (YowAuthenticationProtocolLayer,
                       YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                       YowAckProtocolLayer), YowAxolotlLayer, YowLoggerLayer,
                      YowCoderLayer, YowCryptLayer, YowStanzaRegulator,
                      YowNetworkLayer)
        else:
            layers = (SendLayer,
                      (YowAuthenticationProtocolLayer,
                       YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                       YowAckProtocolLayer), YowLoggerLayer, YowCoderLayer,
                      YowCryptLayer, YowStanzaRegulator, YowNetworkLayer)

        self.stack = YowStack(layers)
        self.stack.setProp(SendLayer.PROP_MESSAGES, messages)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                           credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                           YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
                           env.CURRENT_ENV.getResource())

    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)
예제 #35
0
class YowsupCliStack(object):
    def __init__(self, credentials):
        self.stack = YowStack(
            (YowsupCliLayer,) + YOWSUP_FULL_STACK
        )
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, YowConstants.RESOURCE)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)

    def start(self):
        print("Yowsup Cli client\n==================\nType /help for available commands\n")
        self.stack.broadcastEvent(YowLayerEvent(YowsupCliLayer.EVENT_START))

        try:
            self.stack.loop(timeout = 0.5, discrete = 0.5)
        except AuthError as e:
            print("Auth Error, reason %s" % e)
        except KeyboardInterrupt:
            print("\nYowsdown")
            sys.exit(0)
예제 #36
0
    def run(self):
        layers = (EchoLayer,
                  YowParallelLayer([
                      YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
                      YowReceiptProtocolLayer, YowAckProtocolLayer
                  ]), YowAxolotlLayer) + YOWSUP_CORE_LAYERS

        stack = YowStack(layers)
        stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                      CREDENTIALS)  #setting credentials
        stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                      YowConstants.ENDPOINTS[0])  #whatsapp server address
        stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        stack.setProp(
            YowCoderLayer.PROP_RESOURCE,
            env.CURRENT_ENV.getResource())  #info about us as WhatsApp client

        stack.broadcastEvent(YowLayerEvent(
            YowNetworkLayer.EVENT_STATE_CONNECT))  #sending the connect signal

        stack.loop()  #this is the program mainloop
예제 #37
0
    def create_stack(self):
        CREDENTIALS = (PHONE, "F5vqaa/9jCXDDMoTSWysyhOI0BU=")  # replace with your phone and password

        layers = (
            EchoLayer,
            (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
            YowAxolotlLayer,
            YowCoderLayer,
            YowCryptLayer,
            YowStanzaRegulator,
            YowNetworkLayer
        )

        stack = YowStack(layers)
        stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)  # setting credentials
        stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])  # whatsapp server address
        stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())  # info about us as WhatsApp client

        stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))  # sending the connect signal
        return stack
예제 #38
0
def main():
    logging.debug("Starting up...")
    layers = (
        (MessageReceiver, ReceiptReceiver),
        (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
         YowReceiptProtocolLayer, YowAckProtocolLayer)
    ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)
    # setting credentials
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)
    # whatsapp server address
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
    # info about us as WhatsApp client
    stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    # sending the connect signal
    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))

    stack.loop()  # this is the program mainloop
예제 #39
0
class YowsupListenStack(object):
    def __init__(self, credentials, queue, encryptionEnabled = False):

        ListenLayer.setqueue(queue)

        if encryptionEnabled:
            layers = (
                ListenLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            env.CURRENT_ENV = env.S40YowsupEnv()
            layers = (
                ListenLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    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)
예제 #40
0
def main():
    layers = (
                EchoLayer,
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )


    thread = MyThread(YowStack(layers))
    try:
        print ("Starting "+sys.argv[1])
        stack = YowStack(layers)

        stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)         #setting credentials
        stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])    #whatsapp server address
        stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())          #info about us as WhatsApp client

        stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))   #sending the connect signal

        thread = MyThread(stack)
        thread.start()
        stack.loop(timeout = 0.5, discrete = 0.5)
        print("Exit "+sys.argv[1]+"!!")

    except Exception as e:
        print("Error in "+sys.argv[1]+", reason %s" % e)

    finally:
        thread.finish()
        time.sleep(5)
        print("Restart "+sys.argv[1]+"!!")
        #os.system("python run-Executi.py")
        sys.exit(0)
예제 #41
0
def main():
    layers = (EchoLayer, (YowAuthenticationProtocolLayer,
                          YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                          YowAckProtocolLayer, YowMediaProtocolLayer),
              YowAxolotlLayer, YowLoggerLayer, YowCoderLayer, YowCryptLayer,
              YowStanzaRegulator, YowNetworkLayer)

    thread = MyThread(YowStack(layers))
    try:
        print("Starting " + sys.argv[1])
        stack = YowStack(layers)

        stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                      CREDENTIALS)  #setting credentials
        stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                      YowConstants.ENDPOINTS[0])  #whatsapp server address
        stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        stack.setProp(
            YowCoderLayer.PROP_RESOURCE,
            env.CURRENT_ENV.getResource())  #info about us as WhatsApp client

        stack.broadcastEvent(YowLayerEvent(
            YowNetworkLayer.EVENT_STATE_CONNECT))  #sending the connect signal

        thread = MyThread(stack)
        thread.start()
        stack.loop(timeout=0.5, discrete=0.5)
        print("Exit " + sys.argv[1] + "!!")

    except Exception as e:
        print("Error in " + sys.argv[1] + ", reason %s" % e)

    finally:
        thread.finish()
        time.sleep(5)
        print("Restart " + sys.argv[1] + "!!")
        #os.system("python run-Executi.py")
        sys.exit(0)
예제 #42
0
class YowsupCliStack(object):
    def __init__(self, credentials):
        self.stack = YowStack((YowsupCliLayer, ) + YOWSUP_FULL_STACK)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                           YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, YowConstants.RESOURCE)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                           credentials)

    def start(self):
        print(
            "Yowsup Cli client\n==================\nType /help for available commands\n"
        )
        self.stack.broadcastEvent(YowLayerEvent(YowsupCliLayer.EVENT_START))

        try:
            self.stack.loop(timeout=0.5, discrete=0.5)
        except AuthError as e:
            print("Auth Error, reason %s" % e)
        except KeyboardInterrupt:
            print("\nYowsdown")
            sys.exit(0)
예제 #43
0
파일: stack.py 프로젝트: talshahaf/Bossup
class YowsupEchoStack(object):
    def __init__(self, credentials, entities):
        logger = logging.StreamHandler()
        logger.setLevel(logging.DEBUG)
        logging.getLogger("yowsup.stacks.yowstack").addHandler(logger)
        
        env.CURRENT_ENV = env.AndroidYowsupEnv()
        #env.CURRENT_ENV = env.S40YowsupEnv()
        
        layers = (
            EchoLayer, 
            
            YowParallelLayer([YowGroupsProtocolLayer, YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowPresenceProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer, YowNotificationsProtocolLayer, YowProfilesProtocolLayer, YowChatstateProtocolLayer, YowMyGroupsProtocolLayer]),
            #SniffLayer,
            YowAxolotlLayer,
            YowLoggerLayer,
            YowCoderLayer,
            YowCryptLayer,
            YowStanzaRegulator,
            YowNetworkLayer
        )

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(EchoLayer.PROP_SELFNUMBER, credentials[0])
        self.stack.setProp(EchoLayer.PROP_ENTITYCLASSES, entities)
        self.stack.setProp(EchoLayer.SELF_STACK, self.stack)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

    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)
예제 #44
0
class YowsupEchoStack(object):
    def __init__(self, credentials):
        layers = (
            EchoLayer,
            (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer),
            YowLoggerLayer,
            YowCoderLayer,
            YowCryptLayer,
            YowStanzaRegulator,
            YowNetworkLayer
        )

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, YowConstants.RESOURCE)

    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)
예제 #45
0
class SendStack(object):
    def __init__(self, credentials, messages):
        env.CURRENT_ENV = env.S40YowsupEnv()
        layers = (SendLayer, (YowAuthenticationProtocolLayer,
                              YowMessagesProtocolLayer,
                              YowReceiptProtocolLayer, YowAckProtocolLayer),
                  YowLoggerLayer, YowCoderLayer, YowCryptLayer,
                  YowStanzaRegulator, YowNetworkLayer)
        self.stack = YowStack(layers)
        self.stack.setProp(SendLayer.PROP_MESSAGES, messages)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_PASSIVE, True)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                           credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                           YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
                           env.CURRENT_ENV.getResource())

    def start(self):  # Throws AuthError
        logging.info('Begin connection to whatsapp')
        self.stack.broadcastEvent(
            YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        self.stack.loop()
예제 #46
0
class YowsupEchoStack(object):
    def __init__(self, credentials, encryptionEnabled = False):
        if encryptionEnabled:
            from yowsup.layers.axolotl                     import YowAxolotlLayer
            layers = (
                EchoLayer,
                YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer]),
                YowAxolotlLayer,
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )
        else:
            layers = (
                EchoLayer,
                YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer]),
                YowLoggerLayer,
                YowCoderLayer,
                YowCryptLayer,
                YowStanzaRegulator,
                YowNetworkLayer
            )

        self.stack = YowStack(layers)
        self.stack.setCredentials(credentials)

    def start(self):
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            logging.info("Whatsapp IS STARTING : ReceiveStack");
            self.stack.loop(timeout=1, count=100)
            logging.info("Stopping ... ");
        except AuthError as e:
            logging.info("Authentication Error: %s" % e.message)
예제 #47
0
파일: stack.py 프로젝트: vishnuc91/yowsup
class YowsupEchoStack(object):
    def __init__(self, credentials):
        layers = (
            EchoLayer,
            (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
            YowLoggerLayer,
            YowCoderLayer,
            YowCryptLayer,
            YowStanzaRegulator,
            YowNetworkLayer
        )

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE, YowConstants.RESOURCE)

    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)
예제 #48
0
파일: run.py 프로젝트: shahidge4/waposter
from yowsup.layers.logger import YowLoggerLayer
from yowsup.layers.protocol_iq import YowIqProtocolLayer
from yowsup.layers.protocol_calls import YowCallsProtocolLayer
from yowsup.layers.axolotl import YowAxolotlLayer
from yowsup.common import YowConstants
from yowsup import env

if os.environ['DEBUG'] == '1':
    logging.basicConfig(level=logging.DEBUG)

CREDENTIALS = (os.environ['PHONE'], os.environ['PASSWORD'])

if __name__ == "__main__":
    layers = (ReceiveLayer,
              (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
               YowReceiptProtocolLayer, YowAckProtocolLayer,
               YowMediaProtocolLayer, YowIqProtocolLayer,
               YowCallsProtocolLayer, YowProfilesProtocolLayer),
              YowAxolotlLayer, YowLoggerLayer, YowCoderLayer, YowCryptLayer,
              YowStanzaRegulator, YowNetworkLayer)

    stack = YowStack(layers)
    stack.setCredentials(CREDENTIALS)

    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))

    try:
        stack.loop(timeout=0.5, discrete=0.5)
    except AuthError as e:
        print("Authentication Error: %s" % e.message)
예제 #49
0
from yowsup.layers.protocol_receipts           import YowReceiptProtocolLayer
from yowsup.layers.protocol_acks               import YowAckProtocolLayer
from yowsup.layers.network                     import YowNetworkLayer
from yowsup.layers.coder                       import YowCoderLayer
from yowsup.layers.protocol_iq                 import YowIqProtocolLayer
from yowsup.stacks import YowStack
from yowsup.common import YowConstants
from yowsup.layers import YowLayerEvent
from yowsup.stacks import YowStack, YOWSUP_CORE_LAYERS
from yowsup.layers.axolotl                     import YowAxolotlLayer
from yowsup.env import YowsupEnv


CREDENTIALS = ("CC9999999999", "password-here") # replace with your phone and password

if __name__==  "__main__":
    layers = (
        EchoLayer,
        YowParallelLayer([YowAuthenticationProtocolLayer, YowIqProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),YowAxolotlLayer
    ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)         #setting credentials
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])    #whatsapp server address
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)              
    stack.setProp(YowCoderLayer.PROP_RESOURCE, YowsupEnv.getCurrent().getResource())          #info about us as WhatsApp client

    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))   #sending the connect signal

    stack.loop() #this is the program mainloop
from yowsup.layers.protocol_messages           import YowMessagesProtocolLayer
from yowsup.layers.protocol_receipts           import YowReceiptProtocolLayer
from yowsup.layers.protocol_acks               import YowAckProtocolLayer
from yowsup.layers.network                     import YowNetworkLayer
from yowsup.layers.coder                       import YowCoderLayer
from yowsup.stacks import YowStack
from yowsup.common import YowConstants
from yowsup.layers import YowLayerEvent
from yowsup.stacks import YowStack, YOWSUP_CORE_LAYERS
from yowsup import env
import logging
logging.basicConfig(level=logging.DEBUG)

CREDENTIALS = ("919872736838", "yWcmikNwHmDPJ6xPeXOS0bk1X14=") # replace with your phone and password

if __name__==  "__main__":
    layers = (
        EchoLayer,
        (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer), YowAxolotlLayer
    ) + YOWSUP_CORE_LAYERS

    stack = YowStack(layers)
    stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS)         #setting credentials
    stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])    #whatsapp server address
    stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
    stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())          #info about us as WhatsApp client

    stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))   #sending the connect signal

    stack.loop() #this is the program mainloop
예제 #51
0
class YowsupApp(object):
	def __init__(self):
		env.CURRENT_ENV = env.S40YowsupEnv()

		layers = (YowsupAppLayer,
				YowParallelLayer((YowAuthenticationProtocolLayer,
					YowMessagesProtocolLayer,
					YowReceiptProtocolLayer,
					YowAckProtocolLayer,
					YowMediaProtocolLayer,
					YowIbProtocolLayer,
					YowIqProtocolLayer,
					YowNotificationsProtocolLayer,
					YowContactsIqProtocolLayer,
					YowChatstateProtocolLayer,
					YowCallsProtocolLayer,
					YowMediaProtocolLayer,
					YowPrivacyProtocolLayer,
					YowProfilesProtocolLayer,
					YowGroupsProtocolLayer,
					YowPresenceProtocolLayer)),
				YowAxolotlLayer,
				YowCoderLayer,
				YowCryptLayer,
				YowStanzaRegulator,
				YowNetworkLayer
		)
		self.stack = YowStack(layers)
		self.stack.broadcastEvent(
			YowLayerEvent(YowsupAppLayer.EVENT_START, caller = self)
		)

	def login(self, username, password):
		"""Login to yowsup

		Should result in onAuthSuccess or onAuthFailure to be called.

		Args:
			- username: (str) username in the form of 1239482382 (country code
				  and cellphone number)

			- password: (str) base64 encoded password
		  """
		self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
							(username, password))
		self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
							YowConstants.ENDPOINTS[0])
		self.stack.setProp(YowCoderLayer.PROP_DOMAIN,
							YowConstants.DOMAIN)
		self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
							env.CURRENT_ENV.getResource())
#		self.stack.setProp(YowIqProtocolLayer.PROP_PING_INTERVAL, 5)

		try:
			self.stack.broadcastEvent(
					YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
		except TypeError as e: # Occurs when password is not correctly formated
			self.onAuthFailure('password not base64 encoded')
#		try:
#			self.stack.loop(timeout=0.5, discrete=0.5)
#		except AuthError as e: # For some reason Yowsup throws an exception
#			self.onAuthFailure("%s" % e)

	def logout(self):
		"""
		Logout from whatsapp
		"""
		self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT))
	
	def sendReceipt(self, _id, _from, read, participant):
		"""
		Send a receipt (delivered: double-tick, read: blue-ticks)

		Args:
			- _id: id of message received
			- _from: jid of person who sent the message
			- read: ('read' or None) None is just delivered, 'read' is read
			- participant
		"""
		receipt = OutgoingReceiptProtocolEntity(_id, _from, read, participant)
		self.sendEntity(receipt)

	def sendTextMessage(self, to, message):
		"""
		Sends a text message

		Args:
			- to: ([email protected]) who to send the message to
			- message: (str) the body of the message
		"""
		messageEntity = TextMessageProtocolEntity(message, to = to)
		self.sendEntity(messageEntity)

	def sendPresence(self, available):
		"""
		Send presence to whatsapp

		Args:
			- available: (boolean) True if available false otherwise
		"""
		if available:
			self.sendEntity(AvailablePresenceProtocolEntity())
		else:
			self.sendEntity(UnavailablePresenceProtocolEntity())

	def subscribePresence(self, phone_number):
		"""
		Subscribe to presence updates from phone_number

		Args:
			- phone_number: (str) The cellphone number of the person to
				subscribe to
		"""
		jid = phone_number + '@s.whatsapp.net'
		entity = SubscribePresenceProtocolEntity(jid)
		self.sendEntity(entity)

	def unsubscribePresence(self, phone_number):
		"""
		Unsubscribe to presence updates from phone_number

		Args:
			- phone_number: (str) The cellphone number of the person to
				unsubscribe from
		"""
		jid = phone_number + '@s.whatsapp.net'
		entity = UnsubscribePresenceProtocolEntity(jid)
		self.sendEntity(entity)
	
	def setStatus(self, statusText):
		"""
		Send status to whatsapp

		Args:
			- statusTest: (str) Your whatsapp status
		"""
		iq = SetStatusIqProtocolEntity(statusText)
		self.sendIq(iq)
	
	def sendTyping(self, phoneNumber, typing):
		"""
		Notify buddy using phoneNumber that you are typing to him

		Args:
			- phoneNumber: (str) cellphone number of the buddy you are typing to.
			- typing: (bool) True if you are typing, False if you are not
		"""
		jid = phoneNumber + '@s.whatsapp.net'
		if typing:
			state = OutgoingChatstateProtocolEntity(
				ChatstateProtocolEntity.STATE_TYPING, jid
			)
		else:
			state = OutgoingChatstateProtocolEntity(
				ChatstateProtocolEntity.STATE_PAUSED, jid
			)
		self.sendEntity(state)
	
	def requestLastSeen(self, phoneNumber, success = None, failure = None):
		"""
		Requests when user was last seen.
		Args:
			- phone_number: (str) the phone number of the user
			- success: (func) called when request is successfully processed.
				The first argument is the number, second argument is the seconds
				since last seen.
			- failure: (func) called when request has failed
		"""
		iq = LastseenIqProtocolEntity(phoneNumber + '@s.whatsapp.net')
		self.sendIq(iq, onSuccess = partial(self._lastSeenSuccess, success),
				onError = failure)

	def _lastSeenSuccess(self, success, response, request):
		success(response._from.split('@')[0], response.seconds)

	def requestProfilePicture(self, phoneNumber, onSuccess = None, onFailure = None):
		"""
		Requests profile picture of whatsapp user
		Args:
			- phoneNumber: (str) the phone number of the user
			- success: (func) called when request is successfully processed.
			- failure: (func) called when request has failed
		"""
		iq = GetPictureIqProtocolEntity(phoneNumber + '@s.whatsapp.net')
		self.sendIq(iq, onSuccess = onSuccess, onError = onFailure)
	
	def requestGroupsList(self, onSuccess = None, onFailure = None):
		iq = ListGroupsIqProtocolEntity()
		self.sendIq(iq, onSuccess = onSuccess, onError = onFailure)

	def onAuthSuccess(self, status, kind, creation, expiration, props, nonce, t):
		"""
		Called when login is successful.

		Args:
			- status
			- kind
			- creation
			- expiration
			- props
			- nonce
			- t
		"""
		pass

	def onAuthFailure(self, reason):
		"""
		Called when login is a failure

		Args:
			- reason: (str) Reason for the login failure
		"""
		pass

	def onReceipt(self, _id, _from, timestamp, type, participant, offline, items):
		"""
		Called when a receipt is received (double tick or blue tick)

		Args
			- _id
			- _from
			- timestamp
			- type: Is 'read' for blue ticks and None for double-ticks
			- participant: ([email protected]) delivered to or
				read by this participant in group
			- offline: (True, False or None)
			- items
		"""
		pass

	def onAck(self, _id,_class, _from, timestamp):
		"""
		Called when Ack is received

		Args:
			- _id
			- _class: ('message', 'receipt' or something else?)
			- _from
			- timestamp
		"""
		pass
	
	def onPresenceReceived(self, _type, name, _from, last):
		"""
		Called when presence (e.g. available, unavailable) is received
		from whatsapp

		Args:
			- _type: (str) 'available' or 'unavailable'
			- _name
			- _from
			- _last
		"""
		pass

	def onDisconnect(self):
		"""
		Called when disconnected from whatsapp
		"""
	
	def onContactTyping(self, number):
		"""
		Called when contact starts to type

		Args:
			- number: (str) cellphone number of contact
		"""
		pass

	def onContactPaused(self, number):
		"""
		Called when contact stops typing

		Args:
			- number: (str) cellphone number of contact
		"""
		pass

	def	onTextMessage(self, _id, _from, to, notify, timestamp, participant, offline, retry, body):
		"""
		Called when text message is received

		Args:
			- _id:
			- _from: (str) jid of of sender
			- to:
			- notify: (str) human readable name of _from (e.g. John Smith)
			- timestamp:
			- participant: (str) jid of user who sent the message in a groupchat
			- offline:
			- retry:
			- body: The content of the message
		"""
		pass
	
	def onImage(self, entity):
		"""
		Called when image message is received

		Args:
			- entity: ImageDownloadableMediaMessageProtocolEntity
		"""
		pass

	def onAudio(self, entity):
		"""
		Called when audio message is received

		Args:
			- entity: AudioDownloadableMediaMessageProtocolEntity
		"""
		pass
	

	def onVideo(self, entity):
		"""
		Called when video message is received

		Args:
			- entity: VideoDownloadableMediaMessageProtocolEntity
		"""
		pass
	
	def onVCard(self, _id, _from, name, card_data, to, notify, timestamp, participant):
		"""
		Called when VCard message is received

		Args:
			- _id: (str) id of entity
			- _from:
			- name:
			- card_data:
			- to:
			- notify:
			- timestamp:
			- participant:
		"""
		pass

	def sendEntity(self, entity):
		"""Sends an entity down the stack (as if YowsupAppLayer called toLower)"""
		self.stack.broadcastEvent(YowLayerEvent(YowsupAppLayer.TO_LOWER_EVENT,
			entity = entity
		))
	
	def sendIq(self, iq, onSuccess = None, onError = None):
		self.stack.broadcastEvent(
			YowLayerEvent(
				YowsupAppLayer.SEND_IQ,
				iq = iq,
				success = onSuccess,
				failure = onError,
			)
		)
예제 #52
0
def main():
    ''' Console script to start the bot or output default config file. '''
    # Arguments
    parser = argparse.ArgumentParser(
        description=_('Start Tombot, a chatbot for Whatsapp'))
    parser.add_argument('-v',
                        '--verbose',
                        help=_("enable debug logging"),
                        action='store_true')
    parser.add_argument('-d',
                        '--dry-run',
                        help=_("don't actually start bot, but print config"),
                        action='store_true')
    parser.add_argument(
        '-p',
        '--poke',
        action='store_true',
        help=_("do everything except connecting (for testing)"))
    parser.add_argument('configfile',
                        help=_("config file location"),
                        nargs='?')
    args = parser.parse_args()
    # Set up logging
    if args.verbose:
        loglevel = logging.DEBUG
    else:
        loglevel = logging.INFO
    logging.basicConfig(level=loglevel,
                        format='%(levelname)s - %(name)s - %(message)s')
    # Read configuration
    specpath = os.path.join(os.path.dirname(__file__), 'configspec.ini')
    config = ConfigObj(args.configfile, configspec=specpath)

    if not args.dry_run:
        config.validate(Validator())
        if not args.configfile:
            error = _("You must specify a config file!")
            generate_hint = _("Generate one using 'tombot -d > file.ini'.")
            logging.critical(error)
            logging.critical(generate_hint)
            sys.exit(1)

        # Build scheduler, will be started in the bot's layer once connected
        jobstores = {
            'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite'),
        }
        scheduler = BackgroundScheduler(jobstores=jobstores)

        # Build Yowsup stack
        credentials = (config['Yowsup']['username'],
                       config['Yowsup']['password'])
        bot = TomBotLayer(config, scheduler)
        layers = (
            bot,
            YowParallelLayer([
                YowPresenceProtocolLayer, YowAuthenticationProtocolLayer,
                YowMessagesProtocolLayer, YowIqProtocolLayer,
                YowReceiptProtocolLayer, YowChatstateProtocolLayer,
                YowAckProtocolLayer, YowGroupsProtocolLayer
            ]),
            YowAxolotlLayer,
        ) + YOWSUP_CORE_LAYERS

        stack = YowStack(layers)
        # Set credentials, server address, info about us as WhatsApp client
        stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                      credentials)
        stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)

        # Send connect signal if we aren't poking at the bot
        if not args.poke:
            stack.broadcastEvent(
                YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))

            stack.loop(timeout=0.5,
                       discrete=0.5)  #this is the program mainloop
        else:
            code.interact(local=locals())
    else:
        # Output config file to stdout
        config.filename = None
        config.validate(Validator(), copy=True)
        output = config.write()
        for line in output:
            print(line)
예제 #53
0
class YowsupApp(object):
    def __init__(self):
        env.CURRENT_ENV = UpdatedS40YowsupEnv()

        layers = (YowsupAppLayer,
                  YowParallelLayer(
                      (YowAuthenticationProtocolLayer,
                       YowMessagesProtocolLayer, YowReceiptProtocolLayer,
                       YowAckProtocolLayer, YowMediaProtocolLayer,
                       YowIbProtocolLayer, YowIqProtocolLayer,
                       YowNotificationsProtocolLayer,
                       YowContactsIqProtocolLayer, YowChatstateProtocolLayer,
                       YowCallsProtocolLayer, YowPrivacyProtocolLayer,
                       YowProfilesProtocolLayer, YowGroupsProtocolLayer,
                       YowPresenceProtocolLayer)), UpdatedYowAxolotlLayer,
                  YowCoderLayer, YowCryptLayer, YowStanzaRegulator,
                  YowNetworkLayer)
        self.logger = logging.getLogger(self.__class__.__name__)
        self.stack = YowStack(layers)
        self.stack.broadcastEvent(
            YowLayerEvent(YowsupAppLayer.EVENT_START, caller=self))

    def login(self, username, password):
        """Login to yowsup

		Should result in onAuthSuccess or onAuthFailure to be called.

		Args:
			- username: (str) username in the form of 1239482382 (country code
				  and cellphone number)

			- password: (str) base64 encoded password
		  """
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                           (username, password))
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                           YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
                           env.CURRENT_ENV.getResource())
        #		self.stack.setProp(YowIqProtocolLayer.PROP_PING_INTERVAL, 5)

        try:
            self.stack.broadcastEvent(
                YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        except TypeError as e:  # Occurs when password is not correctly formated
            self.onAuthFailure('password not base64 encoded')


#		try:
#			self.stack.loop(timeout=0.5, discrete=0.5)
#		except AuthError as e: # For some reason Yowsup throws an exception
#			self.onAuthFailure("%s" % e)

    def logout(self):
        """
		Logout from whatsapp
		"""
        self.stack.broadcastEvent(
            YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT))

    def sendReceipt(self, _id, _from, read, participant):
        """
		Send a receipt (delivered: double-tick, read: blue-ticks)

		Args:
			- _id: id of message received
			- _from: jid of person who sent the message
			- read: ('read' or None) None is just delivered, 'read' is read
			- participant
		"""
        receipt = OutgoingReceiptProtocolEntity(_id, _from, read, participant)
        self.sendEntity(receipt)

    def sendTextMessage(self, to, message):
        """
		Sends a text message

		Args:
			- to: ([email protected]) who to send the message to
			- message: (str) the body of the message
		"""
        messageEntity = TextMessageProtocolEntity(message, to=to)
        self.sendEntity(messageEntity)
        return messageEntity.getId()

    def sendLocation(self, to, latitude, longitude):
        messageEntity = LocationMediaMessageProtocolEntity(latitude,
                                                           longitude,
                                                           None,
                                                           None,
                                                           "raw",
                                                           to=to)
        self.sendEntity(messageEntity)
        return messageEntity.getId()

    def image_send(self, jid, path, caption=None):
        entity = RequestUploadIqProtocolEntity(
            RequestUploadIqProtocolEntity.MEDIA_TYPE_IMAGE, filePath=path)
        successFn = lambda successEntity, originalEntity: self.onRequestUploadResult(
            jid, path, successEntity, originalEntity, caption)
        errorFn = lambda errorEntity, originalEntity: self.onRequestUploadError(
            jid, path, errorEntity, originalEntity)

        self.sendIq(entity, successFn, errorFn)

    def onRequestUploadResult(self,
                              jid,
                              filePath,
                              resultRequestUploadIqProtocolEntity,
                              requestUploadIqProtocolEntity,
                              caption=None):

        if requestUploadIqProtocolEntity.mediaType == RequestUploadIqProtocolEntity.MEDIA_TYPE_AUDIO:
            doSendFn = self._doSendAudio
        else:
            doSendFn = self._doSendImage

        if resultRequestUploadIqProtocolEntity.isDuplicate():
            doSendFn(filePath, resultRequestUploadIqProtocolEntity.getUrl(),
                     jid, resultRequestUploadIqProtocolEntity.getIp(), caption)
        else:
            successFn = lambda filePath, jid, url: doSendFn(
                filePath, url, jid, resultRequestUploadIqProtocolEntity.getIp(
                ), caption)
            mediaUploader = MediaUploader(
                jid,
                self.legacyName,
                filePath,
                resultRequestUploadIqProtocolEntity.getUrl(),
                resultRequestUploadIqProtocolEntity.getResumeOffset(),
                successFn,
                self.onUploadError,
                self.onUploadProgress,
                async=False)
            mediaUploader.start()

    def onRequestUploadError(self, jid, path,
                             errorRequestUploadIqProtocolEntity,
                             requestUploadIqProtocolEntity):
        self.logger.error("Request upload for file %s for %s failed" %
                          (path, jid))

    def onUploadError(self, filePath, jid, url):
        #logger.error("Upload file %s to %s for %s failed!" % (filePath, url, jid))
        self.logger.error("Upload Error!")

    def onUploadProgress(self, filePath, jid, url, progress):
        #sys.stdout.write("%s => %s, %d%% \r" % (os.path.basename(filePath), jid, progress))
        #sys.stdout.flush()
        pass

    def doSendImage(self, filePath, url, to, ip=None, caption=None):
        entity = ImageDownloadableMediaMessageProtocolEntity.fromFilePath(
            filePath, url, ip, to, caption=caption)
        self.sendEntity(entity)
        #self.msgIDs[entity.getId()] = MsgIDs(self.imgMsgId, entity.getId())
        return entity.getId()

    def doSendAudio(self, filePath, url, to, ip=None, caption=None):
        entity = AudioDownloadableMediaMessageProtocolEntity.fromFilePath(
            filePath, url, ip, to)
        self.sendEntity(entity)
        #self.msgIDs[entity.getId()] = MsgIDs(self.imgMsgId, entity.getId())
        return entity.getId()

    def sendPresence(self, available):
        """
		Send presence to whatsapp

		Args:
			- available: (boolean) True if available false otherwise
		"""
        if available:
            self.sendEntity(AvailablePresenceProtocolEntity())
        else:
            self.sendEntity(UnavailablePresenceProtocolEntity())

    def subscribePresence(self, phone_number):
        """
		Subscribe to presence updates from phone_number

		Args:
			- phone_number: (str) The cellphone number of the person to
				subscribe to
		"""
        self.logger.debug("Subscribing to Presence updates from %s",
                          (phone_number))
        jid = phone_number + '@s.whatsapp.net'
        entity = SubscribePresenceProtocolEntity(jid)
        self.sendEntity(entity)

    def unsubscribePresence(self, phone_number):
        """
		Unsubscribe to presence updates from phone_number

		Args:
			- phone_number: (str) The cellphone number of the person to
				unsubscribe from
		"""
        jid = phone_number + '@s.whatsapp.net'
        entity = UnsubscribePresenceProtocolEntity(jid)
        self.sendEntity(entity)

    def leaveGroup(self, group):
        """
		Permanently leave a WhatsApp group

		Args:
			- group: (str) the group id (e.g. 27831788123-144024456)
		"""
        entity = LeaveGroupsIqProtocolEntity([group + '@g.us'])
        self.sendEntity(entity)

    def setStatus(self, statusText):
        """
		Send status to whatsapp

		Args:
			- statusTest: (str) Your whatsapp status
		"""
        iq = SetStatusIqProtocolEntity(statusText)
        self.sendIq(iq)

    def sendTyping(self, phoneNumber, typing):
        """
		Notify buddy using phoneNumber that you are typing to him

		Args:
			- phoneNumber: (str) cellphone number of the buddy you are typing to.
			- typing: (bool) True if you are typing, False if you are not
		"""
        jid = phoneNumber + '@s.whatsapp.net'
        if typing:
            state = OutgoingChatstateProtocolEntity(
                ChatstateProtocolEntity.STATE_TYPING, jid)
        else:
            state = OutgoingChatstateProtocolEntity(
                ChatstateProtocolEntity.STATE_PAUSED, jid)
        self.sendEntity(state)

    def sendSync(self, contacts, delta=False, interactive=True):
        """
		You need to sync new contacts before you interact with
		them, failure to do so could result in a temporary ban.
		
		Args:
			- contacts: ([str]) a list of phone numbers of the
				contacts you wish to sync
			- delta: (bool; default: False) If true only send new
				contacts to sync, if false you should send your full
				contact list.
			- interactive: (bool; default: True) Set to false if you are
				sure this is the first time registering
		"""
        # TODO: Implement callbacks
        mode = GetSyncIqProtocolEntity.MODE_DELTA if delta else GetSyncIqProtocolEntity.MODE_FULL
        context = GetSyncIqProtocolEntity.CONTEXT_INTERACTIVE if interactive else GetSyncIqProtocolEntity.CONTEXT_REGISTRATION
        iq = GetSyncIqProtocolEntity(contacts, mode, context)
        self.sendIq(iq)

    def requestStatuses(self, contacts, success=None, failure=None):
        """
		Request the statuses of a number of users.

		Args:
			- contacts: ([str]) the phone numbers of users whose statuses you
				wish to request
			- success: (func) called when request is successful
			- failure: (func) called when request has failed
		"""
        iq = GetStatusesIqProtocolEntity(
            [c + '@s.whatsapp.net' for c in contacts])

        def onSuccess(response, request):
            self.logger.debug("Received Statuses %s", response)
            s = {}
            for k, v in response.statuses.iteritems():
                s[k.split('@')[0]] = v
            success(s)

        self.sendIq(iq, onSuccess=onSuccess, onError=failure)

    def requestLastSeen(self, phoneNumber, success=None, failure=None):
        """
		Requests when user was last seen.
		Args:
			- phone_number: (str) the phone number of the user
			- success: (func) called when request is successfully processed.
				The first argument is the number, second argument is the seconds
				since last seen.
			- failure: (func) called when request has failed
		"""
        iq = LastseenIqProtocolEntity(phoneNumber + '@s.whatsapp.net')
        self.sendIq(iq,
                    onSuccess=partial(self._lastSeenSuccess, success),
                    onError=failure)

    def _lastSeenSuccess(self, success, response, request):
        success(response._from.split('@')[0], response.seconds)

    def requestProfilePicture(self,
                              phoneNumber,
                              onSuccess=None,
                              onFailure=None):
        """
		Requests profile picture of whatsapp user
		Args:
			- phoneNumber: (str) the phone number of the user
			- onSuccess: (func) called when request is successfully processed.
			- onFailure: (func) called when request has failed
		"""
        iq = GetPictureIqProtocolEntity(phoneNumber + '@s.whatsapp.net')
        self.sendIq(iq, onSuccess=onSuccess, onError=onFailure)

    def requestGroupsList(self, onSuccess=None, onFailure=None):
        iq = ListGroupsIqProtocolEntity()
        self.sendIq(iq, onSuccess=onSuccess, onError=onFailure)

    def requestGroupInfo(self, group, onSuccess=None, onFailure=None):
        """
		Request info on a specific group (includes participants, subject, owner etc.)

		Args:
			- group: (str) the group id in the form of xxxxxxxxx-xxxxxxxx
			- onSuccess: (func) called when request is successfully processed.
			- onFailure: (func) called when request is has failed
		"""
        iq = InfoGroupsIqProtocolEntity(group + '@g.us')
        self.sendIq(iq, onSuccess=onSuccess, onError=onFailure)

    def onAuthSuccess(self, status, kind, creation, expiration, props, nonce,
                      t):
        """
		Called when login is successful.

		Args:
			- status
			- kind
			- creation
			- expiration
			- props
			- nonce
			- t
		"""
        pass

    def onAuthFailure(self, reason):
        """
		Called when login is a failure

		Args:
			- reason: (str) Reason for the login failure
		"""
        pass

    def onReceipt(self, _id, _from, timestamp, type, participant, offline,
                  items):
        """
		Called when a receipt is received (double tick or blue tick)

		Args
			- _id
			- _from
			- timestamp
			- type: Is 'read' for blue ticks and None for double-ticks
			- participant: ([email protected]) delivered to or
				read by this participant in group
			- offline: (True, False or None)
			- items
		"""
        pass

    def onAck(self, _id, _class, _from, timestamp):
        """
		Called when Ack is received

		Args:
			- _id
			- _class: ('message', 'receipt' or something else?)
			- _from
			- timestamp
		"""
        pass

    def onPresenceReceived(self, _type, name, _from, last):
        """
		Called when presence (e.g. available, unavailable) is received
		from whatsapp

		Args:
			- _type: (str) 'available' or 'unavailable'
			- _name
			- _from
			- _last
		"""
        pass

    def onDisconnect(self):
        """
		Called when disconnected from whatsapp
		"""

    def onContactTyping(self, number):
        """
		Called when contact starts to type

		Args:
			- number: (str) cellphone number of contact
		"""
        pass

    def onContactPaused(self, number):
        """
		Called when contact stops typing

		Args:
			- number: (str) cellphone number of contact
		"""
        pass

    def onTextMessage(self, _id, _from, to, notify, timestamp, participant,
                      offline, retry, body):
        """
		Called when text message is received

		Args:
			- _id:
			- _from: (str) jid of of sender
			- to:
			- notify: (str) human readable name of _from (e.g. John Smith)
			- timestamp:
			- participant: (str) jid of user who sent the message in a groupchat
			- offline:
			- retry:
			- body: The content of the message
		"""
        pass

    def onImage(self, entity):
        """
		Called when image message is received

		Args:
			- entity: ImageDownloadableMediaMessageProtocolEntity
		"""
        pass

    def onAudio(self, entity):
        """
		Called when audio message is received

		Args:
			- entity: AudioDownloadableMediaMessageProtocolEntity
		"""
        pass

    def onVideo(self, entity):
        """
		Called when video message is received

		Args:
			- entity: VideoDownloadableMediaMessageProtocolEntity
		"""
        pass

    def onLocation(self, entity):
        """
		Called when location message is received

		Args:
			- entity: LocationMediaMessageProtocolEntity
		"""
        pass

    def onVCard(self, _id, _from, name, card_data, to, notify, timestamp,
                participant):
        """
		Called when VCard message is received

		Args:
			- _id: (str) id of entity
			- _from:
			- name:
			- card_data:
			- to:
			- notify:
			- timestamp:
			- participant:
		"""
        pass

    def onAddedToGroup(self, entity):
        """Called when the user has been added to a new group"""
        pass

    def onParticipantsAddedToGroup(self, entity):
        """Called when participants have been added to a group"""
        pass

    def onParticipantsRemovedFromGroup(self, group, participants):
        """Called when participants have been removed from a group
		
		Args:
			- group: (str) id of the group (e.g. 27831788123-144024456)
			- participants: (list) jids of participants that are removed
		"""
        pass

    def sendEntity(self, entity):
        """Sends an entity down the stack (as if YowsupAppLayer called toLower)"""
        self.stack.broadcastEvent(
            YowLayerEvent(YowsupAppLayer.TO_LOWER_EVENT, entity=entity))

    def sendIq(self, iq, onSuccess=None, onError=None):
        self.stack.broadcastEvent(
            YowLayerEvent(
                YowsupAppLayer.SEND_IQ,
                iq=iq,
                success=onSuccess,
                failure=onError,
            ))
예제 #54
0
class Whatsapp():
    def __init__(self, smarthome, account, password, trusted=None, logic='Whatsapp', cli_mode='False'):
# Set Plugin Attributes
        self._sh = smarthome
        self._credentials = (account, password.encode('utf-8'))
        self._trusted = trusted
        self._logic = logic
        self._run = False
        if cli_mode == 'True':
            self._cli_mode = True
            return
        else:
            self._cli_mode = False
# Yowsup Layers
        self._layers = (
            SmarthomeLayer,
            YowParallelLayer((YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowIbProtocolLayer, YowIqProtocolLayer, YowNotificationsProtocolLayer, YowPresenceProtocolLayer)),
            YowCoderLayer,
#            YowLoggerLayer,
            YowCryptLayer,
            YowStanzaRegulator,
            YowNetworkLayer)

# Yowsup Properties
        self._stack = YowStack(self._layers)
        self._stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, self._credentials)
        self._stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0])
        self._stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self._stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource())

# Connect Yowsup
        self._stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))

# Get SmarthomeLayer and set this Plugin
        self._SmarthomeLayer = self._stack.getLayer(len(self._stack._YowStack__stack) - 1)
        self._SmarthomeLayer.setPlugin(self)

    def run(self):
        self._run = True
        if self._cli_mode == True:
            return
        try:
            self._stack.loop(timeout = 0.5, discrete = 0.5)
        except AuthError as e:
            logger.info("Authentication Error!")

    def stop(self):
        self._run = False
        if self._cli_mode == True:
            return
        logger.info("Shutting Down WhatsApp Client")
        disconnectEvent = YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT)
        self._stack.broadcastEvent(disconnectEvent)

    def parse_item(self, item):
        return None

    def parse_logic(self, logic):
        pass

    def __call__(self, message, phoneNumber=None):
        if phoneNumber == None:
            try:
                phoneNumber = self._trusted.split(' ')[0]
            except AttributeError:
                logger.error("Error sending Whatsapp Message")
            except IndentationError:
                logger.error("Error sending Whatsapp Message")
        if self._cli_mode == True:
            subprocess.call(['/usr/local/bin/yowsup-cli', 'demos', '-l', self._credentials[0] + ':' + self._credentials[1].decode(), '-s', phoneNumber, message])
            return
        self._SmarthomeLayer.sendMsg(message, phoneNumber)

    def message_received(self, message, sender):
        try:
            self._sh.trigger(name=self._logic, value=message, source=sender.split('@')[0])
        except AttributeError:
            logger.error("Error receiving Whatsapp Message")
        except IndentationError:
            logger.error("Error receiving Whatsapp Message")
예제 #55
0
class YowsupImapBridgeStack(object):
    def __init__(self,
                 imap_data,
                 smtp_data,
                 credentials,
                 encryptionEnabled=False):
        if encryptionEnabled:
            layers = (YowParallelLayer(
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
                 YowReceiptProtocolLayer, YowAckProtocolLayer,
                 YowMediaProtocolLayer, YowIqProtocolLayer,
                 YowCallsProtocolLayer), ), YowAxolotlLayer, YowLoggerLayer,
                      YowCoderLayer, YowCryptLayer, YowStanzaRegulator,
                      YowTwistedNetworkLayer)
        else:
            env.CURRENT_ENV = env.S40YowsupEnv()
            layers = (YowParallelLayer(
                (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer,
                 YowReceiptProtocolLayer, YowAckProtocolLayer,
                 YowMediaProtocolLayer, YowIqProtocolLayer,
                 YowCallsProtocolLayer), ), YowLoggerLayer, YowCoderLayer,
                      YowCryptLayer, YowStanzaRegulator,
                      YowTwistedNetworkLayer)

        if smtp_data:
            layers = (YowTwistedSmtpLayer, ) + layers

        if imap_data:
            layers = (YowTwistedImapLayer, ) + layers

        self.stack = YowStack(layers)
        self.stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS,
                           credentials)
        self.stack.setProp(YowNetworkLayer.PROP_ENDPOINT,
                           YowConstants.ENDPOINTS[0])
        self.stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN)
        self.stack.setProp(YowCoderLayer.PROP_RESOURCE,
                           env.CURRENT_ENV.getResource())

        if smtp_data:
            self.stack.setProp(YowTwistedSmtpLayer.PROP_USER, smtp_data[0])
            self.stack.setProp(YowTwistedSmtpLayer.PROP_PASS, smtp_data[1])
            self.stack.setProp(YowTwistedSmtpLayer.PROP_ENDPOINT, smtp_data[2])
            self.stack.setProp(YowTwistedSmtpLayer.PROP_DST_MAIL, smtp_data[3])
            self.stack.setProp(YowTwistedSmtpLayer.PROP_REPLY_MAIL,
                               smtp_data[4])

        if imap_data:
            self.stack.setProp(YowTwistedImapLayer.PROP_USER, imap_data[0])
            self.stack.setProp(YowTwistedImapLayer.PROP_PASS, imap_data[1])
            self.stack.setProp(YowTwistedImapLayer.PROP_ENDPOINT, imap_data[2])
            self.stack.setProp(YowTwistedImapLayer.PROP_DST_PHONE,
                               imap_data[3])

    def start(self):
        self.stack.broadcastEvent(
            YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            reactor.run()
        except AuthError as e:
            print("Authentication Error: %s" % e.message)