/** * Profilbild einer Person. * * Die Quelle ist Discord: dort liegt das Bild ohnehin, die Anmeldung läuft * über dieselbe Stelle, und ein eigener Zwischenspeicher wäre ein Dienst mehr * im Stack für ein Bild von 64 Pixeln. Dafür steht `cdn.discordapp.com` in der * Inhaltsrichtlinie, siehe middleware.ts. * * Ohne Bild — und das ist der Normalfall bei Konten ohne eigenes Profilbild — * stehen die Anfangsbuchstaben da. Kein Platzhaltergesicht: ein leerer Kreis * mit Initialen ist ehrlicher und lädt nichts nach. */ export function Avatar({ userId, avatarHash, displayName, size = 28, }: { userId: string avatarHash: string | null displayName: string size?: number }) { const kanten = { width: size, height: size, fontSize: Math.round(size * 0.4) } if (!avatarHash) { return ( {initialen(displayName)} ) } return ( // eslint-disable-next-line @next/next/no-img-element -- fremde Quelle, kein Layout-Nutzen durch next/image ) } function initialen(name: string): string { const teile = name.trim().split(/\s+/).filter(Boolean) if (teile.length === 0) return '?' if (teile.length === 1) return teile[0]!.slice(0, 2).toUpperCase() return (teile[0]![0]! + teile[teile.length - 1]![0]!).toUpperCase() }