Commit e42a19df authored by Tulir Asokan's avatar Tulir Asokan

Add pong metadata

parent 7786f03b
from typing import Optional
from time import time
from mautrix.types import TextMessageEventContent, MessageType
from maubot import Plugin, MessageEvent
from maubot.handlers import command
class EchoBot(Plugin):
def plural(num: int, unit: str, decimals: Optional[int] = None) -> str:
def plural(num: float, unit: str, decimals: Optional[int] = None) -> str:
num = round(num, decimals)
if num == 1:
return f"{num} {unit}"
......@@ -15,8 +17,7 @@ class EchoBot(Plugin):
return f"{num} {unit}s"
def time_since(cls, ms: int) -> str:
diff = int(time() * 1000) - ms
def prettify_diff(cls, diff: int) -> str:
if abs(diff) < 10 * 1_000:
return f"{diff} ms"
elif abs(diff) < 60 * 1_000:
......@@ -26,13 +27,24 @@ class EchoBot(Plugin):
return f"{cls.plural(minutes, 'minute')} and {cls.plural(seconds, 'second')}"
hours, minutes = divmod(minutes, 60)
if abs(hours) < 24:
return f"{cls.plural(hours, 'hour')}, {cls.plural(minutes, 'minute')} and {cls.plural(seconds, 'second')}"
return (f"{cls.plural(hours, 'hour')}, {cls.plural(minutes, 'minute')}"
f" and {cls.plural(seconds, 'second')}")
days, hours = divmod(hours, 24)
return f"{cls.plural(days, 'day')}, {cls.plural(hours, 'hour')}, {cls.plural(minutes, 'minute')} and {cls.plural(seconds, 'second')}"
return (f"{cls.plural(days, 'day')}, {cls.plural(hours, 'hour')}, "
f"{cls.plural(minutes, 'minute')} and {cls.plural(seconds, 'second')}")"ping", help="Ping")
async def ping_handler(self, evt: MessageEvent) -> None:
await evt.reply(f"Pong! (ping took {self.time_since(evt.timestamp)} to arrive)")
diff = int(time() * 1000) - evt.timestamp
content = TextMessageEventContent(msgtype=MessageType.NOTICE,
body="Pong! (ping took "
f"{self.prettify_diff(diff)} to arrive)")
content["pong"] = {
"ms": diff,
"from": evt.sender.split(":", 1)[1],
"ping": evt.event_id,
await evt.reply(content)"echo", help="Repeat a message")
@command.argument("message", pass_raw=True)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment