44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
import { createCommand } from "@shared/lib/utils";
|
|
import { SlashCommandBuilder, AttachmentBuilder } from "discord.js";
|
|
import { userService } from "@shared/modules/user/user.service";
|
|
import { generateStudentIdCard } from "@/graphics/studentID";
|
|
import { createWarningEmbed } from "@/lib/embeds";
|
|
|
|
export const profile = createCommand({
|
|
data: new SlashCommandBuilder()
|
|
.setName("profile")
|
|
.setDescription("View your or another user's profile")
|
|
.addUserOption(option =>
|
|
option.setName("user")
|
|
.setDescription("The 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 profiles.", "Profile Check")] });
|
|
return;
|
|
}
|
|
|
|
const user = await userService.getOrCreateUser(targetUser.id, targetUser.username);
|
|
|
|
const cardBuffer = await generateStudentIdCard({
|
|
username: targetUser.username,
|
|
avatarUrl: targetUser.displayAvatarURL({ extension: 'png', size: 256 }),
|
|
id: targetUser.id,
|
|
level: user!.level || 1,
|
|
xp: user!.xp || 0n,
|
|
au: user!.balance || 0n,
|
|
className: user!.class?.name || "D"
|
|
});
|
|
|
|
const attachment = new AttachmentBuilder(cardBuffer, { name: 'student-id.png' });
|
|
|
|
await interaction.editReply({ files: [attachment] });
|
|
|
|
}
|
|
});
|