fix: render server nick per user in messages tab and analysis

Extract server_nick from metadata.member.displayName in backend messageMapper,
add server_nick to frontend MessageRecord type, and update messages view +
analysis view to display the member's server-specific nickname (with @username
as secondary context) instead of the global username.
This commit is contained in:
asepharyana
2026-08-27 14:38:05 +07:00
parent ea23c405fa
commit 8049b70738
4 changed files with 55 additions and 6 deletions
@@ -193,12 +193,21 @@ export function AnalysisView() {
key={m.id}
className="search-result-card hud-card flex items-start gap-3 p-3 transition-all"
>
<Avatar src={m.avatar_url} name={m.username} size={32} />
<Avatar
src={m.avatar_url}
name={m.server_nick ?? m.username}
size={32}
/>
<div className="min-w-0 flex-1">
<div className="flex items-center gap-2">
<span className="text-xs font-semibold text-ink">
{m.username}
{m.server_nick ?? m.username}
</span>
{m.server_nick && m.server_nick !== m.username && (
<span className="font-mono text-[10px] text-ink-muted">
@{m.username}
</span>
)}
<span className="font-mono text-[10px] text-ink-faint">
{getMessageChannelLabel(m)}
</span>
@@ -564,9 +564,18 @@ function MessageDetail({
return (
<div className="space-y-3 text-sm">
<div className="flex items-center gap-3">
<Avatar src={m.avatar_url} name={m.username} size={40} />
<Avatar
src={m.avatar_url}
name={m.server_nick ?? m.username}
size={40}
/>
<div>
<div className="font-semibold text-ink">{m.username}</div>
<div className="font-semibold text-ink">
{m.server_nick ?? m.username}
</div>
{m.server_nick && m.server_nick !== m.username && (
<div className="text-[11px] text-ink-muted">@{m.username}</div>
)}
<div className="mono text-[0.65rem] text-ink-faint">
{getMessageChannelLabel(m)} · {formatRelativeTime(m.created_at)}
</div>
@@ -729,12 +738,21 @@ function MessageRow({
: "border-hairline bg-surface-2 hover:border-hairline-focus hover:bg-surface"
}`}
>
<Avatar src={m.avatar_url} name={m.username} size={32} />
<Avatar
src={m.avatar_url}
name={m.server_nick ?? m.username}
size={32}
/>
<div className="min-w-0 flex-1">
<div className="flex items-center gap-2">
<span className="truncate text-xs font-semibold text-ink">
{m.username}
{m.server_nick ?? m.username}
</span>
{m.server_nick && m.server_nick !== m.username && (
<span className="truncate font-mono text-[10px] text-ink-muted">
@{m.username}
</span>
)}
<span className="font-mono text-[10px] text-ink-muted">
{getMessageChannelLabel(m)}
</span>
@@ -109,6 +109,8 @@ export interface MessageRecord {
reference_guild_id?: string | null;
user_id: string;
username: string;
/** Member's server-specific display name (nickname), from metadata.member.displayName. Falls back to username. */
server_nick?: string | null;
avatar_url?: string | null;
content: string;
edited_content?: string | null;