import { CDNRoutes, ImageFormat, RouteBases } from "discord-api-types/v10"; import type { User as DiscordUser, GuildMember } from "discord.js"; import type { Attachment } from "@/database"; import { getUser } from "./discord"; import type { User as UserProfile, Attachment as ApiMessageAttachment, } from "@stealth-developers/api"; export function avatar(id: string, avatarHash?: string | null): string { if (!avatarHash) { return "https://cdn.discordapp.com/icons/895998762630127616/36c6e14d0933eb338826599b632df818.webp?size=80&quality=lossless"; } return `${RouteBases.cdn}${CDNRoutes.userAvatar(id, avatarHash, ImageFormat.WebP)}`; } export function name(member: GuildMember): string { return member.nickname ?? member.user.displayName ?? member.user.username; } export function marshallIntoApiUser(user: GuildMember | DiscordUser): UserProfile { const isMember = "roles" in user; const discordUser = isMember ? user.user : user; return { id: discordUser.id, name: isMember ? name(user) : discordUser.displayName || discordUser.username, avatarUrl: avatar(discordUser.id, discordUser.avatar), isModerator: isMember ? user.roles.cache.has("Moderator") : false, }; } export async function intoApiAttachment(a: Attachment): Promise { const user = a.authorId ? await getUser(a.authorId) : null; return { id: a.id, ownerType: a.ownerType as "ticket" | "ticket_message" | "bug", owner: user, fileName: a.fileName, contentType: a.contentType, size: a.size, bucket: a.bucket, key: a.key, url: a.url, uploadedAt: a.uploadedAt.toUTCString(), }; }