104 lines
3.1 KiB
TypeScript
104 lines
3.1 KiB
TypeScript
import type { CommandMessage } from "../../../core/types/commands";
|
|
import type Amayo from "../../../core/client";
|
|
import { prisma } from "../../../core/database/prisma";
|
|
|
|
export const command: CommandMessage = {
|
|
name: "debug-inv",
|
|
type: "message",
|
|
aliases: ["dinv"],
|
|
cooldown: 0,
|
|
category: "Admin",
|
|
description: "Muestra información detallada del inventario para debug.",
|
|
usage: "debug-inv [@user]",
|
|
run: async (message, args, _client: Amayo) => {
|
|
if (message.author.id !== process.env.OWNER_ID) {
|
|
await message.reply("❌ Solo el owner puede usar este comando.");
|
|
return;
|
|
}
|
|
|
|
const targetUser = message.mentions.users.first() ?? message.author;
|
|
const userId = targetUser.id;
|
|
const guildId = message.guild!.id;
|
|
|
|
const entries = await prisma.inventoryEntry.findMany({
|
|
where: { userId, guildId },
|
|
include: { item: true },
|
|
});
|
|
|
|
let output = `🔍 **Inventario de <@${userId}>**\n\n`;
|
|
|
|
for (const entry of entries) {
|
|
const item = entry.item;
|
|
const state = entry.state as any;
|
|
const instances = state?.instances ?? [];
|
|
const props = item.props as any;
|
|
|
|
output += `**${item.name}** (\`${item.key}\`)\n`;
|
|
output += `• Stackable: ${item.stackable}\n`;
|
|
output += `• Quantity: ${entry.quantity}\n`;
|
|
output += `• Instances: ${instances.length}\n`;
|
|
|
|
if (props?.tool) {
|
|
output += `• Tool: type=${props.tool.type}, tier=${
|
|
props.tool.tier ?? 0
|
|
}\n`;
|
|
}
|
|
|
|
if (props?.breakable) {
|
|
output += `• Breakable: enabled=${
|
|
props.breakable.enabled !== false
|
|
}, max=${props.breakable.maxDurability}\n`;
|
|
}
|
|
|
|
if (instances.length > 0) {
|
|
instances.forEach((inst: any, idx: number) => {
|
|
output += ` └ [${idx}] dur: ${inst.durability ?? "N/A"}\n`;
|
|
});
|
|
}
|
|
|
|
if (!item.stackable && entry.quantity > 1 && instances.length === 0) {
|
|
output += `⚠️ **CORRUPTO**: Non-stackable con qty>1 sin instances\n`;
|
|
}
|
|
|
|
output += "\n";
|
|
}
|
|
|
|
// Verificar equipo
|
|
const equipment = await prisma.playerEquipment.findUnique({
|
|
where: { userId_guildId: { userId, guildId } },
|
|
});
|
|
|
|
if (equipment) {
|
|
output += `🧰 **Equipo:**\n`;
|
|
if (equipment.weaponItemId) {
|
|
const weapon = await prisma.economyItem.findUnique({
|
|
where: { id: equipment.weaponItemId },
|
|
});
|
|
output += `• Arma: ${weapon?.name ?? "Desconocida"}\n`;
|
|
} else {
|
|
output += `• Arma: ❌ NINGUNA\n`;
|
|
}
|
|
|
|
if (equipment.armorItemId) {
|
|
const armor = await prisma.economyItem.findUnique({
|
|
where: { id: equipment.armorItemId },
|
|
});
|
|
output += `• Armadura: ${armor?.name ?? "Desconocida"}\n`;
|
|
}
|
|
|
|
if (equipment.capeItemId) {
|
|
const cape = await prisma.economyItem.findUnique({
|
|
where: { id: equipment.capeItemId },
|
|
});
|
|
output += `• Capa: ${cape?.name ?? "Desconocida"}\n`;
|
|
}
|
|
}
|
|
|
|
// Dividir en chunks si es muy largo
|
|
const chunks = output.match(/[\s\S]{1,1900}/g) ?? [output];
|
|
for (const chunk of chunks) {
|
|
await message.reply(chunk);
|
|
}
|
|
},
|
|
};
|