//probably the messiest code i've ever written but it works so :) import { Badges } from "../public/assets/badges/BadgesEncoded"; import { getFlags } from "./getFlags"; import * as LanyardTypes from "./LanyardTypes"; import { encodeBase64 } from "./toBase64"; import { blue, green, gray, gold, red } from "./defaultAvatars" type Parameters = { theme?: string; bg?: string; animated?: string; hideDiscrim?: string; hideStatus?: string; borderRadius?: string; }; const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise => { let avatarBorderColor: string = "#747F8D", userStatus: string = "", avatarExtension: string = "webp", statusExtension: string = "webp", activity: any = false, backgroundColor: string = "1a1c1f", theme = "dark", discrim = "show", hideStatus = "false", borderRadius = "10px"; let avatar: String; if (body.data.discord_user.avatar) { avatar = await encodeBase64(`https://cdn.discordapp.com/avatars/${body.data.discord_user.id}/${body.data.discord_user.avatar}.${avatarExtension}?size=256`); } else { let lastDigit = Number(body.data.discord_user.discriminator.substr(-1)) if (lastDigit >= 5) { lastDigit -= 5 } // the default avatar that discord uses depends on the last digit of the user's discriminator switch (lastDigit) { case 1: avatar = gray; break; case 2: avatar = green; break; case 3: avatar = gold; break; case 4: avatar = red; break; default: avatar = blue; break } } if (body.data.activities[0]?.emoji?.animated) statusExtension = "gif"; if (body.data.discord_user.avatar && body.data.discord_user.avatar.startsWith("a_")) avatarExtension = "gif"; if ( body.data.activities.length > 0 && body.data.activities[Object.keys(body.data.activities).length - 1].type === 0 ) activity = body.data.activities[Object.keys(body.data.activities).length - 1]; if (params.animated === "false") avatarExtension = "webp"; if (params.hideStatus === "true") hideStatus = "true"; if (params.hideDiscrim === "true") discrim = "hide"; if (params.theme === "light") { backgroundColor = "#eee"; theme = "light"; } if (params.bg) backgroundColor = params.bg; if (params.borderRadius) borderRadius = params.borderRadius; switch (body.data.discord_status) { case "online": avatarBorderColor = "#43B581"; break; case "idle": avatarBorderColor = "#FAA61A"; break; case "dnd": avatarBorderColor = "#F04747"; break; case "offline": avatarBorderColor = "#747F8D"; break; } const flags: string[] = getFlags(body.data.discord_user.public_flags); if (body.data.activities[0] && body.data.activities[0].state && body.data.activities[0].type === 4) userStatus = body.data.activities[0].state; return `

${body.data.discord_user.username}${discrim !== "hide" ? `#${body.data.discord_user.discriminator }` : "" }

${flags .map( v => ` ` ) .join("")}
${userStatus.length > 0 && hideStatus !== "true" ? `

${body.data.activities[0].emoji && body.data.activities[0].emoji.id ? ` ` : `` } ${body.data.activities[0].emoji && !body.data.activities[0].emoji.id ? body.data.activities[0].emoji.name + " " + userStatus.replace(/\&/g, "and") : userStatus.replace(/\&/g, "and") }

` : `` }
${activity ? `
${activity.assets && activity.assets.large_image ? ` ` : ` ` } ${activity.assets && activity.assets.small_image ? ` ` : `` }

PLAYING A GAME...

${activity.name}

${activity.details ? `

${activity.details}

` : `` }
` : `` } ${body.data.listening_to_spotify === true && body.data.activities[Object.keys(body.data.activities).length - 1].type === 2 ? `

LISTENING NOW...

${body.data.spotify.song.replace(/\&/g, "and")}

By ${body.data.spotify.artist.replace(/\;/g, ",").replace(/\&/g, "and")}

` : `` } ${!activity && body.data.listening_to_spotify === false ? `

I'm not currently doing anything!

` : `` }
`; }; export default renderCard;