Commit ae25099

benny-dou <60535774+benny-dou@users.noreply.github.com>
2025-05-28 14:47:47
feat(emoji): add currency emoji
1 parent 5510db8
Changed files (2)
src
src/others/danmu.py
@@ -20,6 +20,7 @@ from messages.progress import modify_progress
 from messages.sender import send2tg
 from messages.utils import blockquote, equal_prefix, startswith_prefix
 from networking import hx_req
+from others.emoji import CURRENCY
 from utils import nowdt, number
 
 HELP = f"""๐Ÿ“–**ๆŸฅ่ฏขๅผนๅน•่ฎฐๅฝ•**
@@ -124,13 +125,13 @@ async def query_danmu(client: Client, message: Message, *, show_name: bool = Tru
 
     profit = ""
     for currency, amount in sorted(super_chats.items()):
-        profit += f"\n**{currency}**: {number(amount)}"
+        profit += f"\n{CURRENCY.get(currency, 'โ”')}**{currency}**: {number(amount)}"
     final = f"{header}{profit}\n{blockquote(danmu)}"
     if len(final) < TEXT_LENGTH - 10:
         await modify_progress(message=status_msg, text=final, force_update=True, **kwargs)
     else:
         caption += f"\n#๏ธโƒฃๅผนๅน•ๆ•ฐ: {count}"
-        caption += profit
+        caption += f"\n๐ŸŽ‰SuperChat:{profit}" if profit else ""
         with BytesIO(danmu.encode("utf-8")) as f:
             await client.send_document(info["cid"], f, file_name=f"{user}{match_time}{keyword}ๅผนๅน•่ฎฐๅฝ•.txt", caption=caption)
         await modify_progress(message=status_msg, del_status=True, **kwargs)
@@ -138,15 +139,13 @@ async def query_danmu(client: Client, message: Message, *, show_name: bool = Tru
 
 def parse_danmu(data: list[dict], super_chats: defaultdict, *, show_name: bool = True) -> dict:
     msg = ""
-    sc_pattern = re.compile(r"^([A-Z]{2,}) (\d+(?:\.\d+)?)$")
     for danmu in sorted(data, key=lambda x: x["timestamp"], reverse=True):  # new to old
         dt = datetime.fromtimestamp(danmu["timestamp"] / 1000000, tz=UTC).astimezone(ZoneInfo(TZ))
         sc_amount = ""
-        if amt := danmu.get("scAmount"):
-            sc_amount = f" ({amt.replace('USD ', '๐Ÿ’ต')})"
-            if matched := sc_pattern.fullmatch(amt):
-                currency = matched.group(1)
-                super_chats[currency] += Decimal(matched.group(2))
+        if super_chat := danmu.get("scAmount"):
+            currency, amount = super_chat.split(" ")
+            super_chats[currency] += Decimal(amount)
+            sc_amount = f" ({CURRENCY.get(currency, 'โ”')}{super_chat})"
         msg += f"\n{dt:%m-%d %H:%M:%S}|{danmu['authorName']}{sc_amount}: {danmu['message']}" if show_name else f"\n{dt:%m-%d %H:%M:%S}{sc_amount}: {danmu['message']}"
     return {"danmu": msg.strip(), "num_messages": len(data)}
 
@@ -208,7 +207,7 @@ async def sync_danmu_to_d1() -> None:
     now = nowdt(TZ)
 
     async def batch_sync(danmu_list: list[dict], saved_items: list[str]) -> int:
-        sc_pattern = re.compile(r"^([A-Z]{2,}) (\d+(?:\.\d+)?)$")
+        sc_pattern = re.compile(r"^([A-Z]{3,}) (\d+(?:\.\d+)?)$")
         db_columns = "id INTEGER PRIMARY KEY, time TEXT, uid INTEGER, user TEXT, text TEXT, sc_amt REAL NULL, sc_ccy TEXT NULL"
         tasks = []
         for danmu in danmu_list:
src/others/emoji.py
@@ -152,6 +152,170 @@ DOUYIN = {
 }
 BILIBILI = {"[็ฌ‘ๅ“ญ]": "๐Ÿคฆ"}
 
+CURRENCY = {
+    "AED": "๐Ÿ‡ฆ๐Ÿ‡ช",
+    "AFN": "๐Ÿ‡ฆ๐Ÿ‡ซ",
+    "ALL": "๐Ÿ‡ฆ๐Ÿ‡ฑ",
+    "AMD": "๐Ÿ‡ฆ๐Ÿ‡ฒ",
+    "ANG": "๐Ÿ‡ณ๐Ÿ‡ฑ",
+    "AOA": "๐Ÿ‡ฆ๐Ÿ‡ด",
+    "ARS": "๐Ÿ‡ฆ๐Ÿ‡ท",
+    "AUD": "๐Ÿ‡ฆ๐Ÿ‡บ",
+    "AWG": "๐Ÿ‡ฆ๐Ÿ‡ผ",
+    "AZN": "๐Ÿ‡ฆ๐Ÿ‡ฟ",
+    "BAM": "๐Ÿ‡ง๐Ÿ‡ฆ",
+    "BBD": "๐Ÿ‡ง๐Ÿ‡ง",
+    "BDT": "๐Ÿ‡ง๐Ÿ‡ฉ",
+    "BGN": "๐Ÿ‡ง๐Ÿ‡ฌ",
+    "BHD": "๐Ÿ‡ง๐Ÿ‡ญ",
+    "BIF": "๐Ÿ‡ง๐Ÿ‡ฎ",
+    "BMD": "๐Ÿ‡ง๐Ÿ‡ฒ",
+    "BND": "๐Ÿ‡ง๐Ÿ‡ณ",
+    "BOB": "๐Ÿ‡ง๐Ÿ‡ด",
+    "BRL": "๐Ÿ‡ง๐Ÿ‡ท",
+    "BSD": "๐Ÿ‡ง๐Ÿ‡ธ",
+    "BTN": "๐Ÿ‡ง๐Ÿ‡น",
+    "BWP": "๐Ÿ‡ง๐Ÿ‡ผ",
+    "BYN": "๐Ÿ‡ง๐Ÿ‡พ",
+    "BYR": "๐Ÿ‡ง๐Ÿ‡พ",
+    "BZD": "๐Ÿ‡ง๐Ÿ‡ฟ",
+    "CAD": "๐Ÿ‡จ๐Ÿ‡ฆ",
+    "CDF": "๐Ÿ‡จ๐Ÿ‡ฉ",
+    "CHF": "๐Ÿ‡จ๐Ÿ‡ญ",
+    "CLF": "๐Ÿ‡จ๐Ÿ‡ฑ",
+    "CLP": "๐Ÿ‡จ๐Ÿ‡ฑ",
+    "CNY": "๐Ÿ‡จ๐Ÿ‡ณ",
+    "COP": "๐Ÿ‡จ๐Ÿ‡ด",
+    "CRC": "๐Ÿ‡จ๐Ÿ‡ท",
+    "CUC": "๐Ÿ‡จ๐Ÿ‡บ",
+    "CUP": "๐Ÿ‡จ๐Ÿ‡บ",
+    "CVE": "๐Ÿ‡จ๐Ÿ‡ป",
+    "CZK": "๐Ÿ‡จ๐Ÿ‡ฟ",
+    "DJF": "๐Ÿ‡ฉ๐Ÿ‡ฏ",
+    "DKK": "๐Ÿ‡ฉ๐Ÿ‡ฐ",
+    "DOP": "๐Ÿ‡ฉ๐Ÿ‡ด",
+    "DZD": "๐Ÿ‡ฉ๐Ÿ‡ฟ",
+    "EGP": "๐Ÿ‡ช๐Ÿ‡ฌ",
+    "ERN": "๐Ÿ‡ช๐Ÿ‡ท",
+    "ETB": "๐Ÿ‡ช๐Ÿ‡น",
+    "EUR": "๐Ÿ‡ช๐Ÿ‡บ",
+    "FJD": "๐Ÿ‡ซ๐Ÿ‡ฏ",
+    "FKP": "๐Ÿ‡ซ๐Ÿ‡ฐ",
+    "GBP": "๐Ÿ‡ฌ๐Ÿ‡ง",
+    "GEL": "๐Ÿ‡ฌ๐Ÿ‡ช",
+    "GHS": "๐Ÿ‡ฌ๐Ÿ‡ญ",
+    "GIP": "๐Ÿ‡ฌ๐Ÿ‡ฎ",
+    "GMD": "๐Ÿ‡ฌ๐Ÿ‡ฒ",
+    "GNF": "๐Ÿ‡ฌ๐Ÿ‡ณ",
+    "GTQ": "๐Ÿ‡ฌ๐Ÿ‡น",
+    "GYD": "๐Ÿ‡ฌ๐Ÿ‡พ",
+    "HKD": "๐Ÿ‡ญ๐Ÿ‡ฐ",
+    "HNL": "๐Ÿ‡ญ๐Ÿ‡ณ",
+    "HRK": "๐Ÿ‡ญ๐Ÿ‡ท",
+    "HTG": "๐Ÿ‡ญ๐Ÿ‡น",
+    "HUF": "๐Ÿ‡ญ๐Ÿ‡บ",
+    "IDR": "๐Ÿ‡ฎ๐Ÿ‡ฉ",
+    "ILS": "๐Ÿ‡ฎ๐Ÿ‡ฑ",
+    "INR": "๐Ÿ‡ฎ๐Ÿ‡ณ",
+    "IQD": "๐Ÿ‡ฎ๐Ÿ‡ถ",
+    "IRR": "๐Ÿ‡ฎ๐Ÿ‡ท",
+    "ISK": "๐Ÿ‡ฎ๐Ÿ‡ธ",
+    "JMD": "๐Ÿ‡ฏ๐Ÿ‡ฒ",
+    "JOD": "๐Ÿ‡ฏ๐Ÿ‡ด",
+    "JPY": "๐Ÿ‡ฏ๐Ÿ‡ต",
+    "KES": "๐Ÿ‡ฐ๐Ÿ‡ช",
+    "KGS": "๐Ÿ‡ฐ๐Ÿ‡ฌ",
+    "KHR": "๐Ÿ‡ฐ๐Ÿ‡ญ",
+    "KMF": "๐Ÿ‡ฐ๐Ÿ‡ฒ",
+    "KPW": "๐Ÿ‡ฐ๐Ÿ‡ต",
+    "KRW": "๐Ÿ‡ฐ๐Ÿ‡ท",
+    "KWD": "๐Ÿ‡ฐ๐Ÿ‡ผ",
+    "KYD": "๐Ÿ‡ฐ๐Ÿ‡พ",
+    "KZT": "๐Ÿ‡ฐ๐Ÿ‡ฟ",
+    "LAK": "๐Ÿ‡ฑ๐Ÿ‡ฆ",
+    "LBP": "๐Ÿ‡ฑ๐Ÿ‡ง",
+    "LKR": "๐Ÿ‡ฑ๐Ÿ‡ฐ",
+    "LRD": "๐Ÿ‡ฑ๐Ÿ‡ท",
+    "LSL": "๐Ÿ‡ฑ๐Ÿ‡ธ",
+    "LTL": "๐Ÿ‡ฑ๐Ÿ‡น",
+    "LVL": "๐Ÿ‡ฑ๐Ÿ‡ป",
+    "LYD": "๐Ÿ‡ฑ๐Ÿ‡พ",
+    "MAD": "๐Ÿ‡ฒ๐Ÿ‡ฆ",
+    "MDL": "๐Ÿ‡ฒ๐Ÿ‡ฉ",
+    "MGA": "๐Ÿ‡ฒ๐Ÿ‡ฌ",
+    "MKD": "๐Ÿ‡ฒ๐Ÿ‡ฐ",
+    "MMK": "๐Ÿ‡ฒ๐Ÿ‡ฒ",
+    "MNT": "๐Ÿ‡ฒ๐Ÿ‡ณ",
+    "MOP": "๐Ÿ‡ฒ๐Ÿ‡ด",
+    "MRO": "๐Ÿ‡ฒ๐Ÿ‡ท",
+    "MUR": "๐Ÿ‡ฒ๐Ÿ‡บ",
+    "MVR": "๐Ÿ‡ฒ๐Ÿ‡ป",
+    "MWK": "๐Ÿ‡ฒ๐Ÿ‡ผ",
+    "MXN": "๐Ÿ‡ฒ๐Ÿ‡ฝ",
+    "MYR": "๐Ÿ‡ฒ๐Ÿ‡พ",
+    "MZN": "๐Ÿ‡ฒ๐Ÿ‡ฟ",
+    "NAD": "๐Ÿ‡ณ๐Ÿ‡ฆ",
+    "NGN": "๐Ÿ‡ณ๐Ÿ‡ฌ",
+    "NIO": "๐Ÿ‡ณ๐Ÿ‡ฎ",
+    "NOK": "๐Ÿ‡ณ๐Ÿ‡ด",
+    "NPR": "๐Ÿ‡ณ๐Ÿ‡ต",
+    "NZD": "๐Ÿ‡ณ๐Ÿ‡ฟ",
+    "OMR": "๐Ÿ‡ด๐Ÿ‡ฒ",
+    "PAB": "๐Ÿ‡ต๐Ÿ‡ฆ",
+    "PEN": "๐Ÿ‡ต๐Ÿ‡ช",
+    "PGK": "๐Ÿ‡ต๐Ÿ‡ฌ",
+    "PHP": "๐Ÿ‡ต๐Ÿ‡ญ",
+    "PKR": "๐Ÿ‡ต๐Ÿ‡ฐ",
+    "PLN": "๐Ÿ‡ต๐Ÿ‡ฑ",
+    "PYG": "๐Ÿ‡ต๐Ÿ‡พ",
+    "QAR": "๐Ÿ‡ถ๐Ÿ‡ฆ",
+    "RON": "๐Ÿ‡ท๐Ÿ‡ด",
+    "RSD": "๐Ÿ‡ท๐Ÿ‡ธ",
+    "RUB": "๐Ÿ‡ท๐Ÿ‡บ",
+    "RWF": "๐Ÿ‡ท๐Ÿ‡ผ",
+    "SAR": "๐Ÿ‡ธ๐Ÿ‡ฆ",
+    "SBD": "๐Ÿ‡ธ๐Ÿ‡ง",
+    "SCR": "๐Ÿ‡ธ๐Ÿ‡จ",
+    "SDG": "๐Ÿ‡ธ๐Ÿ‡ฉ",
+    "SEK": "๐Ÿ‡ธ๐Ÿ‡ช",
+    "SGD": "๐Ÿ‡ธ๐Ÿ‡ฌ",
+    "SHP": "๐Ÿ‡ธ๐Ÿ‡ญ",
+    "SLE": "๐Ÿ‡ธ๐Ÿ‡ฑ",
+    "SLL": "๐Ÿ‡ธ๐Ÿ‡ฑ",
+    "SOS": "๐Ÿ‡ธ๐Ÿ‡ด",
+    "SRD": "๐Ÿ‡ธ๐Ÿ‡ท",
+    "STD": "๐Ÿ‡ธ๐Ÿ‡น",
+    "SYP": "๐Ÿ‡ธ๐Ÿ‡พ",
+    "SZL": "๐Ÿ‡ธ๐Ÿ‡ฟ",
+    "THB": "๐Ÿ‡น๐Ÿ‡ญ",
+    "TJS": "๐Ÿ‡น๐Ÿ‡ฏ",
+    "TMT": "๐Ÿ‡น๐Ÿ‡ฒ",
+    "TND": "๐Ÿ‡น๐Ÿ‡ณ",
+    "TOP": "๐Ÿ‡น๐Ÿ‡ด",
+    "TRY": "๐Ÿ‡น๐Ÿ‡ท",
+    "TTD": "๐Ÿ‡น๐Ÿ‡น",
+    "TWD": "๐Ÿ‡น๐Ÿ‡ผ",
+    "TZS": "๐Ÿ‡น๐Ÿ‡ฟ",
+    "UAH": "๐Ÿ‡บ๐Ÿ‡ฆ",
+    "UGX": "๐Ÿ‡บ๐Ÿ‡ฌ",
+    "USD": "๐Ÿ‡บ๐Ÿ‡ธ",
+    "UYU": "๐Ÿ‡บ๐Ÿ‡พ",
+    "UZS": "๐Ÿ‡บ๐Ÿ‡ฟ",
+    "VEF": "๐Ÿ‡ป๐Ÿ‡ช",
+    "VES": "๐Ÿ‡ป๐Ÿ‡ช",
+    "VND": "๐Ÿ‡ป๐Ÿ‡ณ",
+    "VUV": "๐Ÿ‡ป๐Ÿ‡บ",
+    "WST": "๐Ÿ‡ผ๐Ÿ‡ธ",
+    "XAF": "๐Ÿ‡จ๐Ÿ‡ฒ",
+    "XCD": "๐Ÿ‡ฆ๐Ÿ‡ฎ",
+    "XOF": "๐Ÿ‡ง๐Ÿ‡ฏ",
+    "XPF": "๐Ÿ‡ต๐Ÿ‡ซ",
+    "YER": "๐Ÿ‡พ๐Ÿ‡ช",
+    "ZAR": "๐Ÿ‡ฟ๐Ÿ‡ฆ",
+    "ZMW": "๐Ÿ‡ฟ๐Ÿ‡ฒ",
+    "ZWL": "๐Ÿ‡ฟ๐Ÿ‡ผ",
+}
+
 
 def emojify(text: str, platform: str = "all") -> str:
     """Replace the text emojis with actual emojis.