feat(ai-moderation): use per-server nickname (displayName) in analysis payload

- resolveDisplayName(): member.displayName from captured metadata,
  falls back to global username
- Applied to context lines, target message blocks, and media message
  blocks — LLM sees the name the channel actually sees (nickname can
  carry moderation signal itself)
This commit is contained in:
asepharyana
2026-08-10 11:36:37 +07:00
parent 4049ab4201
commit ecbb538c9f
5 changed files with 52 additions and 3 deletions
@@ -36,6 +36,27 @@ export function getAnalysisContent(message: MessageRecord): string {
).trim();
}
/**
* Server nickname (member.displayName) when captured, else the author
* username. Discord shows the server nickname to other members, so the LLM
* should see the same name the channel sees — and a nickname can carry
* moderation signal itself (offensive nick + clean message → low warn).
*/
export function resolveDisplayName(msg: MessageRecord): string {
if (msg.metadata) {
try {
const meta = JSON.parse(msg.metadata) as {
member?: { displayName?: string | null } | null;
};
const dn = meta?.member?.displayName;
if (dn && dn.trim().length > 0) return dn;
} catch {
// malformed metadata — fall back to username
}
}
return msg.username;
}
/**
* Builds a <reference> XML element for reply/forward/crosspost context.
*/