Example #1
0
def run(argv=None):  # pragma: no cover
    """Run OneBot from a config file

    Usage: onebot [options] <config>...

    Options::

        --logdir DIRECTORY  Log directory to use instead of stderr
        --logdate           Show datetimes in console output
        -r,--raw            Show raw IRC log on the console
        -v,--verbose        Increase verbosity
        -d,--debug          Add debug commands/utils
    """
    import sys
    import docopt
    import textwrap
    import os
    from irc3 import utils, config
    args = argv or sys.argv[1:]
    args = docopt.docopt(textwrap.dedent(run.__doc__), args)
    cfg = utils.parse_config('bot', *args['<config>'])
    cfg.update(
        verbose=args['--verbose'],
        debug=args['--debug'])

    if args['--logdir'] or 'logdir' in cfg:
        logdir = os.path.expanduser(args['--logdir'] or cfg.get('logdir'))
        OneBot.logging_config = config.get_file_config(logdir)

    bot = OneBot.from_config(cfg)

    bot.run()

    if argv:
        return bot
Example #2
0
def run(argv=None):  # pragma: no cover
    """Run OneBot from a config file

    Usage: onebot [options] <config>...

    Options::

        --logdir DIRECTORY  Log directory to use instead of stderr
        --logdate           Show datetimes in console output
        -r,--raw            Show raw IRC log on the console
        -v,--verbose        Increase verbosity
        -d,--debug          Add debug commands/utils
    """
    import sys
    import docopt
    import textwrap
    import os
    from irc3 import utils, config
    args = argv or sys.argv[1:]
    args = docopt.docopt(textwrap.dedent(run.__doc__), args)
    cfg = utils.parse_config('bot', *args['<config>'])
    cfg.update(verbose=args['--verbose'], debug=args['--debug'])

    if args['--logdir'] or 'logdir' in cfg:
        logdir = os.path.expanduser(args['--logdir'] or cfg.get('logdir'))
        OneBot.logging_config = config.get_file_config(logdir)

    bot = OneBot.from_config(cfg)

    bot.run()

    if argv:
        return bot
Example #3
0
    def __init__(self, *args, **kwargs):
        """Initializes configuration settings."""
        super(Config, self).__init__(*args, **kwargs)

        # Always load the default settings.
        file_name = 'settings.default.ini'
        file_path = path.dirname(path.abspath(__file__))
        full_path = path.join(file_path, file_name)
        base_conf = utils.parse_config('bot', full_path)
        self.update(**base_conf)

        # If there is an user defined settings file.
        user_path = path.join(file_path, file_name.replace('.default', ''))
        user_conf = (utils.parse_config('bot', user_path)
                     if path.isfile(user_path) else {})
        self.update(**user_conf)

        # Override settings using user defined environment variables.
        env_vars = {
            key: value
            for key, value in filter(lambda key_val: key_val[
                1], [('host', config('IRC_HOST', default='')
                      ), ('port', config('IRC_PORT', default=0, cast=int)
                          ), ('nick', config('IRC_NICK', default='')),
                     ('username', config('IRC_USERNAME', default='')
                      ), ('password', config('IRC_PASSWORD', default='')),
                     ('autojoins',
                      config('IRC_AUTOJOINS', default='', cast=Csv())
                      ), ('database', config('DATABASE_URL', default='')),
                     ('ssl', config('IRC_SSL', default=False, cast=bool)
                      ), ('ssl_verify', config('IRC_SSL_VERIFY', default='')),
                     ('sasl_username',
                      config('IRC_SASL_USERNAME', default='')),
                     ('sasl_password',
                      config('IRC_SASL_PASSWORD', default=''))])
        }
        self.update(**env_vars)

        # For the admin list it is necessary
        # to convert nicknames into masks
        # and add one by one to a sub-dict.
        admins = config('IRC_ADMINS', default='', cast=Csv())
        admkey = 'irc3.plugins.command.masks'
        if admins:
            for admin in admins:
                self[admkey][f'{admin}!*@*'] = 'all_permissions'
Example #4
0
 def test_template(self):
     main(nick='mybot')
     files = sorted(os.listdir(self.wd))
     assert files == ['config.ini', 'mybot_plugin.py']
     config = utils.parse_config('bot', 'config.ini')
     bot = self.callFTU(**config)
     bot.dispatch(':gawel!n@h JOIN #mybot')
     self.assertSent(['PRIVMSG #mybot :Hi gawel!'])
     bot.dispatch(':yournick!n@h PRIVMSG #mybot :!echo Hi!')
     self.assertSent(['PRIVMSG #mybot :Hi!'])
Example #5
0
 def test_template(self):
     main(nick='mybot')
     files = sorted(os.listdir(self.wd))
     assert files == ['config.ini', 'mybot_plugin.py']
     config = utils.parse_config('bot', 'config.ini')
     bot = self.callFTU(**config)
     bot.dispatch(':gawel!n@h JOIN #mybot')
     self.assertSent(['PRIVMSG #mybot :Hi gawel!'])
     bot.dispatch(':yournick!n@h PRIVMSG #mybot :!echo Hi!')
     self.assertSent(['PRIVMSG #mybot :Hi!'])
Example #6
0
def _from_argv(cls, argv=None, **kwargs) -> dict:
    prog = cls.server and 'irc3d' or 'irc3'
    # TODO: Add in publish ports and all that jazz.
    doc = """
    Run an __main__.py instance from a config file

    Usage: __main__.py [options] <config>...

    Options:
    -h, --help          Display this help and exit
    --version           Output version information and exit
    --logdir DIRECTORY  Log directory to use instead of stderr
    --logdate           Show datetimes in console output
    --host HOST         Server name or ip
    --port PORT         Server port
    -v,--verbose        Increase verbosity
    -r,--raw            Show raw irc log on the console
    -d,--debug          Add some debug commands/utils
    """
    import os
    import docopt
    import textwrap
    args = argv or sys.argv[1:]
    args = docopt.docopt(doc, args, version=version)
    cfg = utils.parse_config(
        cls.server and 'server' or 'bot', *args['<config>'])
    cfg.update(
        verbose=args['--verbose'],
        debug=args['--debug'],
    )
    cfg.update(kwargs)
    if args['--host']:  # pragma: no cover
        host = args['--host']
        cfg['host'] = host
        if host in ('127.0.0.1', 'localhost'):
            cfg['ssl'] = False
    if args['--port']:  # pragma: no cover
        cfg['port'] = args['--port']
    if args['--logdir'] or 'logdir' in cfg:
        logdir = os.path.expanduser(args['--logdir'] or cfg.get('logdir'))
        cls.logging_config = config.get_file_config(logdir)
    if args['--logdate']:  # pragma: no cover
        fmt = cls.logging_config['formatters']['console']
        fmt['format'] = config.TIMESTAMPED_FMT
    if args.get('--help-page'):  # pragma: no cover
        for v in cls.logging_config['handlers'].values():
            v['level'] = 'ERROR'
    if args['--raw']:
        cfg['raw'] = True

    return cfg
Example #7
0
def main():
    from roboto import model, http, loop, disc, config, commands

    # Parse & load config file
    config.update(parse_config('bot', "config.ini"))

    # Connect & Init DB
    model.init_db(config)

    # Load IRC Bot
    irc_bot = IrcBot.from_config(config, loop=loop)
    irc_bot.run(forever=False)

    # HTTP Server for playlist
    http.setup()

    # Start background task queue processor
    asyncio.ensure_future(commands.dispatcher.task_consumer(), loop=loop)

    # Start discord client
    disc.dc.run(config.get("discord_token"))
Example #8
0
from irc3 import IrcBot, utils
import sys
from threading import Thread

CFG = utils.parse_config('ipdb', 'ipdb.ini')

IRC_CFG = {
    **utils.parse_config('bot', 'irclib/config.ini'),
    **CFG['irc'], 'autojoins': [CFG['adminChannel']]
}

bot = server = None

if __name__ == "__main__":
    bot = IrcBot(**IRC_CFG)
    bot.include('irc3.plugins.command')
    bot.include('irclib.plugins.ipdb')
    # bot.run()
    bot_thread = Thread(target=bot.run)
    bot_thread.daemon = True
    bot_thread.start()
    while 1:
        raw_input = input('INPUT:')
        try:
            eval(raw_input)
        except:
            print("Unexpected error:", sys.exc_info()[0])