diff --git a/public/static-assets/badges/itz40.avif b/public/static-assets/badges/itz40.avif new file mode 100644 index 000000000..00a76a819 Binary files /dev/null and b/public/static-assets/badges/itz40.avif differ diff --git a/public/static-assets/badges/itz40.gif b/public/static-assets/badges/itz40.gif new file mode 100644 index 000000000..ca9d949be Binary files /dev/null and b/public/static-assets/badges/itz40.gif differ diff --git a/public/static-assets/badges/itz40.png b/public/static-assets/badges/itz40.png new file mode 100644 index 000000000..72500ff06 Binary files /dev/null and b/public/static-assets/badges/itz40.png differ diff --git a/scripts/add-badge.ts b/scripts/add-badge.ts index 0692ef78b..31239e59f 100644 --- a/scripts/add-badge.ts +++ b/scripts/add-badge.ts @@ -5,17 +5,26 @@ import { logger } from "~/utils/logger"; const code = process.argv[2]?.trim(); const displayName = process.argv[3]?.trim(); +const rawHue = process.argv[4]?.trim(); +const parsedHue = rawHue ? Number(rawHue) : undefined; invariant(code, "code of badge is required (argument 1)"); -invariant(displayName, "display name of badge is required (argument 2)"); invariant(code === code.toLocaleLowerCase(), "code of badge must be lowercase"); +invariant(displayName, "display name of badge is required (argument 2)"); invariant( displayName !== displayName.toLocaleLowerCase(), "displayName of badge must have at least one uppercase letter", ); +invariant( + !parsedHue || + (parsedHue >= -360 && parsedHue <= 360 && Number.isInteger(parsedHue)), + "hue must be between -360 and 360", +); sql - .prepare("insert into badge (code, displayName) values ($code, $displayName)") - .run({ code, displayName }); + .prepare( + "insert into badge (code, displayName, hue) values ($code, $displayName, $hue)", + ) + .run({ code, displayName, hue: parsedHue ?? null }); logger.info(`Added new badge: ${displayName}`);