def help(bot, event, cmd=None, *args): """list supported commands""" if not cmd: segments = [hangups.ChatMessageSegment('Supported commands:', is_bold=True), hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK), hangups.ChatMessageSegment(', '.join(sorted(command.commands.keys())))] else: try: command_fn = command.commands[cmd] segments = [hangups.ChatMessageSegment('{}:'.format(cmd), is_bold=True), hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK)] segments.extend(text_to_segments(command_fn.__doc__)) except KeyError: yield from command.unknown_command(bot, event) return bot.send_message_segments(event.conv, segments)
def config(bot, event, cmd=None, *args): """Displays or modifies the configuration Parameters: /bot config get [key] [subkey] [...] /bot config set [key] [subkey] [...] [value] /bot config append [key] [subkey] [...] [value] /bot config remove [key] [subkey] [...] [value]""" if cmd == 'get' or cmd is None: config_args = list(args) value = bot.config.get_by_path(config_args) if config_args else dict( bot.config) elif cmd == 'set': config_args = list(args[:-1]) if len(args) >= 2: bot.config.set_by_path(config_args, json.loads(args[-1])) bot.config.save() value = bot.config.get_by_path(config_args) else: yield from command.unknown_command(bot, event) return elif cmd == 'append': config_args = list(args[:-1]) if len(args) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.append(json.loads(args[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = 'append failed on non-list' else: yield from command.unknown_command(bot, event) return elif cmd == 'remove': config_args = list(args[:-1]) if len(args) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.remove(json.loads(args[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = 'remove failed on non-list' else: yield from command.unknown_command(bot, event) return else: yield from command.unknown_command(bot, event) return if value is None: value = 'Parameter does not exist!' config_path = ' '.join(k for k in ['config'] + config_args) segments = [ hangups.ChatMessageSegment('{}:'.format(config_path), is_bold=True), hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK) ] segments.extend( text_to_segments(json.dumps(value, indent=2, sort_keys=True))) bot.send_message_segments(event.conv, segments)
def config(bot, event, cmd=None, *args): """displays or modifies the configuration Parameters: /bot config get [key] [subkey] [...] /bot config set [key] [subkey] [...] [value] /bot config append [key] [subkey] [...] [value] /bot config remove [key] [subkey] [...] [value]""" # consume arguments and differentiate beginning of a json array or object tokens = list(args) parameters = [] value = [] state = "key" for token in tokens: if token.startswith(("{", "[", '"', "'")): # apparent start of json array/object, consume into a single list item state = "json" if state == "key": parameters.append(token) elif state == "json": value.append(token) else: raise ValueError("unknown state") if value: parameters.append(" ".join(value)) if cmd == 'get' or cmd is None: config_args = list(parameters) value = bot.config.get_by_path(config_args) if config_args else dict(bot.config) elif cmd == 'test': num_parameters = len(parameters) text_parameters = [] last = num_parameters - 1 for num, token in enumerate(parameters): if num == last: try: json.loads(token) token += " <b>(valid json)</b>" except ValueError: token += " <em>(INVALID)</em>" text_parameters.append(str(num + 1) + ": " + token) text_parameters.insert(0, "<b>config test</b>") if num_parameters == 1: text_parameters.append(_("<em>note: testing single parameter as json</em>")) elif num_parameters < 1: yield from command.unknown_command(bot, event) return yield from bot.coro_send_message(event.conv, "<br />".join(text_parameters)) return elif cmd == 'set': config_args = list(parameters[:-1]) if len(parameters) >= 2: bot.config.set_by_path(config_args, json.loads(parameters[-1])) bot.config.save() value = bot.config.get_by_path(config_args) else: yield from command.unknown_command(bot, event) return elif cmd == 'append': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.append(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('append failed on non-list') else: yield from command.unknown_command(bot, event) return elif cmd == 'remove': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.remove(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('remove failed on non-list') else: yield from command.unknown_command(bot, event) return else: yield from command.unknown_command(bot, event) return if value is None: value = _('Parameter does not exist!') config_path = ' '.join(k for k in ['config'] + config_args) segments = [hangups.ChatMessageSegment('{}:'.format(config_path), is_bold=True), hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK)] segments.extend(text_to_segments(json.dumps(value, indent=2, sort_keys=True))) yield from bot.coro_send_message(event.conv, segments)
def config(bot, event, cmd=None, *args): """displays or modifies the configuration Parameters: /bot config get [key] [subkey] [...] /bot config set [key] [subkey] [...] [value] /bot config append [key] [subkey] [...] [value] /bot config remove [key] [subkey] [...] [value]""" # consume arguments and differentiate beginning of a json array or object tokens = list(args) parameters = [] value = [] state = "key" for token in tokens: if token.startswith(("{", "[")): # apparent start of json array/object, consume into a single list item state = "json" if state == "key": parameters.append(token) elif state == "json": value.append(token) else: raise ValueError("unknown state") if value: parameters.append(" ".join(value)) print("config {}".format(parameters)) if cmd == 'get' or cmd is None: config_args = list(parameters) value = bot.config.get_by_path(config_args) if config_args else dict( bot.config) elif cmd == 'set': config_args = list(parameters[:-1]) if len(parameters) >= 2: bot.config.set_by_path(config_args, json.loads(parameters[-1])) bot.config.save() value = bot.config.get_by_path(config_args) else: yield from command.unknown_command(bot, event) return elif cmd == 'append': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.append(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('append failed on non-list') else: yield from command.unknown_command(bot, event) return elif cmd == 'remove': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.remove(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('remove failed on non-list') else: yield from command.unknown_command(bot, event) return else: yield from command.unknown_command(bot, event) return if value is None: value = _('Parameter does not exist!') config_path = ' '.join(k for k in ['config'] + config_args) segments = [ hangups.ChatMessageSegment('{}:'.format(config_path), is_bold=True), hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK) ] segments.extend( text_to_segments(json.dumps(value, indent=2, sort_keys=True))) bot.send_message_segments(event.conv, segments)
def config(bot, event, cmd=None, *args): """displays or modifies the configuration Parameters: /devilbot config get [key] [subkey] [...] /devilbot config set [key] [subkey] [...] [value] /devilbot config append [key] [subkey] [...] [value] /devilbot config remove [key] [subkey] [...] [value]""" # consume arguments and differentiate beginning of a json array or object tokens = list(args) parameters = [] value = [] state = "key" for token in tokens: if token.startswith(("{", "[", '"', "'")): # apparent start of json array/object, consume into a single list item state = "json" if state == "key": parameters.append(token) elif state == "json": value.append(token) else: raise ValueError("unknown state") if value: parameters.append(" ".join(value)) if cmd == 'get' or cmd is None: config_args = list(parameters) value = bot.config.get_by_path(config_args) if config_args else dict( bot.config) elif cmd == 'test': num_parameters = len(parameters) text_parameters = [] last = num_parameters - 1 for num, token in enumerate(parameters): if num == last: try: json.loads(token) token += " <b>(valid json)</b>" except ValueError: token += " <em>(INVALID)</em>" text_parameters.append(str(num + 1) + ": " + token) text_parameters.insert(0, "<b>config test</b>") if num_parameters == 1: text_parameters.append( _("<em>note: testing single parameter as json</em>")) elif num_parameters < 1: yield from command.unknown_command(bot, event) return yield from bot.coro_send_message(event.conv, "<br />".join(text_parameters)) return elif cmd == 'set': config_args = list(parameters[:-1]) if len(parameters) >= 2: bot.config.set_by_path(config_args, json.loads(parameters[-1])) bot.config.save() value = bot.config.get_by_path(config_args) else: yield from command.unknown_command(bot, event) return elif cmd == 'append': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.append(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('append failed on non-list') else: yield from command.unknown_command(bot, event) return elif cmd == 'remove': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.remove(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('remove failed on non-list') else: yield from command.unknown_command(bot, event) return else: yield from command.unknown_command(bot, event) return if value is None: value = _('Parameter does not exist!') config_path = ' '.join(k for k in ['config'] + config_args) segments = [ hangups.ChatMessageSegment('{}:'.format(config_path), is_bold=True), hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK) ] segments.extend( text_to_segments(json.dumps(value, indent=2, sort_keys=True))) yield from bot.coro_send_message(event.conv, segments)
def config(bot, event, cmd=None, *args): """displays or modifies the configuration Parameters: /bot config get [key] [subkey] [...] /bot config set [key] [subkey] [...] [value] /bot config append [key] [subkey] [...] [value] /bot config remove [key] [subkey] [...] [value]""" # consume arguments and differentiate beginning of a json array or object tokens = list(args) parameters = [] value = [] state = "key" for token in tokens: if token.startswith(("{", "[")): # apparent start of json array/object, consume into a single list item state = "json" if state == "key": parameters.append(token) elif state == "json": value.append(token) else: raise ValueError("unknown state") if value: parameters.append(" ".join(value)) print("config {}".format(parameters)) if cmd == 'get' or cmd is None: config_args = list(parameters) value = bot.config.get_by_path(config_args) if config_args else dict(bot.config) elif cmd == 'set': config_args = list(parameters[:-1]) if len(parameters) >= 2: bot.config.set_by_path(config_args, json.loads(parameters[-1])) bot.config.save() value = bot.config.get_by_path(config_args) else: yield from command.unknown_command(bot, event) return elif cmd == 'append': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.append(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('append failed on non-list') else: yield from command.unknown_command(bot, event) return elif cmd == 'remove': config_args = list(parameters[:-1]) if len(parameters) >= 2: value = bot.config.get_by_path(config_args) if isinstance(value, list): value.remove(json.loads(parameters[-1])) bot.config.set_by_path(config_args, value) bot.config.save() else: value = _('remove failed on non-list') else: yield from command.unknown_command(bot, event) return else: yield from command.unknown_command(bot, event) return if value is None: value = _('Parameter does not exist!') config_path = ' '.join(k for k in ['config'] + config_args) segments = [hangups.ChatMessageSegment('{}:'.format(config_path), is_bold=True), hangups.ChatMessageSegment('\n', hangups.SegmentType.LINE_BREAK)] segments.extend(text_to_segments(json.dumps(value, indent=2, sort_keys=True))) bot.send_message_segments(event.conv, segments)