From 559c504e8be8873645beeda853a7be40d73fa4af Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 28 Feb 2021 13:53:50 +0200 Subject: [PATCH] Improve formatting of dice messages --- mautrix_telegram/portal/telegram.py | 49 ++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/mautrix_telegram/portal/telegram.py b/mautrix_telegram/portal/telegram.py index 75923de1..de639d0e 100644 --- a/mautrix_telegram/portal/telegram.py +++ b/mautrix_telegram/portal/telegram.py @@ -332,16 +332,63 @@ class PortalTelegram(BasePortal, ABC): await intent.set_typing(self.mxid, is_typing=False) return await self._send_message(intent, content, timestamp=evt.date) + @staticmethod + def _format_dice(roll: MessageMediaDice) -> str: + if roll.emoticon == "\U0001F3B0": + emojis = { + 0: "\U0001F36B", # "🍫", + 1: "\U0001F352", # "🍒", + 2: "\U0001F34B", # "🍋", + 3: "7\ufe0f\u20e3" # "7️⃣", + } + res = roll.value - 1 + slot1, slot2, slot3 = emojis[res % 4], emojis[res // 4 % 4], emojis[res // 16] + return f"{slot1} {slot2} {slot3} ({roll.value})" + elif roll.emoticon == "\u26BD": + results = { + 1: "miss", + 2: "hit the woodwork", + 3: "goal", # seems to go in through the center + 4: "goal", + 5: "goal 🎉", # seems to go in through the top right corner, includes confetti + } + elif roll.emoticon == "\U0001F3B3": + results = { + 1: "miss", + 2: "1 pin down", + 3: "3 pins down, split", + 4: "4 pins down, split", + 5: "5 pins down", + 6: "strike 🎉", + } + # elif roll.emoticon == "\U0001F3C0": + # results = { + # 2: "rolled off", + # 3: "stuck", + # } + # elif roll.emoticon == "\U0001F3AF": + # results = { + # 1: "bounced off", + # 2: "outer rim", + # + # 6: "bullseye", + # } + else: + return str(roll.value) + return f"{results[roll.value]} ({roll.value})" + async def handle_telegram_dice(self, source: 'AbstractUser', intent: IntentAPI, evt: Message, relates_to: RelatesTo) -> EventID: emoji_text = { "\U0001F3AF": " Dart throw", "\U0001F3B2": " Dice roll", "\U0001F3C0": " Basketball throw", + "\U0001F3B0": " Slot machine", + "\U0001F3B3": " Bowling", "\u26BD": " Football kick" } roll: MessageMediaDice = evt.media - text = f"{roll.emoticon}{emoji_text.get(roll.emoticon, '')} result: {roll.value}" + text = f"{roll.emoticon}{emoji_text.get(roll.emoticon, '')} result: {self._format_dice(roll)}" content = TextMessageEventContent(msgtype=MessageType.TEXT, format=Format.HTML, body=text, formatted_body=f"

{text}

", relates_to=relates_to, external_url=self._get_external_url(evt))