def disco_main(run=False): """ Creates an argument parser and parses a standard set of command line arguments, creating a new :class:`Client`. Returns ------- :class:`Client` A new Client from the provided command line arguments """ from disco.client import Client, ClientConfig from disco.bot import Bot, BotConfig from disco.util.logging import setup_logging # Parse out all our command line arguments args = parser.parse_args() # Create the base configuration object if args.config: config = ClientConfig.from_file(args.config) else: if os.path.exists('config.json'): config = ClientConfig.from_file('config.json') elif os.path.exists('config.yaml'): config = ClientConfig.from_file('config.yaml') else: config = ClientConfig() for arg_key, config_key in six.iteritems(CONFIG_OVERRIDE_MAPPING): if getattr(args, arg_key) is not None: setattr(config, config_key, getattr(args, arg_key)) # Setup the auto-sharder if args.shard_auto: from disco.gateway.sharder import AutoSharder AutoSharder(config).run() return # Setup logging based on the configured level setup_logging(level=getattr(logging, config.log_level.upper())) # Build out client object client = Client(config) # If applicable, build the bot and load plugins bot = None if args.run_bot or hasattr(config, 'bot'): bot_config = BotConfig(config.bot) if hasattr(config, 'bot') else BotConfig() if not hasattr(bot_config, 'plugins'): bot_config.plugins = args.plugin else: bot_config.plugins += args.plugin bot = Bot(client, bot_config) if run: (bot or client).run_forever() return bot or client
def disco_main(run=False): """ Creates an argument parser and parses a standard set of command line arguments, creating a new :class:`Client`. Returns ------- :class:`Client` A new Client from the provided command line arguments """ args = parser.parse_args() from disco.client import Client, ClientConfig from disco.bot import Bot, BotConfig from disco.util.token import is_valid_token from disco.util.logging import setup_logging if os.path.exists(args.config): config = ClientConfig.from_file(args.config) else: config = ClientConfig() for k, v in six.iteritems(vars(args)): if hasattr(config, k) and v is not None: setattr(config, k, v) if not is_valid_token(config.token): print('Invalid token passed') return if args.shard_auto: from disco.gateway.sharder import AutoSharder AutoSharder(config).run() return if hasattr(config, 'logging_format'): setup_logging(level=logging.INFO, format=config.logging_format) else: setup_logging(level=logging.INFO) client = Client(config) bot = None if args.run_bot or hasattr(config, 'bot'): bot_config = BotConfig(config.bot) if hasattr(config, 'bot') else BotConfig() if not hasattr(bot_config, 'plugins'): bot_config.plugins = args.plugin else: bot_config.plugins += args.plugin bot = Bot(client, bot_config) if run: (bot or client).run_forever() return (bot or client)
def disco_main(run=False): """ Creates an argument parser and parses a standard set of command line arguments, creating a new :class:`Client`. Returns ------- :class:`Client` A new Client from the provided command line arguments """ args = parser.parse_args() from disco.client import Client, ClientConfig from disco.bot import Bot, BotConfig from disco.util.token import is_valid_token from disco.util.logging import setup_logging if os.path.exists(args.config): config = ClientConfig.from_file(args.config) else: config = ClientConfig() config.manhole_enable = args.manhole if args.manhole_bind: config.manhole_bind = args.manhole_bind for k, v in six.iteritems(vars(args)): if hasattr(config, k) and v is not None: setattr(config, k, v) if not is_valid_token(config.token): print('Invalid token passed') return if args.shard_auto: from disco.gateway.sharder import AutoSharder AutoSharder(config).run() return # TODO: make configurable setup_logging(level=getattr(logging, args.log_level.upper())) client = Client(config) bot = None if args.run_bot or hasattr(config, 'bot'): bot_config = BotConfig(config.bot) if hasattr(config, 'bot') else BotConfig() if not hasattr(bot_config, 'plugins'): bot_config.plugins = args.plugin else: bot_config.plugins += args.plugin if args.http_bind: bot_config.http_enabled = True host, port = args.http_bind.split(':', 1) bot_config.http_host = host bot_config.http_port = int(port) bot = Bot(client, bot_config) if run: (bot or client).run_forever() return (bot or client)
def disco_main(run=False): """ Creates an argument parser and parses a standard set of command line arguments, creating a new :class:`Client`. Returns ------- :class:`Client` A new Client from the provided command line arguments """ from disco.client import Client, ClientConfig from disco.bot import Bot, BotConfig from disco.util.logging import setup_logging, LOG_FORMAT from bot.base import bot args = bot.local.disco # Create the base configuration object if args.config: config = ClientConfig.from_file(args.config) else: config = ClientConfig(args.to_dict()) for arg_key, config_key in six.iteritems(CONFIG_OVERRIDE_MAPPING): if getattr(args, arg_key) is not None: setattr(config, config_key, getattr(args, arg_key)) # Setup the auto-sharder if args.shard_auto: from disco.gateway.sharder import AutoSharder AutoSharder(config).run() return # Setup logging based on the configured level if not os.path.exists("logs"): os.makedirs("logs") file_handler = logging.FileHandler("logs/bot.log") file_handler.setFormatter(logging.Formatter(LOG_FORMAT)) file_handler.setLevel(config.log_level.upper()) stream_handler = logging.StreamHandler() setup_logging( handlers=(file_handler, stream_handler), level=getattr(logging, config.log_level.upper()), ) # Build out client object client = Client(config) # If applicable, build the bot and load plugins bot = None if args.run_bot or hasattr(config, 'bot'): bot_config = BotConfig(config.bot.to_dict()) if hasattr( config, 'bot') else BotConfig() if not hasattr(bot_config, 'plugins'): bot_config.plugins = args.plugin else: bot_config.plugins += args.plugin bot = Bot(client, bot_config) if run: (bot or client).run_forever() return (bot or client)