diff --git a/maubot/matrix.py b/maubot/matrix.py
index 487f8ee..1821a27 100644
--- a/maubot/matrix.py
+++ b/maubot/matrix.py
@@ -36,18 +36,18 @@ def parse_formatted(message: str, allow_html: bool = False, render_markdown: boo
class MaubotMessageEvent(MessageEvent):
- client: MatrixClient
+ client: 'MaubotMatrixClient'
disable_reply: bool
- def __init__(self, base: MessageEvent, client: MatrixClient):
+ def __init__(self, base: MessageEvent, client: 'MaubotMatrixClient'):
super().__init__(**{a.name.lstrip("_"): getattr(base, a.name)
for a in attr.fields(MessageEvent)})
self.client = client
- self.disable_reply = False
+ self.disable_reply = client.disable_replies
def respond(self, content: Union[str, MessageEventContent],
event_type: EventType = EventType.ROOM_MESSAGE, markdown: bool = True,
- allow_html: bool = False, reply: bool = False,
+ allow_html: bool = False, reply: Union[bool, str] = False,
edits: Optional[Union[EventID, MessageEvent]] = None) -> Awaitable[EventID]:
if isinstance(content, str):
content = TextMessageEventContent(msgtype=MessageType.NOTICE, body=content)
@@ -58,8 +58,15 @@ class MaubotMessageEvent(MessageEvent):
allow_html=allow_html)
if edits:
content.set_edit(edits)
- elif reply and not self.disable_reply:
- content.set_reply(self)
+ elif reply:
+ if reply != "force" and self.disable_reply:
+ content.body = f"{self.sender}: {content.body}"
+ fmt_body = content.formatted_body or escape(content.body).replace("\n", "
")
+ content.formatted_body = (f''
+ f'{self.sender}'
+ f': {fmt_body}')
+ else:
+ content.set_reply(self)
return self.client.send_message_event(self.room_id, event_type, content)
def reply(self, content: Union[str, MessageEventContent],
@@ -82,6 +89,12 @@ class MaubotMessageEvent(MessageEvent):
class MaubotMatrixClient(MatrixClient):
+ disable_replies: bool
+
+ def __init__(self, *args, **kwargs) -> None:
+ super().__init__(*args, **kwargs)
+ self.disable_replies = False
+
def send_markdown(self, room_id: RoomID, markdown: str, *, allow_html: bool = False,
msgtype: MessageType = MessageType.TEXT,
edits: Optional[Union[EventID, MessageEvent]] = None,