pkgs/bot/src/server/api.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
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<ApiMessageAttachment> {
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: new Date(a.uploadedAt),
};
}
|