# SPDX-FileCopyrightText: 2022 n9k # SPDX-License-Identifier: AGPL-3.0-or-later import json from quart import current_app from anonstream.emote import load_emote_schema_async, BadEmote from anonstream.helpers.emote import get_emote_markup from anonstream.control.spec.common import Str, End from anonstream.control.exceptions import CommandFailed CONFIG = current_app.config EMOTES = current_app.emotes async def cmd_emote_help(): normal = ['emote', 'help'] response = ( 'Usage: emote reload\n' 'Commands:\n' ' emote reload......try to reload the emote schema (existing messages are not modified)\n' ) return normal, response async def cmd_emote_reload(): try: emotes = await load_emote_schema_async(CONFIG['EMOTE_SCHEMA']) except OSError as e: raise CommandFailed(f'could not read emote schema: {e}') from e except json.JSONDecodeError as e: raise CommandFailed('could not decode emote schema as json') from e except BadEmote as e: error, *_ = e.args raise CommandFailed(error) from e else: # Mutate current_app.emotes in place EMOTES.clear() for emote in emotes: EMOTES.append(emote) # Clear emote markup cache -- emotes by the same name may have changed get_emote_markup.cache_clear() normal = ['emote', 'reload'] response = '' return normal, response SPEC = Str({ None: End(cmd_emote_help), 'help': End(cmd_emote_help), 'reload': End(cmd_emote_reload), })