def onEvent(self, layerEvent): ''' Handles disconnection events and reconnects if we timed out.''' # pylint: disable=invalid-name logging.debug('Event %s received', layerEvent.getName()) if layerEvent.getName() == YowNetworkLayer.EVENT_STATE_DISCONNECTED: reason = layerEvent.getArg('reason') logging.warning(_('Connection lost: {}').format(reason)) registry.fire_event(registry.BOT_DISCONNECTED, self) if reason == 'Connection Closed': time.sleep(.5) logging.warning(_('Reconnecting')) self.getStack().broadcastEvent( YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) self.connected = False return True else: logging.error('Fatal disconnect: %s', reason) if self.connected and reason != 'Requested': self.stop() return False elif layerEvent.getName() == YowNetworkLayer.EVENT_STATE_CONNECTED: logging.info('Connection established.') self.connected = True self.set_online() registry.fire_event(registry.BOT_CONNECTED, self) return False
def onEvent(self, layerEvent): ''' Handles disconnection events and reconnects if we timed out.''' # pylint: disable=invalid-name logging.debug('Event %s received', layerEvent.getName()) if layerEvent.getName() == YowNetworkLayer.EVENT_STATE_DISCONNECTED: reason = layerEvent.getArg('reason') logging.warning(_('Connection lost: {}').format(reason)) registry.fire_event(registry.BOT_DISCONNECTED, self) if reason == 'Connection Closed': time.sleep(.5) logging.warning(_('Reconnecting')) self.getStack().broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) self.connected = False return True else: logging.error('Fatal disconnect: %s', reason) if self.connected and reason != 'Requested': self.stop() return False elif layerEvent.getName() == YowNetworkLayer.EVENT_STATE_CONNECTED: logging.info('Connection established.') self.connected = True self.set_online() registry.fire_event(registry.BOT_CONNECTED, self) return False
def onMessage(self, message): ''' Handles incoming messages and responds to them if needed. ''' # pylint: disable=invalid-name logging.debug('Message %s from %s received, content: %s', message.getId(), message.getFrom(), message.getBody()) receipt = OutgoingReceiptProtocolEntity(message.getId(), message.getFrom(), 'read', message.getParticipant()) self.toLower(receipt) time.sleep(0.2) self.react(message) registry.fire_event(registry.BOT_MSG_RECEIVE, self, message)
def onMessage(self, message): ''' Handles incoming messages and responds to them if needed. ''' # pylint: disable=invalid-name logging.debug('Message %s from %s received, content: %s', message.getId(), message.getFrom(), message.getBody()) receipt = OutgoingReceiptProtocolEntity( message.getId(), message.getFrom(), 'read', message.getParticipant()) self.toLower(receipt) time.sleep(0.2) self.react(message) registry.fire_event(registry.BOT_MSG_RECEIVE, self, message)
def stop(self, restart=False): ''' Shut down the bot. ''' logging.info('Shutting down via stop method.') # Execute shutdown hooks registry.fire_event(registry.BOT_SHUTDOWN, self) self.set_offline() try: self.scheduler.shutdown() except SchedulerNotRunningError: pass self.rpcserver.shutdown() self.rpcserver.server_close() if self.connected: self.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT)) if restart: sys.exit(3) sys.exit(0)
def stop(self, restart=False): ''' Shut down the bot. ''' logging.info('Shutting down via stop method.') # Execute shutdown hooks registry.fire_event(registry.BOT_SHUTDOWN, self) self.set_offline() try: self.scheduler.shutdown() except SchedulerNotRunningError: pass self.rpcserver.shutdown() self.rpcserver.server_close() if self.connected: self.broadcastEvent( YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT)) if restart: sys.exit(3) sys.exit(0)
def __init__(self, config, scheduler): super(self.__class__, self).__init__() self.connected = False self.config = config self.scheduler = scheduler logging.info('Current working directory: %s', os.getcwd()) try: logging.info('Database location: %s', config['Yowsup']['database']) self.conn = sqlite3.connect(config['Yowsup']['database'], detect_types=sqlite3.PARSE_DECLTYPES, check_same_thread=False) self.conn.text_factory = str self.cursor = self.conn.cursor() except KeyError: logging.critical('Database could not be loaded!') # Group list holder self.known_groups = [] # Start rpc listener host = 'localhost' port = 10666 self.rpcserver = rpc.ThreadedTCPServer( (host, port), rpc.ThreadedTCPRequestHandler, self) server_thread = threading.Thread(target=self.rpcserver.serve_forever) server_thread.daemon = True server_thread.start() # Start the passed scheduler self.scheduler.start() self.functions = {} plugins.load_plugins() self.functions.update(registry.COMMAND_DICT) # Execute startup hooks registry.fire_event(registry.BOT_START, self)
def __init__(self, config, scheduler): super(self.__class__, self).__init__() self.connected = False self.config = config self.scheduler = scheduler logging.info('Current working directory: %s', os.getcwd()) try: logging.info('Database location: %s', config['Yowsup']['database']) self.conn = sqlite3.connect(config['Yowsup']['database'], detect_types=sqlite3.PARSE_DECLTYPES, check_same_thread=False) self.conn.text_factory = str self.cursor = self.conn.cursor() except KeyError: logging.critical('Database could not be loaded!') # Group list holder self.known_groups = [] # Start rpc listener host = 'localhost' port = 10666 self.rpcserver = rpc.ThreadedTCPServer((host, port), rpc.ThreadedTCPRequestHandler, self) server_thread = threading.Thread(target=self.rpcserver.serve_forever) server_thread.daemon = True server_thread.start() # Start the passed scheduler self.scheduler.start() self.functions = {} plugins.load_plugins() self.functions.update(registry.COMMAND_DICT) # Execute startup hooks registry.fire_event(registry.BOT_START, self)