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
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
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'
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!'])
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
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"))
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])