forked from syntaxbullet/AuroraBot-discord
45 lines
1.7 KiB
TypeScript
45 lines
1.7 KiB
TypeScript
import { createCommand } from "@shared/lib/utils";
|
|
import { SlashCommandBuilder } from "discord.js";
|
|
import { inventoryService } from "@shared/modules/inventory/inventory.service";
|
|
import { userService } from "@shared/modules/user/user.service";
|
|
import { createWarningEmbed } from "@lib/embeds";
|
|
import { getInventoryEmbed } from "@/modules/inventory/inventory.view";
|
|
|
|
export const inventory = createCommand({
|
|
data: new SlashCommandBuilder()
|
|
.setName("inventory")
|
|
.setDescription("View your or another user's inventory")
|
|
.addUserOption(option =>
|
|
option.setName("user")
|
|
.setDescription("User to view")
|
|
.setRequired(false)
|
|
),
|
|
execute: async (interaction) => {
|
|
await interaction.deferReply();
|
|
|
|
const targetUser = interaction.options.getUser("user") || interaction.user;
|
|
|
|
if (targetUser.bot) {
|
|
await interaction.editReply({ embeds: [createWarningEmbed("Bots do not have inventories.", "Inventory Check")] });
|
|
return;
|
|
}
|
|
|
|
const user = await userService.getOrCreateUser(targetUser.id, targetUser.username);
|
|
if (!user) {
|
|
await interaction.editReply({ embeds: [createWarningEmbed("Failed to load user data.", "Error")] });
|
|
return;
|
|
}
|
|
|
|
const items = await inventoryService.getInventory(user.id.toString());
|
|
|
|
if (!items || items.length === 0) {
|
|
await interaction.editReply({ embeds: [createWarningEmbed("Inventory is empty.", `${user.username}'s Inventory`)] });
|
|
return;
|
|
}
|
|
|
|
const embed = getInventoryEmbed(items, user.username);
|
|
|
|
await interaction.editReply({ embeds: [embed] });
|
|
}
|
|
});
|