Example #1
0
    def __init__(self, keepAlive=False, sendReceipts=False):
        self.sendReceipts = sendReceipts
        self.keepAlive = keepAlive

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()
        self.cm = connectionManager

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)
        self.signalsInterface.registerListener(
            "media_uploadRequestSuccess", self.onmedia_uploadRequestSuccess)
        self.signalsInterface.registerListener(
            "media_uploadRequestFailed", self.onmedia_uploadRequestFailed)
        self.signalsInterface.registerListener(
            "media_uploadRequestDuplicate",
            self.onmedia_uploadRequestDuplicate)
class LibInterfaceHandler(InterfaceHandlerBase):
	
	def __init__(self, username):
		self.connectionManager = YowsupConnectionManager()
		self.connectionManager.setAutoPong(True)
		
		self.signalInterface = self.connectionManager.getSignalsInterface()
		self.methodInterface = self.connectionManager.getMethodsInterface()
		
		super(LibInterfaceHandler,self).__init__();
		
		self.initSignals()
		self.initMethods()

	def initSignals(self):		
		self.signals = self.signalInterface.getSignals()


	def initMethods(self):
		#get methods
		self.methods = self.methodInterface.getMethods()
	
	def connectToSignal(self, signalName, callback):
		if not self.isSignal(signalName):
			raise InvalidSignalException()
		
		self.signalInterface.registerListener(signalName, callback)

	def call(self, methodName, params = ()):
		if not self.isMethod(methodName):
			raise InvalidMethodException()

		return self.methodInterface.call(methodName, params)
    def __init__(self, target, message, waitForReceipt=False):

        self.jids = []

        if '-' in target:
            self.jids = ["*****@*****.**" % target]
        else:
            self.jids = ["*****@*****.**" % t for t in target.split(',')]

        self.message = message
        self.waitForReceipt = waitForReceipt

        connectionManager = YowsupConnectionManager()
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        if waitForReceipt:
            self.signalsInterface.registerListener("receipt_messageSent",
                                                   self.onMessageSent)
            self.gotReceipt = False
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.done = False
Example #4
0
	def __init__(self, app, keepAlive = False, sendReceipts = False):
		self.sendReceipts = sendReceipts
		self.app = app
		
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)		

		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("group_messageReceived", self.onGroupMessageReceived)
		self.signalsInterface.registerListener("image_received", self.onImageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)

		self.signalsInterface.registerListener("contact_gotProfilePicture", self.onGotProfilePicture)
		self.signalsInterface.registerListener("profile_setStatusSuccess", self.onSetStatusSuccess)
		self.signalsInterface.registerListener("group_createSuccess", self.onGroupCreateSuccess)
		self.signalsInterface.registerListener("group_createFail", self.onGroupCreateFail)
		self.signalsInterface.registerListener("group_gotInfo", self.onGroupGotInfo)
		self.signalsInterface.registerListener("group_addParticipantsSuccess", self.onGroupAddParticipantsSuccess)
		
		self.cm = connectionManager
		self.url = os.getenv('SERVER_URL', 'http://localhost:3000')
		self.post_headers = {'Content-type': 'application/json', 'Accept': 'application/json'}		
		self.done = False
Example #5
0
	def __init__(self, keepAlive=False, sendReceipts=False, dryRun=False):
		self.sendReceipts = sendReceipts
		self.dryRun = dryRun

		# Initialize
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()

		# Configure the listeners
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("group_messageReceived", self.onGroupMessageReceived)
		self.signalsInterface.registerListener("image_received", self.onImageReceived)
		self.signalsInterface.registerListener("group_imageReceived", self.onGroupImageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)


		# Create a printqueue so we won't print two things at the same time
		self.queue = Queue.PriorityQueue()
		self.history = [] #List of timestamp, action, item
		self.printer = None
		self.last_sender = None
		self.connected = False
def inicia_whatsapp():
    #Se hacen publicas las variables de la conexion
    global y
    global signalsInterface
    global methodsInterface
    global contador
    global vaciado_mensajes_offline
    y = YowsupConnectionManager()
    y.setAutoPong(True) #Responder a los ping que hagan
    signalsInterface = y.getSignalsInterface() #Se recibiran las senales
    methodsInterface = y.getMethodsInterface() #Se utilizaran los metodos
 
    signalsInterface.registerListener("message_received", onMessageReceived)
    signalsInterface.registerListener("receipt_messageSent", onMessageSent)
    signalsInterface.registerListener("receipt_messageDelivered", onMessageDelivered)
    signalsInterface.registerListener("auth_success", onAuthSuccess)
    signalsInterface.registerListener("ping", onPing)
    signalsInterface.registerListener("disconnected", onDisconnected)
 
    methodsInterface.call("auth_login", (username, password))
    methodsInterface.call("ready")
     
    #Leer todos los mensajes offline y no analizarlos
    contador = 0
    vaciado_mensajes_offline = False
    while (contador<10): #Contador se pondra a cero cada vez que salta la interrupcion de un mensaje
        contador += 1
        time.sleep(0.1)
    #Cuando sale del while ha pasado 1 segundo sin recibir mensajes
    vaciado_mensajes_offline = True
	#Aqui ponemos nuestro numero de movil principal para que abrá una conversación como que la pi está operativa
    methodsInterface.call("message_send", ("*****@*****.**", 'Reset'))
Example #7
0
	def __init__(self, phoneNumber, keepAlive = False, sendReceipts = False):
		self.sendReceipts = sendReceipts
		self.phoneNumber = phoneNumber
		self.jid = "*****@*****.**" % phoneNumber
		
		self.sentCache = {}
		
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
		self.signalsInterface.registerListener("presence_updated", self.onPresenceUpdated)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		
		
		self.commandMappings = {"lastseen":lambda: self.methodsInterface.call("presence_request", ( self.jid,)),
								"available": lambda: self.methodsInterface.call("presence_sendAvailable"),
								"unavailable": lambda: self.methodsInterface.call("presence_sendUnavailable"),
								"crypt": None,
								"close": None
								 }
		
		self.done = False
		#signalsInterface.registerListener("receipt_messageDelivered", lambda jid, messageId: methodsInterface.call("delivered_ack", (jid, messageId)))

		#for encrypted communication
		self.decrRcvMsgKey = myRsa().create() #generate my rsa keys
		self.encrSendMsgKey = None
		self.encrProtocolStatus = 0 # 1: request made, 2:request arrived, 3: com. is encrypted
Example #8
0
    def __init__(self, phoneNumber, keepAlive=False, sendReceipts=False):
        self.sendReceipts = sendReceipts
        self.phoneNumber = phoneNumber
        self.jid = "*****@*****.**" % phoneNumber

        self.sentCache = {}

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("receipt_messageSent",
                                               self.onMessageSent)
        self.signalsInterface.registerListener("presence_updated",
                                               self.onPresenceUpdated)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.commandMappings = {
            "lastseen":
            lambda: self.methodsInterface.call("presence_request",
                                               (self.jid, )),
            "available":
            lambda: self.methodsInterface.call("presence_sendAvailable"),
            "unavailable":
            lambda: self.methodsInterface.call("presence_sendUnavailable")
        }

        self.done = False
Example #9
0
    def __init__(self, phoneNumber, message, waitForReceipt=False):

        if '-' in phoneNumber:
            self.jid = "*****@*****.**" % phoneNumber
        else:
            self.jid = "*****@*****.**" % phoneNumber

        self.message = message
        self.waitForReceipt = waitForReceipt

        connectionManager = YowsupConnectionManager()
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        if waitForReceipt:
            self.signalsInterface.registerListener("receipt_messageSent",
                                                   self.onMessageSent)
            self.gotReceipt = False
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.done = False
Example #10
0
	def __init__(self, phoneNumber, keepAlive = False, sendReceipts = False):
		self.sendReceipts = sendReceipts
		self.phoneNumber = phoneNumber
		self.jid = "*****@*****.**" % phoneNumber
		
		self.sentCache = {}
		
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
		self.signalsInterface.registerListener("presence_updated", self.onPresenceUpdated)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		
		
		self.commandMappings = {"lastseen":lambda: self.methodsInterface.call("presence_request", ( self.jid,)),
								"available": lambda: self.methodsInterface.call("presence_sendAvailable"),
								"unavailable": lambda: self.methodsInterface.call("presence_sendUnavailable")
								 }
		
		self.done = False
Example #11
0
	def __init__(self, url, keepAlive = False, sendReceipts = False):
		super(Server, self).__init__()
		self.sendReceipts = sendReceipts
		self.keepAlive = keepAlive
		self.db = create_engine(url, echo=False, pool_size=10, pool_timeout=600,pool_recycle=300)

		self.Session = sessionmaker(bind=self.db)
		self.s = self.Session()
		self.job = None

		self.pubnub = Pubnub(os.environ['PUB_KEY'], os.environ['SUB_KEY'], None, False)

		self.timeout = int(os.getenv('TIMEOUT', 3600))
		connectionManager = YowsupConnectionManager(self.timeout)

		connectionManager.setAutoPong(keepAlive)		

		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("group_messageReceived", self.onGroupMessageReceived)
		self.signalsInterface.registerListener("image_received", self.onImageReceived)
		self.signalsInterface.registerListener("video_received", self.onVideoReceived)
		self.signalsInterface.registerListener("audio_received", self.onAudioReceived)
		self.signalsInterface.registerListener("vcard_received", self.onVCardReceived)
		self.signalsInterface.registerListener("location_received", self.onLocationReceived)
		self.signalsInterface.registerListener("receipt_messageSent", self.onReceiptMessageSent)
		self.signalsInterface.registerListener("receipt_messageDelivered", self.onReceiptMessageDelivered)		
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)

		self.signalsInterface.registerListener("contact_gotProfilePicture", self.onGotProfilePicture)
		self.signalsInterface.registerListener("profile_setStatusSuccess", self.onSetStatusSuccess)
		self.signalsInterface.registerListener("group_createSuccess", self.onGroupCreateSuccess)
		self.signalsInterface.registerListener("group_createFail", self.onGroupCreateFail)
		self.signalsInterface.registerListener("group_gotInfo", self.onGroupGotInfo)
		self.signalsInterface.registerListener("group_addParticipantsSuccess", self.onGroupAddParticipantsSuccess)
		self.signalsInterface.registerListener("group_removeParticipantsSuccess", self.onGroupRemoveParticipantsSuccess)
		self.signalsInterface.registerListener("group_imageReceived", self.onGroupImageReceived)


		self.signalsInterface.registerListener("group_subjectReceived", self.onGroupSubjectReceived)
		self.signalsInterface.registerListener("notification_removedFromGroup", self.onNotificationRemovedFromGroup)
		self.signalsInterface.registerListener("notification_groupParticipantAdded", self.onNotificationGroupParticipantAdded)
		self.signalsInterface.registerListener("group_gotParticipants", self.onGotGroupParticipants)

		self.signalsInterface.registerListener("media_uploadRequestSuccess", self.onUploadRequestSuccess)
		# self.signalsInterface.registerListener("media_uploadRequestFailed", self.onUploadRequestFailed)
		self.signalsInterface.registerListener("media_uploadRequestDuplicate", self.onUploadRequestDuplicate)
		self.signalsInterface.registerListener("presence_available", self.onPresenceAvailable)
		self.signalsInterface.registerListener("presence_unavailable", self.onPresenceUnavailable)
		
		self.cm = connectionManager
		self.url = os.environ['URL']

		self.post_headers = {'Content-type': 'application/json', 'Accept': 'application/json'}		
		self.done = False
Example #12
0
    def __init__(self):
        self.sendReceipts = True 
        self.groupMembership = {}
        self.groupParticipants = {}
        
        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(True)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()
        
        self.signalsInterface.registerListener("message_received", self.onMessageReceived)
        self.signalsInterface.registerListener("group_messageReceived", self.onGroupMessageReceived)
        self.signalsInterface.registerListener("group_subjectReceived", self.onGroupSubjectReceived)
        self.signalsInterface.registerListener("group_gotInfo", self.onGroupGotInfo)
        self.signalsInterface.registerListener("group_gotParticipants", self.onGroupGotParticipants)
        self.signalsInterface.registerListener("group_imageReceived", self.onGroupImageReceived)
        self.signalsInterface.registerListener("group_videoReceived", self.onGroupVideoReceived)
        self.signalsInterface.registerListener("group_audioReceived", self.onGroupAudioReceived)
        self.signalsInterface.registerListener("group_locationReceived", self.onGroupLocationReceived)
        self.signalsInterface.registerListener("group_vcardReceived", self.onGroupVcardReceived)

        self.signalsInterface.registerListener("notification_groupParticipantRemoved", self.onNotificationGroupParticipantRemoved)
        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)
        
        self.cm = connectionManager
    def __init__(self, user, password, phone):
        """WhatsAppClient's constructor.

        Args:
          user (str): the local phone number.
          password (str): the WhatsApp password of 'user'.
          phone (str): the remote phone number.
        """

        super().__init__()

        self.user = user
        try:
            self.password = base64.b64decode(bytes(password.encode("utf-8")))
        except base64.binascii.Error:  # Lets Yowsup handle the error.
            self.password = bytes(password.encode("utf-8"))
        # Users are identified in WhatsApp by their phone number (plus the
        # code) followed by the domain '@s.whatsapp.net'.
        self.phone = phone + "@s.whatsapp.net"
        self.connected = False

        # Yowsup managers and signals setting up.
        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(True)
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("message_received", self.onMessageReceived)
        self.signalsInterface.registerListener("image_received", self.onImageReceived)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)
Example #14
0
	def __init__(self, config, keepAlive=False, sendReceipts=False, dryRun=False):
		self.sendReceipts = sendReceipts
		self.dryRun = dryRun
		self.config = config
			

		# Initialize
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()

		# Configure the listeners
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)

		self.signalsInterface.registerListener("presence_updated", self.onPresenceUpdated)
		self.signalsInterface.registerListener("presence_available", self.onPresenceAvailable)
		self.signalsInterface.registerListener("presence_unavailable", self.onPresenceUnavailable)


		# Create a queue so we can stash the incoming data somewhere
		self.events = Queue.PriorityQueue()
		# Dictionary of contacts with their names
		self.names = dict(config['jids'])
		self.contacts = [jid for jid, name in config['jids']]
		# A count of events for each interval for each contact
		self.tally = defaultdict(lambda: dict((jid, 0) for jid in self.contacts))
		self.printer = None
		self.connected = False
		self.lastline, self.nextline = findInterval(LINE_INTERVAL)
		self.nth = 0
Example #15
0
    def __init__(self, keepAlive = True, sendReceipts = True):
        self.sendReceipts = sendReceipts
        
        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()
        
        self.signalsInterface.registerListener("message_received", self.onMessageReceived)
        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)
        self.signalsInterface.registerListener("message_error", self.onError)

        self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
        self.signalsInterface.registerListener("receipt_messageDelivered", self.onMessageDelivered)
        
        self.signalsInterface.registerListener("image_received", self.onImageReceived)


        
        self.cm = connectionManager

        self.message_queue = Queue()
        self.image_queue = Queue()

        self.reply_dic = {}

        self.running = True
Example #16
0
    def __init__(self, keepAlive = False, sendReceipts = False):
        self.sendReceipts = sendReceipts
        self.redis=redis.Redis()

        self.queue_key = 'MESSAGES_LISTS'
        self.MODE_CONNECTED=1
        self.MODE_DISCONNECTED=2
        self.MODE_CONNECTING=3

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("message_received", self.onMessageReceived)
        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)
        self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
        self.signalsInterface.registerListener("receipt_messageDelivered",self.messageReceived)

        #self.signalsInterface.registerListener("receipt_messageDelivered", lambda jid, messageId: methodsInterface.call("delivered_ack", (jid, messageId)))


        self.cm = connectionManager
Example #17
0
    def __init__(self, keepAlive=False, sendReceipts=False):
        self.sendReceipts = sendReceipts
        self.redis = redis.Redis()

        self.queue_key = 'MESSAGES_LISTS'
        self.MODE_CONNECTED = 1
        self.MODE_DISCONNECTED = 2
        self.MODE_CONNECTING = 3

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)
        self.signalsInterface.registerListener("receipt_messageSent",
                                               self.onMessageSent)
        self.signalsInterface.registerListener("receipt_messageDelivered",
                                               self.messageReceived)

        #self.signalsInterface.registerListener("receipt_messageDelivered", lambda jid, messageId: methodsInterface.call("delivered_ack", (jid, messageId)))

        self.cm = connectionManager
Example #18
0
	def __init__(self, phoneNumber):
		self.sendReceipts = True
		self.phoneNumber = phoneNumber
		self.jid = "*****@*****.**" % phoneNumber
		
		self.sentCache = {}
		
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(True)
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
		self.signalsInterface.registerListener("presence_updated", self.onPresenceUpdated)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		self.signalsInterface.registerListener("sync_contactsReceived", self.onSyncContacts)
		self.signalsInterface.registerListener("sync_statusesReceived", self.onSyncStatuses)
		
		
		self.commandMappings = {"lastseen":lambda: self.methodsInterface.call("presence_request", ( self.jid,)),
								"available": lambda: self.methodsInterface.call("presence_sendAvailable"),
								"unavailable": lambda: self.methodsInterface.call("presence_sendUnavailable"),
								"sync": lambda number: self.methodsInterface.call("sync_sendContacts", ([number],)),
								"status": lambda cjid: self.methodsInterface.call("sync_getStatuses", ([cjid],))
								 }
		
		self.done = False
Example #19
0
    def __init__(self, app, keepAlive=False, sendReceipts=False):
        self.sendReceipts = sendReceipts
        self.app = app

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("image_received",
                                               self.onImageReceived)
        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.signalsInterface.registerListener("contact_gotProfilePicture",
                                               self.onGotProfilePicture)

        self.cm = connectionManager
        self.done = False
Example #20
0
class LibInterfaceHandler(InterfaceHandlerBase):
    def __init__(self, username):
        self.connectionManager = YowsupConnectionManager()
        self.connectionManager.setAutoPong(True)

        self.signalInterface = self.connectionManager.getSignalsInterface()
        self.methodInterface = self.connectionManager.getMethodsInterface()

        super(LibInterfaceHandler, self).__init__()

        self.initSignals()
        self.initMethods()

    def initSignals(self):
        self.signals = self.signalInterface.getSignals()

    def initMethods(self):
        #get methods
        self.methods = self.methodInterface.getMethods()

    def connectToSignal(self, signalName, callback):
        if not self.isSignal(signalName):
            raise InvalidSignalException()

        self.signalInterface.registerListener(signalName, callback)

    def call(self, methodName, params=()):
        if not self.isMethod(methodName):
            raise InvalidMethodException()

        return self.methodInterface.call(methodName, params)
Example #21
0
    def __init__(self, sendReceipts = True, timeout = 5):
        """ __init__"""
        self.timeout = timeout
        self.done = False
        self.path = ""
        self.gotMediaReceipt = False

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(True)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)
#        self.signalsInterface.registerListener("profile_setPictureSuccess", self.onSetPictureSuccess)
#        self.signalsInterface.registerListener("profile_setPictureError", self.onSetPictureError)
#        self.signalsInterface.registerListener("profile_setStatusSuccess", self.onSetStatusSuccess)
#        self.signalsInterface.registerListener("presence_updated", self.onPresenceUpdated)
#        self.signalsInterface.registerListener("presence_available", self.onPresenceAvailable)
#        self.signalsInterface.registerListener("presence_unavailable", self.onPresenceUnavailable)
        self.signalsInterface.registerListener("media_uploadRequestSuccess", self.onMediaUploadRequestSuccess)
        self.signalsInterface.registerListener("media_uploadRequestFailed", self.onMediaUploadRequestFailure)
        self.signalsInterface.registerListener("media_uploadRequestDuplicate", self.onMediaUploadRequestDuplicate)
Example #22
0
 def __init__(self, login, password):
     connectionManager = YowsupConnectionManager()
     self.signals = connectionManager.getSignalsInterface()
     self.methods = connectionManager.getMethodsInterface()
     self.signals.registerListener("auth_success", self.onAuthSuccess)
     self.signals.registerListener("auth_fail", self.onAuthFailed)
     self.login = login
     self.password = base64.b64decode(bytes(password.encode('utf-8')))
     self.done = False
Example #23
0
	def __init__(self, status):
		
		self.status=status
		connectionManager = YowsupConnectionManager()
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)

		self.done = False
Example #24
0
	def __init__(self, keepAlive = False, sendReceipts = True):
		self.sendReceipts = sendReceipts
		
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)

		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("group_messageReceived", self.onGroupMessageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		
		self.signalsInterface.registerListener("presence_updated", self.onPresence_updated)
		self.signalsInterface.registerListener("presence_available", self.onPresence_available)
		self.signalsInterface.registerListener("presence_unavailable", self.onPresence_unavailable)
		
		self.signalsInterface.registerListener("contact_gotProfilePicture", self.onContact_gotProfilePicture)
		
		self.signalsInterface.registerListener("profile_setStatusSuccess", self.onProfile_setStatusSuccess)
		self.signalsInterface.registerListener("status_dirty", self.onStatus_dirty)
		
		self.signalsInterface.registerListener("contact_gotProfilePictureId", self.onContact_gotProfilePictureId)
		self.signalsInterface.registerListener("contact_gotProfilePicture", self.onContact_gotProfilePicture)
		
		self.signalsInterface.registerListener("group_gotParticipants", self.onGroup_gotParticipants)
		
		self.cm = connectionManager
		self.db = MyZODB('Data/Data.fs')
		self.dbroot = self.db.dbroot
		if not self.dbroot.has_key("groups"):
			self.dbroot["groups"] = PersistentMapping()
		if not self.dbroot.has_key("messages"):
			self.dbroot["messages"] = PersistentMapping()
		if not self.dbroot.has_key("config"):
			self.dbroot["config"] = PersistentMapping()
		if not self.dbroot.has_key("features"):
			self.dbroot["features"] = PersistentMapping()
		if not self.dbroot.has_key("contacts"):
			self.dbroot["contacts"] = PersistentMapping()
		if not self.dbroot.has_key("chats"):
			self.dbroot['chats'] = PersistentMapping()
		if not self.dbroot['features'].has_key("responses"):
			self.dbroot['features']['responses'] = PersistentMapping()
		if not self.dbroot['features'].has_key("outbox"):
			self.dbroot['features']['outbox'] = PersistentList()
		self.outbox=self.dbroot['features']['outbox']
		self.outboxempty=False
		self.outboxprocessing=False
Example #25
0
	def __init__(self, phone_number):
		connectionManager = YowsupConnectionManager()
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()

		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		# self.signalsInterface.registerListener("profile_setPictureSuccess", self.onSetProfilePicture)
		# self.signalsInterface.registerListener("profile_setPictureError", self.onSetProfilePictureError)
		self.signalsInterface.registerListener("contact_gotProfilePicture", self.onGotProfilePicture)
		# self.signalsInterface.registerListener("profile_setStatusSuccess", self.onSetStatusSuccess)
		self.phone_number = phone_number
		self.done = False		
Example #26
0
	def __init__(self, keepAlive = False, sendReceipts = False):
		self.sendReceipts = sendReceipts
		
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)

		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		
		self.cm = connectionManager
Example #27
0
	def __init__(self, target, waitForReceipt=True):
		
		self.jid = target
		jid = self.jid
		print(jid)

		
		connectionManager = YowsupConnectionManager()
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("contact_gotProfilePicture", self.onProfilePicture)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
Example #28
0
def setup():
    global cm, signals_interface, methods_interface

    Debugger.enabled = False

    cm = YowsupConnectionManager()

    cm.setAutoPong(True)

    signals_interface = cm.getSignalsInterface()
    methods_interface = cm.getMethodsInterface()

    signals_interface.registerListener('auth_success', cb_auth_success)
    signals_interface.registerListener('auth_fail', cb_auth_fail)
    signals_interface.registerListener('disconnected', cb_disconnected)
    def __init__(self, login, password, keepAlive=False, autoack=False):
        logging.info("bot created")
        self.sendReceipts = autoack
        self.username = login
        self.password = password
        self.stayon = True
        #self.setup()
        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        dirs = ["downloads", "logs", "modules", "configs"]
        for folder in dirs:
            if not os.path.isdir(folder):
                print "missing directory %s. Creating it." % folder
                modules.misctools.mkdir_p(folder)

        self.clientsinfofile = os.path.join('configs', 'clientsinfo')
        try:
            with open(self.clientsinfofile, 'r') as clientsinfofileobj:
                self.clientsinfo = json.load(clientsinfofileobj)
                print "loaded clients", self.clientsinfo
        except IOError:
            print "No client registered/talked to yet"
            self.clientsinfo = {}

        self.adminfile = os.path.join('configs', 'admin')
        try:
            with open(self.adminfile, 'r') as adminfileobj:
                self.admin = json.load(adminfileobj)
                print "admin is", self.admin
        except IOError:
            print "No admin set. please set by saving admin in configs/admin"
            self.admin = "noneset"

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.signals.append("command")

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        for module in vars(modules).values():
            if hasattr(module, "setup"):
                module.setup(self)
Example #30
0
    def __init__(self, phoneNumber, keepAlive=False, sendReceipts=False):

        self.ui = Gtk.Builder()
        #self.ui.set_translation_domain(APP_NAME)
        self.ui.add_from_file('Examples/window.ui')
        self.ui.connect_signals(self)
        self.window = self.ui.get_object('window')
        self.window.connect('destroy', self.stop_loop)
        self.messagesbuffer = self.ui.get_object('messagesbuffer')
        self.debugbuffer = self.ui.get_object('debugbuffer')
        self.messageentry = self.ui.get_object('messageentry')
        self.scrolleddebugwindow = self.ui.get_object('scrolleddebugwindow')
        self.autoscrollmenuitem = self.ui.get_object('autoscrollmenuitem')
        self.autoscrollbutton = self.ui.get_object('autoscrollbutton')
        self.chatlabel = self.ui.get_object('chatlabel')
        self.chatlabel.set_text('Chat with +%s' % phoneNumber)

        self.sendReceipts = sendReceipts
        self.phoneNumber = phoneNumber
        self.jid = "*****@*****.**" % phoneNumber

        self.sentCache = {}

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("message_received", self.onMessageReceived)
        self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
        self.signalsInterface.registerListener("presence_updated", self.onPresenceUpdated)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)

        self.commandMappings = {"lastseen": lambda: self.methodsInterface.call("presence_request", (self.jid,)),
                                "available": lambda: self.methodsInterface.call("presence_sendAvailable"),
                                "unavailable": lambda: self.methodsInterface.call("presence_sendUnavailable"),
                                "quit": lambda: self.stop_loop()
                                }

        self.done = False
        self.run_loop = True
        self.autoscroll = True

        self.window.show_all()
        prompt = self.getPrompt() + '\n'
        self.messagesbuffer.insert_at_cursor(prompt, len(prompt))
Example #31
0
	def __init__(self,login,password,keepAlive=False,autoack=False):
		logging.info("bot created")
		self.sendReceipts = autoack
		self.username=login
		self.password=password
		self.stayon=True
		#self.setup()
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)
		
		dirs=["downloads","logs","modules","configs"]
		for folder in dirs:
			if not os.path.isdir(folder):
				print "missing directory %s. Creating it." % folder
				modules.misctools.mkdir_p(folder)
		
		self.clientsinfofile=os.path.join('configs','clientsinfo')
		try:
			with open(self.clientsinfofile,'r') as clientsinfofileobj:
				self.clientsinfo=json.load(clientsinfofileobj)
				print "loaded clients",self.clientsinfo
		except IOError:
			print "No client registered/talked to yet"
			self.clientsinfo={}
		
		self.adminfile=os.path.join('configs','admin')
		try:
			with open(self.adminfile,'r') as adminfileobj:
				self.admin=json.load(adminfileobj)
				print "admin is",self.admin
		except IOError:
			print "No admin set. please set by saving admin in configs/admin"
			self.admin="noneset"
		
		
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.signals.append("command")
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		
		for module in vars(modules).values():
			if hasattr(module,"setup"):
				module.setup(self)
Example #32
0
    def __init__(self, phone_number):
        connectionManager = YowsupConnectionManager()
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)
        # self.signalsInterface.registerListener("profile_setPictureSuccess", self.onSetProfilePicture)
        # self.signalsInterface.registerListener("profile_setPictureError", self.onSetProfilePictureError)
        self.signalsInterface.registerListener("contact_gotProfilePicture",
                                               self.onGotProfilePicture)
        # self.signalsInterface.registerListener("profile_setStatusSuccess", self.onSetStatusSuccess)
        self.phone_number = phone_number
        self.done = False
Example #33
0
	def __init__(self, username, password, boxClient, keepAlive = False, sendReceipts = False):
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)

		self.cm = connectionManager
		self.sendReceipts = sendReceipts
		self.username = username
		self.password = base64.b64decode(bytes(password.encode('utf-8')))
		self.boxClient = boxClient
		
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
	def startConnection(self):
		trace_start("trace.html")
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(True)

		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()

		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
		self.signalsInterface.registerListener("ping", self.onPing)
		self.gotReceipt = 0
		self.cm = connectionManager
		self.fileName="defaultFileName"
Example #35
0
	def __init__(self, keepAlive = True, sendReceipts = False):
		self.sendReceipts = sendReceipts
		
		connectionManager = YowsupConnectionManager()
		#connectionManager.setAutoPong(keepAlive)
		connectionManager.setAutoPong(True)

		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("group_messageReceived", self.group_messageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)
		
		self.cm = connectionManager
Example #36
0
    def __init__(self, target, waitForReceipt=True):

        self.jid = target
        jid = self.jid
        print(jid)

        connectionManager = YowsupConnectionManager()
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("contact_gotProfilePicture",
                                               self.onProfilePicture)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)
Example #37
0
    def __init__(self, phoneNumber):
        self.sendReceipts = True
        self.phoneNumber = phoneNumber
        self.jid = "*****@*****.**" % phoneNumber

        self.sentCache = {}

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(True)
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("receipt_messageSent",
                                               self.onMessageSent)
        self.signalsInterface.registerListener("presence_updated",
                                               self.onPresenceUpdated)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)
        self.signalsInterface.registerListener("sync_contactsReceived",
                                               self.onSyncContacts)
        self.signalsInterface.registerListener("sync_statusesReceived",
                                               self.onSyncStatuses)

        self.commandMappings = {
            "lastseen":
            lambda: self.methodsInterface.call("presence_request",
                                               (self.jid, )),
            "available":
            lambda: self.methodsInterface.call("presence_sendAvailable"),
            "unavailable":
            lambda: self.methodsInterface.call("presence_sendUnavailable"),
            "sync":
            lambda number: self.methodsInterface.call("sync_sendContacts",
                                                      ([number], )),
            "status":
            lambda cjid: self.methodsInterface.call("sync_getStatuses",
                                                    ([cjid], ))
        }

        self.done = False
Example #38
0
def setup():

    global cm, signals_interface, methods_interface

    Debugger.enabled = False

    cm = YowsupConnectionManager()

    cm.setAutoPong(True)

    signals_interface = cm.getSignalsInterface()
    methods_interface = cm.getMethodsInterface()

    signals_interface.registerListener('auth_success', cb_auth_success)
    signals_interface.registerListener('auth_fail', cb_auth_fail)
    signals_interface.registerListener('contact_gotProfilePicture', cb_contact_gotProfilePicture)
    signals_interface.registerListener('receipt_messageSent', cb_message_sent)
    signals_interface.registerListener('receipt_messageDelivered', cb_message_delivered)
Example #39
0
	def __init__(self, phoneNumber, message, waitForReceipt=False):
		
		self.jid = "*****@*****.**" % phoneNumber
		self.message = message
		self.waitForReceipt = waitForReceipt
		
		connectionManager = YowsupConnectionManager()
		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		if waitForReceipt:
			self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
			self.gotReceipt = False
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)

		self.done = False
Example #40
0
    def __init__(self, username, password, phoneNumber, keepAlive = False, sendReceipts = False):
        self.sendReceipts = sendReceipts
        self.phoneNumber = phoneNumber
        self.keepAlive = keepAlive
        self.jid = "*****@*****.**" % phoneNumber

        self.sentCache = {}

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(self.keepAlive)
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("message_received", self.onMessageReceived)
        self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
        self.signalsInterface.registerListener("presence_updated", self.onPresenceUpdated)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)

        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_size_request(500, 350)
        self.window.set_border_width(10)
        self.window.set_title('cchat')
        self.window.connect('delete_event',self.close_window)
        self.vcontainer = gtk.VBox(False, 0)
        self.hcontainer = gtk.HBox(False, 0)
        self.chatview = gtk.ScrolledWindow()
        self.chatview.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.textview = gtk.TextView()
        self.textview.set_editable(False)
        self.textview.set_cursor_visible(False)
        self.textview.set_wrap_mode(gtk.WRAP_WORD)
        self.text_buffer = self.textview.get_buffer()
        self.chatview.add(self.textview)
        self.chatview.show()
        self.vcontainer.pack_start(self.chatview)
        self.textbox = gtk.Entry()
        self.send_button = gtk.Button('Send')
        self.send_button.connect('clicked', self.send)
        self.hcontainer.pack_start(self.textbox)
        self.hcontainer.pack_end(self.send_button)
        self.vcontainer.pack_end(self.hcontainer)
        self.window.show_all()
Example #41
0
    def __init__(self, app, keepAlive=False, sendReceipts=False):
        self.sendReceipts = sendReceipts
        self.app = app

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("group_messageReceived",
                                               self.onGroupMessageReceived)
        self.signalsInterface.registerListener("image_received",
                                               self.onImageReceived)
        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.signalsInterface.registerListener("contact_gotProfilePicture",
                                               self.onGotProfilePicture)
        self.signalsInterface.registerListener("profile_setStatusSuccess",
                                               self.onSetStatusSuccess)
        self.signalsInterface.registerListener("group_createSuccess",
                                               self.onGroupCreateSuccess)
        self.signalsInterface.registerListener("group_createFail",
                                               self.onGroupCreateFail)
        self.signalsInterface.registerListener("group_gotInfo",
                                               self.onGroupGotInfo)
        self.signalsInterface.registerListener(
            "group_addParticipantsSuccess", self.onGroupAddParticipantsSuccess)

        self.cm = connectionManager
        self.url = os.getenv('SERVER_URL', 'http://localhost:3000')
        self.post_headers = {
            'Content-type': 'application/json',
            'Accept': 'application/json'
        }
        self.done = False
Example #42
0
    def __init__(self):
        self.sendReceipts = True
        self.groupMembership = {}
        self.groupParticipants = {}

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(True)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("group_messageReceived",
                                               self.onGroupMessageReceived)
        self.signalsInterface.registerListener("group_subjectReceived",
                                               self.onGroupSubjectReceived)
        self.signalsInterface.registerListener("group_gotInfo",
                                               self.onGroupGotInfo)
        self.signalsInterface.registerListener("group_gotParticipants",
                                               self.onGroupGotParticipants)
        self.signalsInterface.registerListener("group_imageReceived",
                                               self.onGroupImageReceived)
        self.signalsInterface.registerListener("group_videoReceived",
                                               self.onGroupVideoReceived)
        self.signalsInterface.registerListener("group_audioReceived",
                                               self.onGroupAudioReceived)
        self.signalsInterface.registerListener("group_locationReceived",
                                               self.onGroupLocationReceived)
        self.signalsInterface.registerListener("group_vcardReceived",
                                               self.onGroupVcardReceived)

        self.signalsInterface.registerListener(
            "notification_groupParticipantRemoved",
            self.onNotificationGroupParticipantRemoved)
        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.cm = connectionManager
Example #43
0
def setup():

    global cm, signals_interface, methods_interface

    Debugger.enabled = False

    cm = YowsupConnectionManager()

    cm.setAutoPong(True)

    signals_interface = cm.getSignalsInterface()
    methods_interface = cm.getMethodsInterface()

    signals_interface.registerListener('auth_success', cb_auth_success)
    signals_interface.registerListener('auth_fail', cb_auth_fail)
    signals_interface.registerListener('contact_gotProfilePicture',
                                       cb_contact_gotProfilePicture)
    signals_interface.registerListener('receipt_messageSent', cb_message_sent)
    signals_interface.registerListener('receipt_messageDelivered',
                                       cb_message_delivered)
Example #44
0
	def __init__(self, app, keepAlive = False, sendReceipts = False):
		self.sendReceipts = sendReceipts
		self.app = app
		
		connectionManager = YowsupConnectionManager()
		connectionManager.setAutoPong(keepAlive)		

		self.signalsInterface = connectionManager.getSignalsInterface()
		self.methodsInterface = connectionManager.getMethodsInterface()
		
		self.signalsInterface.registerListener("message_received", self.onMessageReceived)
		self.signalsInterface.registerListener("image_received", self.onImageReceived)
		self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
		self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
		self.signalsInterface.registerListener("disconnected", self.onDisconnected)

		self.signalsInterface.registerListener("contact_gotProfilePicture", self.onGotProfilePicture)
		
		self.cm = connectionManager
		self.done = False
Example #45
0
    def __init__(self, admin_phone, keep_alive=False, send_receipts=False):
        self.send_receipts = send_receipts
        self.keep_alive = keep_alive
        self.admin_phone = admin_phone
        self.admin_jid = JID_BASE % admin_phone
        # Configure connection manager
        connection_manager = YowsupConnectionManager()
        connection_manager.setAutoPong(keep_alive)
        self.signals = connection_manager.getSignalsInterface()
        self.methods = connection_manager.getMethodsInterface()
        # Configure callbacks
        self.signals.registerListener("auth_success", self.on_auth_success)
        self.signals.registerListener("auth_fail", self.on_auth_failed)
        self.signals.registerListener("disconnected", self.on_disconnected)
        self.signals.registerListener("message_received", self.on_message_received)
        self.signals.registerListener("group_messageReceived", self.on_group_message_received)

        self.groups = {}
        self.creation_time = time.time()

        self.done = False
Example #46
0
def setup():
    Debugger.enabled = True
    global cm, signals_interface, methods_interface
    print 'Settng up environment'

    cm = YowsupConnectionManager()

    cm.setAutoPong(True)

    signals_interface = cm.getSignalsInterface()
    methods_interface = cm.getMethodsInterface()

    signals_interface.registerListener('auth_success', cb_auth_success)
    signals_interface.registerListener('auth_fail', cb_auth_fail)
    signals_interface.registerListener('contact_gotProfilePicture',
                                       cb_contact_gotProfilePicture)
    signals_interface.registerListener('receipt_messageSent', cb_message_sent)
    signals_interface.registerListener('receipt_messageDelivered',
                                       cb_message_delivered)

    # Presence
    signals_interface.registerListener('presence_updated', cb_presence_updated)
Example #47
0
    def __init__(self, admin_phone, keep_alive=False, send_receipts=False):
        self.send_receipts = send_receipts
        self.keep_alive = keep_alive
        self.admin_phone = admin_phone
        self.admin_jid = JID_BASE % admin_phone
        # Configure connection manager
        connection_manager = YowsupConnectionManager()
        connection_manager.setAutoPong(keep_alive)
        self.signals = connection_manager.getSignalsInterface()
        self.methods = connection_manager.getMethodsInterface()
        # Configure callbacks
        self.signals.registerListener("auth_success", self.on_auth_success)
        self.signals.registerListener("auth_fail", self.on_auth_failed)
        self.signals.registerListener("disconnected", self.on_disconnected)
        self.signals.registerListener("message_received",
                                      self.on_message_received)
        self.signals.registerListener("group_messageReceived",
                                      self.on_group_message_received)

        self.groups = {}
        self.creation_time = time.time()

        self.done = False
Example #48
0
    def __init__(self):
        super(WazappDesktop, self).__init__()
        Contacts.instance().contacts_updated_signal.connect(self.checkPresence)
        self.contact_status_changed_signal.connect(Contacts.instance().contactStatusChanged)

        self._hasUnreadMessage = False
        self._isOnline = False

        self._mainWindow = MainWindow()
        self.show = self._mainWindow.show
        self._mainWindow.send_message_signal.connect(self.do_send)
        self._mainWindow.has_unread_message_signal.connect(self.unreadMessage)

        self._systrayIcon = SystemTrayIcon()
        self._systrayIcon.quit_signal.connect(self.close)
        self._systrayIcon.quit_signal.connect(self._mainWindow.close)
        self._systrayIcon.toggle_main_window_signal.connect(self.toggleMainWindow)
        self.status_changed_signal.connect(self._systrayIcon.statusChanged)

        self.show_message_signal.connect(self._mainWindow.showMessage)
        self.message_status_changed_signal.connect(self._mainWindow.messageStatusChanged)

        self._ownJid = Contacts.instance().phoneToConversationId(getConfig('countryCode') + getConfig('phoneNumber'))

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(True)

        self._pictureDownloader = PictureDownloader(connectionManager, Contacts.instance())

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()
        for method, events in self.getEventBindings().iteritems():
            for event in events:
                self.signalsInterface.registerListener(event, method)

        self.setOnline(False)
        self._login()
    def __init__(self, user, password, phone):
        '''WhatsAppClient's constructor.

        Args:
          user (str): the local phone number.
          password (str): the WhatsApp password of 'user'.
          phone (str): the remote phone number.
        '''

        super().__init__()

        self.user = user
        try:
            self.password = base64.b64decode(bytes(password.encode('utf-8')))
        except base64.binascii.Error:  # Lets Yowsup handle the error.
            self.password = bytes(password.encode('utf-8'))
        # Users are identified in WhatsApp by their phone number (plus the
        # code) followed by the domain '@s.whatsapp.net'.
        self.phone = phone + '@s.whatsapp.net'
        self.connected = False

        # Yowsup managers and signals setting up.
        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(True)
        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener('auth_success',
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener('auth_fail', self.onAuthFailed)
        self.signalsInterface.registerListener('message_received',
                                               self.onMessageReceived)
        self.signalsInterface.registerListener('image_received',
                                               self.onImageReceived)
        self.signalsInterface.registerListener('disconnected',
                                               self.onDisconnected)
Example #50
0
##Audio receive and download
def onaudio_received(messageId, jid, url, size, receiptRequested, a):
    urllib.urlretrieve(url, messageId + ".acc")
    methodsInterface.call("message_ack", (jid, messageId))
    #avconv -i 1402571446-347.acc -ar 16000 out.flac
    #curl -X POST -H 'Content-Type:audio/x-flac; rate=16000' -T out.flac 'https://www.google.com/speech-api/v2/recognize?lang=es&maxresults=10&pfilter=0&key=AIzaSyCGRH-QgpLZyHy0SlIIJS30oolFCUXk5S0'


##Init Yowsup and Thermal Printer
t = Thermal(devid)
y = YowsupConnectionManager()
y.setAutoPong(True)
Debugger.enabled = False
methodsInterface = y.getMethodsInterface()
signalsInterface = y.getSignalsInterface()

##Regiter listeners
signalsInterface.registerListener("auth_success", onAuthSuccess)
signalsInterface.registerListener("message_received", onMessage)
signalsInterface.registerListener("disconnected", ondisconnected)
signalsInterface.registerListener("image_received", onimage_received)
signalsInterface.registerListener("audio_received", onaudio_received)
signalsInterface.registerListener("receipt_messageDelivered",
                                  onMessageDelivered)

##Auth
methodsInterface.call("auth_login", (user, base64.b64decode(passw)))
methodsInterface.call("ready")

##Profile photo and Status
Example #51
0
class MainBot():
    def __init__(self, user, passwd):
        self.con = YowsupConnectionManager()
        self.con.setAutoPong(True)
        self.signalsInterface = self.con.getSignalsInterface()
        self.methodsInterface = self.con.getMethodsInterface()
        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)
        self.signalsInterface.registerListener("receipt_messageDelivered",
                                               self.onMessageDelivered)
        self.methodsInterface.call("auth_login",
                                   (user, base64.b64decode(passwd)))
        self.running = True

    def onAuthSuccess(self, args):
        print("Auth True")
        self.methodsInterface.call("ready")

    def onAuthFailed(self, args):
        print("Auth False")
        self.running = False

    def onDisconnected(self, args):
        print("Connection Terminated")
        self.running = False

    def onMessageDelivered(self, jid, messageId):
        print("Message Delivered")

    def onMessageReceived(self, messageId, jid, messageContent, timestamp,
                          wantsReceipt, pushName, isBroadcast):
        time.sleep(0.2)
        self.methodsInterface.call("message_ack", (jid, messageId))
        time.sleep(0.2)
        self.react(jid, messageContent)

    def react(self, jid, messageContent):
        messageContent = messageContent.upper()
        text = messageContent.split()
        if ('HI' in text) or ('SUP' in text) or ('HELLO' in text):
            self.methodsInterface.call("message_send",
                                       (jid, "Hello Im WABot Alpha"))
        elif (('LOL' in text) or ('BYE' in text)):
            self.methodsInterface.call("message_send", (jid, "hmmm..."))
        elif (('OK' in text) or ('THANKS' in text)):
            self.methodsInterface.call("message_send",
                                       (jid, "Your Welcome, anything else"))
        elif ('HITME' in text) or (('HIT' in text) and ('ME' in text)):
            self.methodsInterface.call("message_send",
                                       (jid, self.action_send_quote()))
        elif ((('CHUCK' in text) or ('NORRIS' in text))
              and (('JOKE' in text) or ('JOKES' in text))):
            self.methodsInterface.call("message_send",
                                       (jid, self.action_send_norris()))
        else:
            self.methodsInterface.call("message_send",
                                       (jid, self.do_a_search(text)))

    def action_send_quote(self):
        try:
            data = urllib.urlopen(
                "http://www.iheartquotes.com/api/v1/random?source=joel_on_software+paul_graham+prog_style"
            ).read()
            e = data.split('\n')
            txt = '\n'.join(e[0:len(e) - 2])
            return str(self.uscape(txt))
        except:
            return "cannot hit you, for now"

    def action_send_norris(self):
        try:
            data = urllib.urlopen("http://api.icndb.com/jokes/random/").read()
            joke = json.loads(data)
            return str(self.uscape(joke['value']['joke']).encode('utf8'))
        except:
            return "Norris killed the server"

    def do_a_search(self, text):
        try:
            q = '+'.join(text)
            data = urllib.urlopen(
                "http://api.duckduckgo.com/?q=" + q +
                "&format=json&pretty=1&no_redirect=1").read()
            result = json.loads(data)
            if not (result["RelatedTopics"][0]["Text"] == ""):
                return str(
                    self.uscape("Lets Seee.... \n" +
                                (result["AbstractText"]).encode('utf8')))
            else:
                return "Hmmmmm, Nothing to say"
        except:
            return "Hmmmmm, Not in the mood"

    def uscape(self, text):
        try:
            return HTMLParser.HTMLParser().unescape(text)
        except:
            return text
Example #52
0
class WhatsappCmdClient:

    bAuthFinished = False
    bAuthSuccess = False
    bSetProfileFile = False
    bSetProfileSuccess = False
    bSetStatus = False
    bDisconnected = True
    sDisconnectReason = ""
    lvMessage = []

    def __init__(self, phoneNumber, keepAlive=False, sendReceipts=False):
        self.sendReceipts = sendReceipts
        self.phoneNumber = phoneNumber
        self.jid = "*****@*****.**" % phoneNumber
        self.myjid = ""

        self.sentCache = {}
        WhatsappCmdClient.lvMessage = []

        self.connectionManager = YowsupConnectionManager(False)
        self.connectionManager.setAutoPong(keepAlive)
        self.signalsInterface = self.connectionManager.getSignalsInterface()
        self.methodsInterface = self.connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("receipt_messageSent",
                                               self.onMessageSent)
        self.signalsInterface.registerListener("presence_updated",
                                               self.onPresenceUpdated)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)
        self.signalsInterface.registerListener("profile_setPictureSuccess",
                                               self.onPictureSuccess)
        self.signalsInterface.registerListener("profile_setPictureError",
                                               self.onPictureError)
        self.signalsInterface.registerListener("contact_gotProfilePicture",
                                               self.onProfilePicture),
        self.signalsInterface.registerListener("profile_setStatusSuccess",
                                               self.onStatusSuccess)

        #0: method, 1: parameter name in prompt, 2: position in prompt
        #self.commandMappings = {"lastseen":    (lambda: self.methodsInterface.call("presence_request", (self.jid,)),"",6),
        #"available":   (lambda: self.methodsInterface.call("presence_sendAvailable"),"",1),
        #"unavailable": (lambda: self.methodsInterface.call("presence_sendUnavailable"),"",2),
        #"setprofile":  (lambda file: self.setProfile(file,),"filename",4),
        #"setstatus":   (lambda status: self.setStatus(status,),"status",5),
        #"getprofile":  (lambda: self.methodsInterface.call("contact_getProfilePicture", (self.jid,)),"",3),
        #"exit": 	   (self.done,"",7)
        #}

        #self.done = False
        #self.signalsInterface.registerListener("receipt_messageDelivered", lambda jid, messageId: self.methodsInterface.call("delivered_ack", (jid, messageId)))

    def login(self, username, password):
        self.username = username
        self.myjid = "*****@*****.**" % username
        self.methodsInterface.call("auth_login", (username, password))

    def onAuthSuccess(self, username):
        self.methodsInterface.call("ready")
        WhatsappCmdClient.bAuthFinished = True
        WhatsappCmdClient.bAuthSuccess = True
        WhatsappCmdClient.bDisconnected = False

    def onAuthFailed(self, username, err):
        WhatsappCmdClient.bAuthFinished = True
        WhatsappCmdClient.bAuthSuccess = False

    def setProfile(self, file):
        if os.path.isfile(file):
            self.methodsInterface.call("profile_setPicture", (file, ))
            WhatsappCmdClient.bSetProfileFile = True
        else:
            WhatsappCmdClient.bSetProfileFile = False

    def onPictureSuccess(self, id):
        WhatsappCmdClient.bSetProfileSuccess = True

    def onPictureError(self, error):
        WhatsappCmdClient.bSetProfileSuccess = False

    def onMessageReceived(self, messageId, jid, messageContent, timestamp,
                          wantsReceipt, pushName, isBroadcast):
        formattedDate = datetime.datetime.fromtimestamp(timestamp).strftime(
            '%Y%m%d %H:%M.%S')
        WhatsappCmdClient.lvMessage.append(
            (jid, formattedDate, messageContent, messageId))

        if wantsReceipt and self.sendReceipts:
            self.methodsInterface.call("message_ack", (jid, messageId))

    def onMessageSent(self, jid, messageId):
        pass

    def sendMessage(self, jid, message):
        msgId = self.methodsInterface.call("message_send", (jid, message))
        self.sentCache[msgId] = [int(time.time()), message]

    def setStatus(self, status):
        self.methodsInterface.call("profile_setStatus", (status, )),
        WhatsappCmdClient.bSetStatus = False

    def onStatusSuccess(self, jid, messageId):
        self.methodsInterface.call("message_ack", (jid, messageId))
        WhatsappCmdClient.bSetStatus = True

    def onDisconnected(self, reason):
        WhatsappCmdClient.bDisconnected = True
        WhatsappCmdClient.sDisconnectReason = reason

    def onProfilePicture(self, jid, pictureid, path):
        print("Got profile picture of %s: id: %s path:%s" %
              (jid, pictureid, path))

    def onPresenceUpdated(self, jid, lastSeen):
        formattedDate = datetime.datetime.fromtimestamp(
            long(time.time()) - lastSeen).strftime('%d-%m-%Y %H:%M')
        self.onMessageReceived(0, jid, "LAST SEEN RESULT: %s" % formattedDate,
                               long(time.time()), False, None, False)
Example #53
0
class WAInterface(threading.Thread):
    def __init__(self, username, password, msg_handler, stopped_handler):
        threading.Thread.__init__(self)
        self.connected = False
        self.must_run = True
        self.msg_handler = msg_handler
        self.stopped_handler = stopped_handler
        self.username = username
        self.password = base64.b64decode(password)
        self.cm = YowsupConnectionManager()
        self.cm.setAutoPong(True)
        self.signalsInterface = self.cm.getSignalsInterface()
        self.methodsInterface = self.cm.getMethodsInterface()
        self.signalsInterface.registerListener("notification_groupPictureUpdated", self.onGroup_PictureUpdated)
        self.signalsInterface.registerListener("group_gotPicture", self.onGroup_PictureGot)
        self.signalsInterface.registerListener("group_imageReceived", self.onGroup_ImageReceived)
        self.signalsInterface.registerListener("image_received", self.onImageReceived)
        self.signalsInterface.registerListener("group_videoReceived", self.onGroup_VideoReceived)
        self.signalsInterface.registerListener("videoimage_received", self.onVideoReceived)
        self.signalsInterface.registerListener("message_received", self.onMessageReceived)
        self.signalsInterface.registerListener("group_messageReceived", self.onGroup_MessageReceived)
        self.signalsInterface.registerListener("auth_success", self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected", self.onDisconnected)
        self.signalsInterface.registerListener("receipt_messageSent", self.onMessageSent)
        self.signalsInterface.registerListener("receipt_messageDelivered", self.onMessageDelivered)
        self.signalsInterface.registerListener("ping", self.onPing)
    @catch_them_all
    def onMessageReceived(self, messageId, jid, messageContent, timestamp, wantsReceipt, pushName, isBroadcast):
        message = Message(kind="wa", nick_full=jid, chan=self.username, msg=messageContent)
        message.time = Timestamp(ms_int = timestamp*1000)
        self.msg_handler(message)
        sendReceipts = True
        if wantsReceipt and sendReceipts:
            self.wait_connected()
            self.methodsInterface.call("message_ack", (jid, messageId))
    @catch_them_all
    def onImageReceived(self, messageId, jid, preview, url, size, receiptRequested):
        messageContent = unicode("[ image: %s ]"%url, "utf-8")
        message = Message(kind="wa", nick_full=jid, chan=self.username, msg=messageContent)
        self.msg_handler(message)
        sendReceipts = True
        if receiptRequested and sendReceipts:
            self.wait_connected()
            self.methodsInterface.call("message_ack", (jid, messageId))
    @catch_them_all
    def onGroup_PictureUpdated(self, jid, author, timestamp, messageId, pictureId, receiptRequested):
        self.methodsInterface.call("group_getPicture", (jid,))
        sendReceipts = True
        if receiptRequested and sendReceipts:
            self.wait_connected()
            self.methodsInterface.call("message_ack", (jid, messageId))
    @catch_them_all
    def onGroup_PictureGot(self, jid, filePath):
        #TODO: upload filePath to services like imgur (or even upload as whatsapp picture, hah!) instead of displaying local file path here:
        messageContent = unicode("[ group picture: %s ]"%filePath, "utf-8")
        message = Message(kind="wa", nick_full="unknown", chan=jid, msg=messageContent)
        self.msg_handler(message)
    @catch_them_all
    def onGroup_ImageReceived(self, messageId, jid, author, preview, url, size, receiptRequested):
        messageContent = unicode("[ image: %s ]"%url, "utf-8")
        message = Message(kind="wa", nick_full=author, chan=jid, msg=messageContent)
        self.msg_handler(message)
        sendReceipts = True
        if receiptRequested and sendReceipts:
            self.wait_connected()
            self.methodsInterface.call("message_ack", (jid, messageId))
    @catch_them_all
    def onVideoReceived(self, messageId, jid, preview, url, size, receiptRequested):
        messageContent = unicode("[ video: %s ]"%url, "utf-8")
        message = Message(kind="wa", nick_full=jid, chan=self.username, msg=messageContent)
        self.msg_handler(message)
        sendReceipts = True
        if receiptRequested and sendReceipts:
            self.wait_connected()
            self.methodsInterface.call("message_ack", (jid, messageId))
    @catch_them_all
    def onGroup_VideoReceived(self, messageId, jid, author, preview, url, size, receiptRequested):
        messageContent = unicode("[ video: %s ]"%url, "utf-8")
        message = Message(kind="wa", nick_full=author, chan=jid, msg=messageContent)
        self.msg_handler(message)
        sendReceipts = True
        if receiptRequested and sendReceipts:
            self.wait_connected()
            self.methodsInterface.call("message_ack", (jid, messageId))
    @catch_them_all
    def onGroup_MessageReceived(self, messageId, jid, author, messageContent, timestamp, wantsReceipt, pushName):
        message = Message(kind="wa", nick_full=author, chan=jid, msg=messageContent)
        message.time = Timestamp(ms_int = timestamp*1000)
        self.msg_handler(message)
        sendReceipts = True
        if wantsReceipt and sendReceipts:
            self.wait_connected()
            self.methodsInterface.call("message_ack", (jid, messageId))

    @catch_them_all
    def run(self):
        try:
            self.must_run = True
            self.methodsInterface.call("auth_login", (self.username, self.password))
            self.wait_connected()
            while self.must_run:
                if not self.connected:
                    self.methodsInterface.call("auth_login", (self.username, self.password))
                time.sleep(0.5)
                #raw_input()
        finally:
            info("Main loop closing")
            self.connected = False
            self.stopped_handler()
            self.must_run = False
    def stop(self):
        self.must_run = False
    def send(self, target, text):
        self.wait_connected()
        self.methodsInterface.call("message_send", (target, text.encode("utf-8")))
        info((" >>> WA %s: %s" %(target, text)).encode("utf-8"))
    @catch_them_all
    def onAuthSuccess(self, username):
        info("Connected WA client (%s)" %username)
        self.connected = True
        self.methodsInterface.call("ready")
    @catch_them_all
    def onAuthFailed(self, username, reason):
        info("Auth Failed: %s" %reason)
        self.connected = False
    @catch_them_all
    def onDisconnected(self, reason):
        info("Disconnected WA client (%s): %s" %(self.username, reason))
        self.connected = False
    @catch_them_all
    def onMessageSent(self, jid, messageId):
        info("Message successfully sent to %s" % jid)
    @catch_them_all
    def onMessageDelivered(self, jid, messageId):
        info("Message successfully delivered to %s" %jid)
        self.wait_connected()
        self.methodsInterface.call("delivered_ack", (jid, messageId))
    @catch_them_all
    def onPing(self, pingId):
        info("Pong! (%s)" %pingId)
        self.wait_connected()
        self.methodsInterface.call("pong", (pingId,))
    def wait_connected(self):
        while not self.connected:
            if not self.must_run:
                raise Exception("bot does not intend to connect")
            time.sleep(0.1)
Example #54
0
    def __init__(self, url, keepAlive=False, sendReceipts=False):
        super(Server, self).__init__()
        self.sendReceipts = sendReceipts
        self.keepAlive = keepAlive
        self.db = create_engine(url,
                                echo=False,
                                pool_size=10,
                                pool_timeout=600,
                                pool_recycle=300)

        self.Session = sessionmaker(bind=self.db)
        self.s = self.Session()
        self.job = None

        self.pubnub = Pubnub(os.environ['PUB_KEY'], os.environ['SUB_KEY'],
                             None, False)

        self.timeout = int(os.getenv('TIMEOUT', 3600))
        connectionManager = YowsupConnectionManager(self.timeout)

        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("group_messageReceived",
                                               self.onGroupMessageReceived)
        self.signalsInterface.registerListener("image_received",
                                               self.onImageReceived)
        self.signalsInterface.registerListener("video_received",
                                               self.onVideoReceived)
        self.signalsInterface.registerListener("audio_received",
                                               self.onAudioReceived)
        self.signalsInterface.registerListener("vcard_received",
                                               self.onVCardReceived)
        self.signalsInterface.registerListener("location_received",
                                               self.onLocationReceived)
        self.signalsInterface.registerListener("receipt_messageSent",
                                               self.onReceiptMessageSent)
        self.signalsInterface.registerListener("receipt_messageDelivered",
                                               self.onReceiptMessageDelivered)

        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.signalsInterface.registerListener("contact_gotProfilePicture",
                                               self.onGotProfilePicture)
        self.signalsInterface.registerListener("profile_setStatusSuccess",
                                               self.onSetStatusSuccess)
        self.signalsInterface.registerListener("group_createSuccess",
                                               self.onGroupCreateSuccess)
        self.signalsInterface.registerListener("group_createFail",
                                               self.onGroupCreateFail)
        self.signalsInterface.registerListener("group_gotInfo",
                                               self.onGroupGotInfo)
        self.signalsInterface.registerListener(
            "group_addParticipantsSuccess", self.onGroupAddParticipantsSuccess)
        self.signalsInterface.registerListener(
            "group_removeParticipantsSuccess",
            self.onGroupRemoveParticipantsSuccess)
        self.signalsInterface.registerListener("group_imageReceived",
                                               self.onGroupImageReceived)

        self.signalsInterface.registerListener("group_subjectReceived",
                                               self.onGroupSubjectReceived)
        self.signalsInterface.registerListener(
            "notification_removedFromGroup",
            self.onNotificationRemovedFromGroup)
        self.signalsInterface.registerListener(
            "notification_groupParticipantAdded",
            self.onNotificationGroupParticipantAdded)
        self.signalsInterface.registerListener("group_gotParticipants",
                                               self.onGotGroupParticipants)

        self.signalsInterface.registerListener("media_uploadRequestSuccess",
                                               self.onUploadRequestSuccess)
        # self.signalsInterface.registerListener("media_uploadRequestFailed", self.onUploadRequestFailed)
        self.signalsInterface.registerListener("media_uploadRequestDuplicate",
                                               self.onUploadRequestDuplicate)
        self.signalsInterface.registerListener("presence_available",
                                               self.onPresenceAvailable)
        self.signalsInterface.registerListener("presence_unavailable",
                                               self.onPresenceUnavailable)

        self.cm = connectionManager
        self.url = os.environ['URL']

        self.post_headers = {
            'Content-type': 'application/json',
            'Accept': 'application/json'
        }
        self.done = False
Example #55
0
	if db.Mensajes.count() > 0:
		date = db.Mensajes.find_one()
		Number = date [ "Destino" ].encode('utf-8')
		Message = date [ "Mensaje" ].encode('utf-8')
		IdDate = date [ "_id" ]
		db.Mensajes.remove({"_id":IdDate})
		client.close()
		print ("::.MessageEngine.:: 521"+str(Number)+"@s.whatsapp.net"+str(Message))
		methodsInterface.call("message_send",("521"+str(Number)+"@s.whatsapp.net",str(Message)))
	else:
		print ("::.MessageEngine.:: No hay Mensajes en Cola")

def espera():
    while True:
    	time.sleep(10) #espera entre cada mensaje enviado, se tomaron 10 segundos para evitar saturacion con WhatsApp
    	MessageSendCola()
#............................................................................
password = ""						#Pswd de Yowsup.
username = ''                       #Numero de WhatsApp.
keepAlive = True
sendReceipts = True  
password = base64.b64decode(bytes(password.encode('utf-8')))
connectionManager = YowsupConnectionManager()
connectionManager.setAutoPong(keepAlive)
signalsInterface = connectionManager.getSignalsInterface()
methodsInterface = connectionManager.getMethodsInterface()
signalsInterface.registerListener("receipt_messageSent", onMessageSent)
signalsInterface.registerListener("receipt_messageDelivered", onMessageDelivered)  
signalsInterface.registerListener("auth_success", onAuthSuccess)  
methodsInterface.call("auth_login", (username, password))
espera()
Example #56
0
class Whatspy(object):
    phase = None
    cm = None
    signals_interface = None
    methods_interface = None
    time_got = None
    photo_got = None

    # Login
    def cb_auth_success(self, username):
        print 'Authed %s' % username
        self.methods_interface.call('ready')
        self.phase = True

    def cb_auth_fail(self, username, reason):
        print 'Auth Fail!', username, reason
        self.phase = False

    def login(self):
        self.methods_interface.call('auth_login', (USERNAME, PASSWORD))

    # Presence
    def cb_presence_updated_once(self, jid, last_seen):
        self.time_got = time.ctime(time.time() - last_seen)
        print 'Last seen @', self.time_got

    # Contacts
    def cb_contact_gotProfilePicture_once(self, jid, picture_id, image_path):
        phone_number = jid.split('@')[0]
        print 'Got', phone_number
        new_path = image_location(phone_number)
        shutil.copyfile(image_path, new_path)
        self.photo_got = new_path

    # Main
    def setup(self):
        #global cm, signals_interface, methods_interface

        Debugger.enabled = False

        self.cm = YowsupConnectionManager()

        self.cm.setAutoPong(True)

        self.signals_interface = self.cm.getSignalsInterface()
        self.methods_interface = self.cm.getMethodsInterface()

        self.signals_interface.registerListener('auth_success',
                                                self.cb_auth_success)
        self.signals_interface.registerListener('auth_fail', self.cb_auth_fail)

    def get_photo_time(self, phone_number):
        ''' phone number includes the country code'''
        self.setup()
        self.login()
        self.photo_got = None
        self.time_got = None
        while self.phase is None:
            time.sleep(0.5)

        self.signals_interface.registerListener('presence_updated',
                                                self.cb_presence_updated_once)

        jid = phone_number2jid(phone_number)
        self.methods_interface.call('presence_request', (jid, ))

        # only get image if doesn't already exist
        if os.path.isfile(image_location(phone_number)):
            self.photo_got = image_location(phone_number)
        else:
            self.signals_interface.registerListener(
                'contact_gotProfilePicture',
                self.cb_contact_gotProfilePicture_once)
            self.methods_interface.call('contact_getProfilePicture', (jid, ))

        timeout = 0
        while not (self.photo_got
                   and self.time_got) and timeout < TIMEOUT_SECS:
            time.sleep(0.25)
            timeout += 0.25

        return (self.photo_got, self.time_got)
Example #57
0
    def __init__(self, keepAlive=False, sendReceipts=True):
        self.sendReceipts = sendReceipts

        connectionManager = YowsupConnectionManager()
        connectionManager.setAutoPong(keepAlive)

        self.signalsInterface = connectionManager.getSignalsInterface()
        self.methodsInterface = connectionManager.getMethodsInterface()

        self.signalsInterface.registerListener("message_received",
                                               self.onMessageReceived)
        self.signalsInterface.registerListener("group_messageReceived",
                                               self.onGroupMessageReceived)
        self.signalsInterface.registerListener("auth_success",
                                               self.onAuthSuccess)
        self.signalsInterface.registerListener("auth_fail", self.onAuthFailed)
        self.signalsInterface.registerListener("disconnected",
                                               self.onDisconnected)

        self.signalsInterface.registerListener("presence_updated",
                                               self.onPresence_updated)
        self.signalsInterface.registerListener("presence_available",
                                               self.onPresence_available)
        self.signalsInterface.registerListener("presence_unavailable",
                                               self.onPresence_unavailable)

        self.signalsInterface.registerListener(
            "contact_gotProfilePicture", self.onContact_gotProfilePicture)

        self.signalsInterface.registerListener("profile_setStatusSuccess",
                                               self.onProfile_setStatusSuccess)
        self.signalsInterface.registerListener("status_dirty",
                                               self.onStatus_dirty)

        self.signalsInterface.registerListener(
            "contact_gotProfilePictureId", self.onContact_gotProfilePictureId)
        self.signalsInterface.registerListener(
            "contact_gotProfilePicture", self.onContact_gotProfilePicture)

        self.signalsInterface.registerListener("group_gotParticipants",
                                               self.onGroup_gotParticipants)

        self.cm = connectionManager
        self.db = MyZODB('Data/Data.fs')
        self.dbroot = self.db.dbroot
        if not self.dbroot.has_key("groups"):
            self.dbroot["groups"] = PersistentMapping()
        if not self.dbroot.has_key("messages"):
            self.dbroot["messages"] = PersistentMapping()
        if not self.dbroot.has_key("config"):
            self.dbroot["config"] = PersistentMapping()
        if not self.dbroot.has_key("features"):
            self.dbroot["features"] = PersistentMapping()
        if not self.dbroot.has_key("contacts"):
            self.dbroot["contacts"] = PersistentMapping()
        if not self.dbroot.has_key("chats"):
            self.dbroot['chats'] = PersistentMapping()
        if not self.dbroot['features'].has_key("responses"):
            self.dbroot['features']['responses'] = PersistentMapping()
        if not self.dbroot['features'].has_key("outbox"):
            self.dbroot['features']['outbox'] = PersistentList()
        self.outbox = self.dbroot['features']['outbox']
        self.outboxempty = False
        self.outboxprocessing = False
Example #58
0
class WWMCore:
    def __init__(self):

        self.connectionManager = YowsupConnectionManager()
        self.connectionManager.setAutoPong(Config.keepAlive)

        self.signalsInterface = self.connectionManager.getSignalsInterface()
        self.methodsInterface = self.connectionManager.getMethodsInterface()

        self.yowsupRanOnce = 0

        self.listener = None
        self.sender = None
        self.session = None
        self.httpRequestHandler = None
        self.instanceId = None
        self.status = Constants.INSTANCESTATUS_INITED

        self.dbi = DBI(
        )  #Use this for HTTP requests only. For every other case, Go ahead and create a different connection for now
        self.callbackDBI = CallbackDBI(
        )  #Extra care for preventing interference
        #self.dbiCursor = None
        self.yowsupStarted = 0

    #Just to keep track of the instances created
    def registerInstance(self, procId):
        timeNow = time.time()
        procId = os.getpid()
        status = Constants.INSTANCESTATUS_STARTED
        authStatus = Constants.AUTHSTATUS_IDLE
        self.dbiCursor.execute(
            "INSERT INTO pythoninstances (phone, procId, lastUpdated,status, authStatus) VALUES(%s, %s, %s, %s)",
            (self.session.phone, procId, timeNow, status, authStatus))
        #self.instanceId =

    def genAESKey(self, str):
        #md5 hash of reverse of str
        return hashlib.md5(str[::-1]).hexdigest()

    def initSender(self):
        if self.sender == None:
            self.sender = Sender(self)

    def initListener(self):
        if self.listener == None:
            self.listener = Listener(self)

    #deprecated
    def initDBI(self):
        print "Call to Core.initDBI which is deprecated"
        '''
		try:
			self.dbi = MySQLdb.connect('localhost','root','','webwhatsapp')
			self.dbiCursor = self.dbi.cursor(MySQLdb.cursors.DictCursor)
		except MySQLdb.Error, e:
			raise WWMException("MySQL could not connect: %s" %e)
		'''

    def getDBICursor(self):  #returns dbi and cursor
        return self.dbiCursor

    #This method is called from session
    def initSession(self, phone, AESKey):
        print "Core.initSession called"
        if self.session == None or self.session.authStatus == Constants.AUTHSTATUS_IDLE:  #self.yowsupStarted==0 and
            self.yowsupStarted = 1
            if self.session == None:
                self.session = Session(self, phone, AESKey)
                self.session.getAuthData()
                self.signalsInterface.registerListener("disconnected",
                                                       self.onDisconnected)
            self.session.login()
        else:
            print "\nPretty sure yowsup is already started."

    def authCallback(self, isSuccess):  #Called manually from Session
        if isSuccess:
            self.yowsupRanOnce == 1  #Very important flag

            #This is done earlier in initSession with the above flag to differentiate between pre auth disco and post auth disco
            #self.signalsInterface.registerListener("disconnected", self.onDisconnected)

            self.status = Constants.INSTANCESTATUS_RUNNING
            self.yowsupStarted = 1
        else:
            self.yowsupStarted = 0

    def onDisconnected(self, reason):
        print "Core.onDisconnected called"

        if self.status == Constants.INSTANCESTATUS_WRAPPEDUP:
            print "Core.onDisconnected: Disconnected and wrapping up"
            return  #And die

        self.yowsupStarted = 0
        self.session.authStatus = Constants.AUTHSTATUS_IDLE
        #self.session.updateAuthStatus(Constants.AUTHSTATUS_IDLE)

        if self.yowsupRanOnce == 0:
            print "Could not connect. Rerun startYowsup to try again"
            return

        self.addNotification(self.session.phone,
                             "Yowsup got disconnected. Will retry")

        sleepInterval = Config.conRetry_interval
        print "Disconnected because %s" % (reason)
        print "Retrying every %d seconds" % (sleepInterval)
        retryCount = 1
        retryMax = Config.conRetry_maxRetry

        while self.session.authStatus != Constants.AUTHSTATUS_LOGGEDIN and retryCount <= retryMax:
            time.sleep(sleepInterval)
            print "Retry #%d" % (retryCount)
            self.session.login()
            retryCount = retryCount + 1

        if self.session.authStatus == Constants.AUTHSTATUS_LOGGEDIN:
            print "Re-Logged in successfully!"
        else:
            self.addNotification(
                self.session.phone,
                "Could not login. Retries failed. Killing yowsup")
            print "Can't login. Killing yowsup"
            self.connectionManager.disconnect("Login retries failed")
            self.status = Constants.INSTANCESTATUS_IDLE  #So he can try again manually if he wants

    def getStatus(self):
        #Create a dictionary and return it
        status = {}

        status["Core"] = [("yowsupStarted", self.yowsupStarted),
                          ("instanceStatus", self.status)]

        if self.session == None:
            status["Session"] = [("inited", "No")]
        else:
            status["Session"] = [("inited", "Yes"),
                                 ("AuthStatus", self.session.authStatus)]

        return status

    def addNotification(self, phone, reason):
        #lol
        return

    def wrapUp(self, reason):
        #Write some code to wrap up
        self.status = Constants.INSTANCESTATUS_WRAPPEDUP

        with BlockingDBICursor(self.dbi) as dbiCursor:
            dbiCursor.execute(
                "UPDATE pythonInstances  set status=%s WHERE instanceId=%s ",
                (self.status, self.instanceId))

        self.connectionManager.disconnect(reason)
        self.yowsupStarted = 0

    def addUser(self, phone, email, name, password, whatsapp_pass):
        AESKey = self.genAESKey(password)
        hash = hashlib.md5(password).hexdigest()
        try:
            dbiCursor = self.dbi.getCursor()
            dbiCursor.execute(
                "INSERT INTO users (phone,email,name,password,whatsapp_pass) VALUES(%s,%s,%s,%s,AES_ENCRYPT(%s,%s))",
                (phone, email, name, hash, whatsapp_pass, AESKey))
            self.dbi.commit()
            self.dbi.done()
        except MySQLdb.Error, e:
            print "Exception: %s" % e