Exemple #1
0
class CLIProtocol(LineReceiver):
    """
    A bare-bones protocol meant for imitating a single-user session with
    Hamper over stdio.
    """

    delimiter = "\n"

    def __init__(self, config):
        self.loader = PluginLoader()
        self.loader.config = config

        self.history = {}


        if 'db' in config:
            print('Loading db from config: ' + config['db'])
            db_engine = sqlalchemy.create_engine(config['db'])
        else:
            print('Using in-memory db')
            db_engine = sqlalchemy.create_engine('sqlite:///:memory:')
        DBSession = orm.sessionmaker(db_engine)
        session = DBSession()

        self.loader.db = DB(db_engine, session)

        # Load all plugins mentioned in the configuration. Allow globbing.
        print "Loading plugins", config["plugins"]
        plugins = getPlugins(BaseInterface, package=hamper.plugins)
        for plugin in plugins:
            for pattern in config["plugins"]:
                if fnmatch(plugin.name, pattern):
                    self.loader.registerPlugin(plugin)

    def connectionLost(self, reason):
        reactor.stop()

    def lineReceived(self, line):
        comm = {
            'raw_message': line,
            'message': line,
            'raw_user': "******",
            'user': "******",
            'target': "hamper",
            'channel': "hamper",
            'directed': True,
            'pm': True,
        }

        self.loader.runPlugins("chat", "message", self, comm)

    def reply(self, comm, message):
        print "Sending", message
        self.sendLine(message)
Exemple #2
0
class CLIProtocol(LineReceiver):
    """
    A bare-bones protocol meant for imitating a single-user session with
    Hamper over stdio.
    """

    delimiter = "\n"

    def __init__(self, config):
        self.loader = PluginLoader()
        self.loader.config = config

        self.history = {}

        if 'db' in config:
            print('Loading db from config: ' + config['db'])
            db_engine = sqlalchemy.create_engine(config['db'])
        else:
            print('Using in-memory db')
            db_engine = sqlalchemy.create_engine('sqlite:///:memory:')
        DBSession = orm.sessionmaker(db_engine)
        session = DBSession()

        self.loader.db = DB(db_engine, session)

        # Load all plugins mentioned in the configuration. Allow globbing.
        print "Loading plugins", config["plugins"]
        plugins = getPlugins(BaseInterface, package=hamper.plugins)
        for plugin in plugins:
            for pattern in config["plugins"]:
                if fnmatch(plugin.name, pattern):
                    self.loader.registerPlugin(plugin)

    def connectionLost(self, reason):
        reactor.stop()

    def lineReceived(self, line):
        comm = {
            'raw_message': line,
            'message': line,
            'raw_user': "******",
            'user': "******",
            'target': "hamper",
            'channel': "hamper",
            'directed': True,
            'pm': True,
        }

        self.loader.runPlugins("chat", "message", self, comm)

    def reply(self, comm, message):
        print "Sending", message
        self.sendLine(message)
Exemple #3
0
    def __init__(self, config):
        self.loader = PluginLoader()
        self.loader.config = config

        self.history = {}


        if 'db' in config:
            print('Loading db from config: ' + config['db'])
            db_engine = sqlalchemy.create_engine(config['db'])
        else:
            print('Using in-memory db')
            db_engine = sqlalchemy.create_engine('sqlite:///:memory:')
        DBSession = orm.sessionmaker(db_engine)
        session = DBSession()

        self.loader.db = DB(db_engine, session)

        # Load all plugins mentioned in the configuration. Allow globbing.
        print "Loading plugins", config["plugins"]
        plugins = getPlugins(BaseInterface, package=hamper.plugins)
        for plugin in plugins:
            for pattern in config["plugins"]:
                if fnmatch(plugin.name, pattern):
                    self.loader.registerPlugin(plugin)
Exemple #4
0
    def __init__(self, config):
        self.loader = PluginLoader()
        self.loader.config = config

        self.history = {}

        if 'db' in config:
            print('Loading db from config: ' + config['db'])
            db_engine = sqlalchemy.create_engine(config['db'])
        else:
            print('Using in-memory db')
            db_engine = sqlalchemy.create_engine('sqlite:///:memory:')
        DBSession = orm.sessionmaker(db_engine)
        session = DBSession()

        self.loader.db = DB(db_engine, session)

        # Load all plugins mentioned in the configuration. Allow globbing.
        print "Loading plugins", config["plugins"]
        plugins = getPlugins(BaseInterface, package=hamper.plugins)
        for plugin in plugins:
            for pattern in config["plugins"]:
                if fnmatch(plugin.name, pattern):
                    self.loader.registerPlugin(plugin)
Exemple #5
0
    def __init__(self, config):
        self.loader = PluginLoader(config)

        self.history = {}

        if 'db' in config:
            print('Loading db from config: ' + config['db'])
            db_engine = sqlalchemy.create_engine(config['db'])
        else:
            print('Using in-memory db')
            db_engine = sqlalchemy.create_engine('sqlite:///:memory:')
        DBSession = orm.sessionmaker(db_engine)
        session = DBSession()

        self.loader.db = DB(db_engine, session)

        # Load all plugins mentioned in the configuration. Allow globbing.
        print "Loading plugins", config["plugins"]
        self.loader.loadAll()
Exemple #6
0
class CLIProtocol(LineReceiver):
    """
    A bare-bones protocol meant for imitating a single-user session with
    Hamper over stdio.
    """

    delimiter = "\n"

    def __init__(self, config):
        self.loader = PluginLoader(config)

        self.history = {}

        if 'db' in config:
            print('Loading db from config: ' + config['db'])
            db_engine = sqlalchemy.create_engine(config['db'])
        else:
            print('Using in-memory db')
            db_engine = sqlalchemy.create_engine('sqlite:///:memory:')
        DBSession = orm.sessionmaker(db_engine)
        session = DBSession()

        self.loader.db = DB(db_engine, session)

        # Load all plugins mentioned in the configuration. Allow globbing.
        print "Loading plugins", config["plugins"]
        self.loader.loadAll()

    def connectionLost(self, reason):
        if reactor.running:
            reactor.stop()

    def lineReceived(self, line):
        comm = {
            'raw_message': line,
            'message': line,
            'raw_user': "******",
            'user': "******",
            'mask': "",
            'target': "hamper",
            'channel': "hamper",
            'directed': True,
            'pm': True,
        }

        self.loader.runPlugins("chat", "message", self, comm)

    def _sendLine(self, user, message):
        if user != "hamper":
            message = "[%s] %s" % (user, message)
        self.sendLine(message)

    # Stub out some IRCClient methods

    def quit(self):
        self.stopProducing()

    def msg(self, user, message, length=None):
        for line in message.splitlines():
            self._sendLine(user, line)

    def notice(self, user, message):
        self._sendLine(user, '** ' + message)


    # CommanderProtocol methods

    def reply(self, comm, message, encode=True, tag=None, vars=[], kwvars={}):
        kwvars = kwvars.copy()
        kwvars.update(comm)
        message = message.format(*vars, **kwvars)
        if encode:
            message = message.encode('utf-8')
        self.msg(comm['channel'], message)

    # The help plugin expects bot.factory.loader to exist.
    @property
    def factory(self):
        return self