7 Commits

Author SHA1 Message Date
Tulir Asokan
e5454924dd Bump version to 1.3.0 2019-07-08 10:55:45 +03:00
Tulir Asokan
d325076c9f Don't allow HTML in ping messages 2019-07-08 10:55:07 +03:00
Tulir Asokan
6268749a2e Include message from ping command in pong 2019-07-08 10:49:33 +03:00
Tulir Asokan
9a6e06cc29 Bump version to 1.2.0 2019-04-14 02:16:20 +03:00
Tulir Asokan
37df8c89d6 Use mention and event link instead of reply for pongs 2019-04-14 02:12:04 +03:00
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
2 changed files with 28 additions and 8 deletions

34
echo.py
View File

@@ -1,5 +1,8 @@
from typing import Optional from typing import Optional
from time import time from time import time
from html import escape
from mautrix.types import TextMessageEventContent, MessageType, Format
from maubot import Plugin, MessageEvent from maubot import Plugin, MessageEvent
from maubot.handlers import command from maubot.handlers import command
@@ -7,7 +10,7 @@ from maubot.handlers import command
class EchoBot(Plugin): class EchoBot(Plugin):
@staticmethod @staticmethod
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) num = round(num, decimals)
if num == 1: if num == 1:
return f"{num} {unit}" return f"{num} {unit}"
@@ -15,8 +18,7 @@ class EchoBot(Plugin):
return f"{num} {unit}s" return f"{num} {unit}s"
@classmethod @classmethod
def time_since(cls, ms: int) -> str: def prettify_diff(cls, diff: int) -> str:
diff = int(time() * 1000) - ms
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:
@@ -26,13 +28,31 @@ class EchoBot(Plugin):
return f"{cls.plural(minutes, 'minute')} and {cls.plural(seconds, 'second')}" 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"{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) 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')}")
@command.new("ping", help="Ping") @command.new("ping", help="Ping")
async def ping_handler(self, evt: MessageEvent) -> None: @command.argument("message", pass_raw=True, required=False)
await evt.reply(f"Pong! (ping took {self.time_since(evt.timestamp)} to arrive)") async def ping_handler(self, evt: MessageEvent, message: str = "") -> None:
diff = int(time() * 1000) - evt.timestamp
pretty_diff = self.prettify_diff(diff)
message = f'"{message[:20]}" took' if message else "took"
html_message = f'"{escape(message[:20])}" took' if message else "took"
content = TextMessageEventContent(
msgtype=MessageType.NOTICE, format=Format.HTML,
body=f"{evt.sender}: Pong! (ping {message} {pretty_diff} to arrive)",
formatted_body=f"<a href='https://matrix.to/#/{evt.sender}'>{evt.sender}</a>: Pong! "
f"(<a href='https://matrix.to/#/{evt.room_id}/{evt.event_id}'>ping</a> {html_message} "
f"{pretty_diff} to arrive)")
content["pong"] = {
"ms": diff,
"from": evt.sender.split(":", 1)[1],
"ping": evt.event_id,
}
await evt.respond(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.1.0 version: 1.3.0
license: MIT license: MIT
modules: modules:
- echo - echo