feat: implement comprehensive item management system with admin UI, API, and asset handling utilities.

This commit is contained in:
syntaxbullet
2026-02-06 12:19:14 +01:00
parent 109b36ffe2
commit 34958aa220
22 changed files with 3718 additions and 15 deletions

View File

View File

@@ -1,11 +1,16 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js";
import { createBaseEmbed } from "@/lib/embeds";
import { resolveAssetUrl } from "@shared/lib/assets";
export function getShopListingMessage(item: { id: number; name: string; description: string | null; formattedPrice: string; iconUrl: string | null; imageUrl: string | null; price: number | bigint }) {
// Resolve asset URLs to full URLs for Discord embeds
const resolvedIconUrl = resolveAssetUrl(item.iconUrl);
const resolvedImageUrl = resolveAssetUrl(item.imageUrl);
const embed = createBaseEmbed(`Shop: ${item.name}`, item.description || "No description available.", "Green")
.addFields({ name: "Price", value: item.formattedPrice, inline: true })
.setThumbnail(item.iconUrl || null)
.setImage(item.imageUrl || null)
.setThumbnail(resolvedIconUrl)
.setImage(resolvedImageUrl)
.setFooter({ text: "Click the button below to purchase instantly." });
const buyButton = new ButtonBuilder()

View File

@@ -1,6 +1,7 @@
import { EmbedBuilder } from "discord.js";
import type { ItemUsageData } from "@shared/lib/types";
import { EffectType } from "@shared/lib/constants";
import { resolveAssetUrl } from "@shared/lib/assets";
/**
* Inventory entry with item details
@@ -43,8 +44,9 @@ export function getItemUseResultEmbed(results: string[], item?: { name: string,
if (isLootbox && item) {
embed.setTitle(`🎁 ${item.name} Opened!`);
if (item.iconUrl) {
embed.setThumbnail(item.iconUrl);
const resolvedIconUrl = resolveAssetUrl(item.iconUrl);
if (resolvedIconUrl) {
embed.setThumbnail(resolvedIconUrl);
}
} else {
embed.setTitle(item ? `✅ Used ${item.name}` : "✅ Item Used!");