def run(self): mess = None to = None phone = None passw = None with open(appPath + "/config.cfg") as f: for line in f: if line.find("phone number:", 0) == 0: phone = line[13:] phone = phone.strip() elif line.find("password:"******"send_message_startup:", 0) == 0: mess = line[21:-1] mess = "'" + mess + "'" elif line.find("allowed1:", 0) == 0: to = line[9:-1] CREDENTIALS = (phone, passw) print("/send.py " + to + " " + mess) p = subprocess.Popen(appPath + "/send.py " + to + " " + mess, stdout=subprocess.PIPE, shell=True) (output, err) = p.communicate() while True: layers = ( DaemonLayer, ( YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, ), ) + YOWSUP_CORE_LAYERS stack = YowStack(layers) stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS) stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0]) stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN) stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource()) stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) interface = stack.getLayer(6) interface.initialize(appPath) try: stack.loop() except: pass
class Whatsapp(): def __init__(self, smarthome, account, password, trusted=None, logic='Whatsapp', cli_mode='False'): # Set Plugin Attributes self._sh = smarthome self._credentials = (account, password.encode('utf-8')) self._trusted = trusted self._logic = logic self._run = False if cli_mode == 'True': self._cli_mode = True return else: self._cli_mode = False # Yowsup Layers self._layers = ( SmarthomeLayer, YowParallelLayer((YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowIbProtocolLayer, YowIqProtocolLayer, YowNotificationsProtocolLayer, YowPresenceProtocolLayer)), YowCoderLayer, # YowLoggerLayer, YowCryptLayer, YowStanzaRegulator, YowNetworkLayer) # Yowsup Properties self._stack = YowStack(self._layers) self._stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, self._credentials) self._stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0]) self._stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN) self._stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource()) # Connect Yowsup self._stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) # Get SmarthomeLayer and set this Plugin self._SmarthomeLayer = self._stack.getLayer(len(self._stack._YowStack__stack) - 1) self._SmarthomeLayer.setPlugin(self) def run(self): self._run = True if self._cli_mode == True: return try: self._stack.loop(timeout = 0.5, discrete = 0.5) except AuthError as e: logger.info("Authentication Error!") def stop(self): self._run = False if self._cli_mode == True: return logger.info("Shutting Down WhatsApp Client") disconnectEvent = YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT) self._stack.broadcastEvent(disconnectEvent) def parse_item(self, item): return None def parse_logic(self, logic): pass def __call__(self, message, phoneNumber=None): if phoneNumber == None: try: phoneNumber = self._trusted.split(' ')[0] except AttributeError: logger.error("Error sending Whatsapp Message") except IndentationError: logger.error("Error sending Whatsapp Message") if self._cli_mode == True: subprocess.call(['/usr/local/bin/yowsup-cli', 'demos', '-l', self._credentials[0] + ':' + self._credentials[1].decode(), '-s', phoneNumber, message]) return self._SmarthomeLayer.sendMsg(message, phoneNumber) def message_received(self, message, sender): try: self._sh.trigger(name=self._logic, value=message, source=sender.split('@')[0]) except AttributeError: logger.error("Error receiving Whatsapp Message") except IndentationError: logger.error("Error receiving Whatsapp Message")
self.toLower(outgoingMessage) def normalizeJid(self, number): if '@' in number: return number return "*****@*****.**" % number if __name__ == "__main__": layers = (TestLayer, (YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer)) + YOWSUP_CORE_LAYERS stack = YowStack(layers) stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS) #setting credentials stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0]) #whatsapp server address stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN) stack.setProp(YowCoderLayer.PROP_RESOURCE, YowConstants.RESOURCE) #info about us as WhatsApp client stack.broadcastEvent(YowLayerEvent( YowNetworkLayer.EVENT_STATE_CONNECT)) #sending the connect signal #stack.loop() layer = stack.getLayer(5) layer.message_send("919894324780", "TestMessage")
YowStanzaRegulator, YowNetworkLayer ) HOST = config["tg-cli-host"] PORT = config["tg-cli-port"] receiver=automatic.receiver.Receiver(host=HOST, port=PORT) sender=Sender(host=HOST, port=PORT) class TG(object): #quick and dirty. receiver = None sender = None TG.sender = sender TG.receiver = receiver stack = YowStack(layers) stack.setProp(EchoLayer.PROP_TELEGRAM, TG) stack.getLayer(-1).start() #EchoLayer, the highest element. stack.setProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS, CREDENTIALS) #setting credentials stack.setProp(YowNetworkLayer.PROP_ENDPOINT, YowConstants.ENDPOINTS[0]) #whatsapp server address stack.setProp(YowCoderLayer.PROP_DOMAIN, YowConstants.DOMAIN) stack.setProp(YowCoderLayer.PROP_RESOURCE, env.CURRENT_ENV.getResource()) #info about us as WhatsApp client #EchoLayer.set_tg(tg) #receiver_thread = threading.Thread(target=stack.loop, args=()) #this is the program mainloop #receiver_thread.daemon = True # exit if script reaches end. #receiver_thread.start() receiver.start() while 1: stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) #sending the connect signal try: stack.loop() #this is the program mainloop except: