49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
|
|
def parse_cite(reference: dict[str, Any]) -> dict[str, str] | None:
|
|
cite_type = reference.get("cite")
|
|
if not cite_type:
|
|
return None
|
|
|
|
match cite_type:
|
|
case "chan":
|
|
return {
|
|
"type": "chan",
|
|
"group": reference.get("group", ""),
|
|
"chan": reference.get("chan", ""),
|
|
}
|
|
case "group":
|
|
return {
|
|
"type": "group",
|
|
"group": reference.get("group", ""),
|
|
}
|
|
case "desk":
|
|
return {
|
|
"type": "desk",
|
|
"desk": reference.get("desk", ""),
|
|
}
|
|
case "bait":
|
|
return {
|
|
"type": "bait",
|
|
"bait": reference.get("bait", ""),
|
|
}
|
|
case _:
|
|
return None
|
|
|
|
|
|
def cite_to_text(cite: dict[str, str]) -> str:
|
|
match cite.get("type"):
|
|
case "chan":
|
|
return f"[channel: {cite.get('group')}/{cite.get('chan')}]"
|
|
case "group":
|
|
return f"[group: {cite.get('group')}]"
|
|
case "desk":
|
|
return f"[desk: {cite.get('desk')}]"
|
|
case "bait":
|
|
return f"[bait: {cite.get('bait')}]"
|
|
case _:
|
|
return "[unknown reference]"
|