#!/usr/bin/env python3 import os import sys import yaml import tooncher import tooncher.controls def run(username, config_path, engine_path=None, validate_ssl_certs=True, cpu_limit_percent=None, enable_extended_keyboard_controls=False, extended_keyboard_control_toggle_keysym_name=None, engine_window_name=None): if os.path.exists(config_path): with open(config_path) as f: config = yaml.safe_load(f.read()) else: config = {} if engine_path is None: if 'engine_path' in config: engine_path = config['engine_path'] else: raise Exception('missing path to toontown engine') accounts = config['accounts'] if 'accounts' in config else [] for account in accounts: if account['username'] == username: tooncher.launch( engine_path=engine_path, username=account['username'], password=account['password'], validate_ssl_certs=validate_ssl_certs, cpu_limit_percent=cpu_limit_percent, enable_extended_keyboard_controls=enable_extended_keyboard_controls, extended_keyboard_control_toggle_keysym_name=extended_keyboard_control_toggle_keysym_name, engine_window_name=engine_window_name, ) def _init_argparser(): import argparse argparser = argparse.ArgumentParser(description=None) argparser.add_argument('username') argparser.add_argument( '--config', '-c', metavar='path', dest='config_path', help='path to config file (default: %(default)s)', default=os.path.join(os.path.expanduser('~'), '.tooncher'), ) argparser.add_argument( '--engine-path', '-e', metavar='path', dest='engine_path', default=tooncher.TOONTOWN_ENGINE_DEFAULT_PATH, help='\n'.join([ 'path to toontown engine.', 'this overrides the one specified in config file', '(default: %(default)s)', ]), ) argparser.add_argument( '--no-ssl-cert-validation', '-k', dest='validate_ssl_certs', help='do not validate ssl certificates', action='store_false', ) argparser.add_argument( '--cpu-limit', dest='cpu_limit_percent', type=int, default=None, help='maximally allowed cpu usage in percent' + ' (requires cpulimit command, default: %(default)s)', ) argparser.add_argument( '--extended-controls', dest='enable_extended_keyboard_controls', action='store_true', help='enable extended keyboard controls' + ', e.g. walk with WASD' + ' (requires xlib for python, default: %(default)s)', ) argparser.add_argument( '--extended-controls-toggle', metavar='KEYSYM_NAME', dest='extended_keyboard_control_toggle_keysym_name', default=tooncher.controls.EXTENDED_CONTROLS_DEFAULT_TOGGLE_KEYSYM_NAME, help='key to turn extended keyboard controls on / off.' + ' any keysym name may be used' + ' (see XStringToKeysym & X11/keysymdef.h, ' + ' default: %(default)s)', ) argparser.add_argument( '--change-window-name', metavar='ENGINE_WINDOW_NAME', dest='engine_window_name', default=None, help='Change window name of engine after launch.' + ' This requires Extended Controls to be enabled.' + ' (default: no change)', ) return argparser def main(argv): argparser = _init_argparser() args = argparser.parse_args(argv) run(**vars(args)) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))