mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 13:35:42 +09:00
71 lines
2.6 KiB
TypeScript
71 lines
2.6 KiB
TypeScript
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import Channels from '@app/features/channel/state/Channels';
|
|
import GuildMembers from '@app/features/member/state/GuildMembers';
|
|
import SelectedGuild from '@app/features/navigation/state/SelectedGuild';
|
|
import Relationships from '@app/features/relationship/state/Relationships';
|
|
import StreamerMode from '@app/features/streamer_mode/state/StreamerMode';
|
|
import {noteText} from '@app/features/theme/fonts/ScriptFontLoader';
|
|
import type {User} from '@app/features/user/models/User';
|
|
|
|
export interface UserDisplayNameLike {
|
|
username: string;
|
|
displayName?: string | null;
|
|
globalName?: string | null;
|
|
global_name?: string | null;
|
|
}
|
|
|
|
export function truncateStreamerModeName(name: string): string {
|
|
const trimmed = name.trim();
|
|
if (!trimmed) return '…';
|
|
return `${Array.from(trimmed)[0]}…`;
|
|
}
|
|
|
|
export function formatNameForStreamerMode(name: string): string {
|
|
return StreamerMode.shouldTruncateUsernames ? truncateStreamerModeName(name) : name;
|
|
}
|
|
|
|
export function formatTagForStreamerMode(tag: string): string {
|
|
return StreamerMode.shouldTruncateUsernames ? truncateStreamerModeName(tag) : tag;
|
|
}
|
|
|
|
export function formatUserTagForStreamerMode(user: Pick<User, 'tag' | 'username' | 'discriminator'>): string {
|
|
return formatTagForStreamerMode(user.tag || `${user.username}#${user.discriminator}`);
|
|
}
|
|
|
|
export function formatNicknameForStreamerMode(nickname: string): string {
|
|
const resolved = formatNameForStreamerMode(nickname);
|
|
noteText(resolved);
|
|
return resolved;
|
|
}
|
|
|
|
export function getDisplayName(user: UserDisplayNameLike): string {
|
|
const name = formatNameForStreamerMode(
|
|
user.displayName || user.globalName || user.global_name || user.username || '',
|
|
);
|
|
noteText(name);
|
|
return name;
|
|
}
|
|
|
|
export function getNickname(user: User, guildId?: string | null, channelId?: string): string {
|
|
let name = user.displayName || user.globalName || user.username || user.id || '';
|
|
const relationship = Relationships.getRelationship(user.id);
|
|
if (relationship?.nickname) {
|
|
name = relationship.nickname;
|
|
}
|
|
const channel = channelId ? Channels.getChannel(channelId) : null;
|
|
const selectedGuildId = channelId ? undefined : (SelectedGuild.selectedGuildId ?? undefined);
|
|
const resolvedGuildId = guildId === null ? undefined : (guildId ?? channel?.guildId ?? selectedGuildId);
|
|
if (resolvedGuildId) {
|
|
const member = GuildMembers.getMember(resolvedGuildId, user.id);
|
|
if (member?.nick) {
|
|
name = member.nick;
|
|
}
|
|
} else if (channel) {
|
|
if (channel?.nicks?.[user.id]) {
|
|
name = channel.nicks[user.id];
|
|
}
|
|
}
|
|
return formatNicknameForStreamerMode(name);
|
|
}
|