anonstream/anonstream/control/spec/methods/emote.py

52 行
1.5 KiB
Python

# SPDX-FileCopyrightText: 2022 n9k <https://git.076.ne.jp/ninya9k>
# 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),
})