Commit ae25099
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.