5 Commits

Author SHA1 Message Date
Tulir Asokan
390267ea95 Bump version to 1.1.1 2019-03-08 01:03:57 +02:00
Tulir Asokan
e42a19df0f Add pong metadata 2019-03-07 21:39:40 +02:00
Tulir Asokan
7786f03b03 Bump version to 1.1.0 2019-03-06 15:43:24 +02:00
Tulir Asokan
c1b15a82a1 Fix pluralization in ping 2019-03-06 15:43:22 +02:00
Tulir Asokan
25b9340266 Round to seconds when time is over a minute in !ping 2019-03-06 14:53:50 +02:00
2 changed files with 29 additions and 8 deletions

35
echo.py
View File

@@ -1,29 +1,50 @@
from typing import Optional
from time import time from time import time
from mautrix.types import TextMessageEventContent, MessageType
from maubot import Plugin, MessageEvent from maubot import Plugin, MessageEvent
from maubot.handlers import command from maubot.handlers import command
class EchoBot(Plugin): class EchoBot(Plugin):
@staticmethod @staticmethod
def time_since(ms: int) -> str: def plural(num: float, unit: str, decimals: Optional[int] = None) -> str:
diff = int(time() * 1000) - ms num = round(num, decimals)
if num == 1:
return f"{num} {unit}"
else:
return f"{num} {unit}s"
@classmethod
def prettify_diff(cls, diff: int) -> str:
if abs(diff) < 10 * 1_000: if abs(diff) < 10 * 1_000:
return f"{diff} ms" return f"{diff} ms"
elif abs(diff) < 60 * 1_000: elif abs(diff) < 60 * 1_000:
return f"{round(diff / 1_000, 1)} seconds" return cls.plural(diff / 1_000, 'second', decimals=1)
minutes, seconds = divmod(diff / 1_000, 60) minutes, seconds = divmod(diff / 1_000, 60)
if abs(minutes) < 60: if abs(minutes) < 60:
return f"{minutes} minutes and {seconds} seconds" return f"{cls.plural(minutes, 'minute')} and {cls.plural(seconds, 'second')}"
hours, minutes = divmod(minutes, 60) hours, minutes = divmod(minutes, 60)
if abs(hours) < 24: if abs(hours) < 24:
return f"{hours} hours, {minutes} minutes and {seconds} seconds" return (f"{cls.plural(hours, 'hour')}, {cls.plural(minutes, 'minute')}"
f" and {cls.plural(seconds, 'second')}")
days, hours = divmod(hours, 24) days, hours = divmod(hours, 24)
return f"{days} days, {hours} hours, {minutes} minutes and {seconds} seconds" return (f"{cls.plural(days, 'day')}, {cls.plural(hours, 'hour')}, "
f"{cls.plural(minutes, 'minute')} and {cls.plural(seconds, 'second')}")
@command.new("ping", help="Ping") @command.new("ping", help="Ping")
async def ping_handler(self, evt: MessageEvent) -> None: 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)
@command.new("echo", help="Repeat a message") @command.new("echo", help="Repeat a message")
@command.argument("message", pass_raw=True) @command.argument("message", pass_raw=True)

View File

@@ -1,6 +1,6 @@
maubot: 0.1.0 maubot: 0.1.0
id: xyz.maubot.echo id: xyz.maubot.echo
version: 1.0.0 version: 1.1.1
license: MIT license: MIT
modules: modules:
- echo - echo