blob: d6247c3b0a4224c2ead7ed8ad2884959864b50a1 (
plain) (
tree)
|
|
from __future__ import annotations
import json
import os
from typing import TYPE_CHECKING, Dict
import weechat
from slack.error import store_and_format_exception
from slack.log import print_error
if TYPE_CHECKING:
from typing_extensions import NotRequired, TypedDict
class EmojiSkinVariation(TypedDict):
name: str
unicode: str
class Emoji(TypedDict):
aliasOf: NotRequired[str]
name: str
skinVariations: NotRequired[Dict[str, EmojiSkinVariation]]
unicode: str
def load_standard_emojis() -> Dict[str, Emoji]:
weechat_dir = weechat.info_get("weechat_data_dir", "") or weechat.info_get(
"weechat_dir", ""
)
weechat_sharedir = weechat.info_get("weechat_sharedir", "")
local_weemoji, global_weemoji = (
f"{path}/weemoji.json" for path in (weechat_dir, weechat_sharedir)
)
path = (
global_weemoji
if os.path.exists(global_weemoji) and not os.path.exists(local_weemoji)
else local_weemoji
)
if not os.path.exists(path):
return {}
try:
with open(path) as f:
emojis: Dict[str, Emoji] = json.loads(f.read())
emojis_skin_tones: Dict[str, Emoji] = {
skin_tone["name"]: {
"name": skin_tone["name"],
"unicode": skin_tone["unicode"],
}
for emoji in emojis.values()
if "skinVariations" in emoji
for skin_tone in emoji["skinVariations"].values()
}
emojis.update(emojis_skin_tones)
return emojis
except Exception as e:
print_error(f"couldn't read weemoji.json: {store_and_format_exception(e)}")
return {}
|