-
{memberEvtContent?.displayname ?? evt.sender}
+
{memberEvtContent?.displayname || evt.sender}
{shortTime}
{(editEventTS && editTime) ?
(edited at {formatShortTime(editEventTS)})
diff --git a/web/src/ui/timeline/content/MessageBody.tsx b/web/src/ui/timeline/content/MessageBody.tsx
index a85110d..0991248 100644
--- a/web/src/ui/timeline/content/MessageBody.tsx
+++ b/web/src/ui/timeline/content/MessageBody.tsx
@@ -13,7 +13,7 @@
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
-import type { MediaMessageEventContent, MessageEventContent } from "@/api/types"
+import { MediaMessageEventContent, MemberEventContent, MessageEventContent } from "@/api/types"
import { EventContentProps } from "./props.ts"
import { useMediaContent } from "./useMediaContent.tsx"
@@ -24,18 +24,31 @@ const onClickHTML = (evt: React.MouseEvent) => {
}
}
-export const TextMessageBody = ({ event }: EventContentProps) => {
+export const TextMessageBody = ({ event, room }: EventContentProps) => {
const content = event.content as MessageEventContent
+ const classNames = ["message-text"]
+ let eventSenderName: string | undefined
+ if (content.msgtype === "m.notice") {
+ classNames.push("notice-message")
+ } else if (content.msgtype === "m.emote") {
+ classNames.push("emote-message")
+ const memberEvt = room.getStateEvent("m.room.member", event.sender)
+ const memberEvtContent = memberEvt?.content as MemberEventContent | undefined
+ eventSenderName = memberEvtContent?.displayname || event.sender
+ }
if (event.local_content?.sanitized_html) {
- const classNames = ["message-text", "html-body"]
+ classNames.push("html-body")
if (event.local_content.was_plaintext) {
classNames.push("plaintext-body")
}
- return
+ return
}
- return {content.body}
+ return {content.body}
}
export const MediaMessageBody = ({ event, room }: EventContentProps) => {