Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
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)
Esempio n. 6
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)
Esempio n. 7
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)
Esempio n. 8
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)