forked from syntaxbullet/AuroraBot-discord
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { EmbedBuilder } from "discord.js";
|
|
import type { ItemUsageData } from "@shared/lib/types";
|
|
import { EffectType } from "@shared/lib/constants";
|
|
|
|
/**
|
|
* Inventory entry with item details
|
|
*/
|
|
interface InventoryEntry {
|
|
quantity: bigint | null;
|
|
item: {
|
|
id: number;
|
|
name: string;
|
|
[key: string]: any;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates an embed displaying a user's inventory
|
|
*/
|
|
export function getInventoryEmbed(items: InventoryEntry[], username: string): EmbedBuilder {
|
|
const description = items.map(entry => {
|
|
return `**${entry.item.name}** x${entry.quantity}`;
|
|
}).join("\n");
|
|
|
|
return new EmbedBuilder()
|
|
.setTitle(`📦 ${username}'s Inventory`)
|
|
.setDescription(description)
|
|
.setColor(0x3498db); // Blue
|
|
}
|
|
|
|
/**
|
|
* Creates an embed showing the results of using an item
|
|
*/
|
|
export function getItemUseResultEmbed(results: string[], item?: { name: string, iconUrl: string | null, usageData: any }): EmbedBuilder {
|
|
const description = results.map(r => `• ${r}`).join("\n");
|
|
|
|
// Check if it was a lootbox
|
|
const isLootbox = item?.usageData?.effects?.some((e: any) => e.type === EffectType.LOOTBOX);
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setDescription(description)
|
|
.setColor(isLootbox ? 0xFFD700 : 0x2ecc71); // Gold for lootbox, Green otherwise
|
|
|
|
if (isLootbox && item) {
|
|
embed.setTitle(`🎁 ${item.name} Opened!`);
|
|
if (item.iconUrl) {
|
|
embed.setThumbnail(item.iconUrl);
|
|
}
|
|
} else {
|
|
embed.setTitle(item ? `✅ Used ${item.name}` : "✅ Item Used!");
|
|
}
|
|
|
|
return embed;
|
|
}
|