Files
toho-miku/commands/profile.js
Jan Groß 696d0f136d Profile: Fix showcase card being out of order.
The showcase cards were rendered based on the order in which
the render calls returned within the slots.map call.
Using the original slot keys fixes this issue.
2023-08-04 12:07:47 +02:00

165 lines
5.9 KiB
JavaScript

require("dotenv").config();
const { SlashCommandBuilder } = require("discord.js");
const { Card } = require("../models");
const { UserUtils, Rendering, GeneralUtils } = require("../util");
const axios = require("axios");
const { CURRENCY_NAMES } = require("../config/constants");
const pageSize = 8;
//fetch all cards owned by the user and list them
module.exports = {
data: new SlashCommandBuilder()
.setName("profile")
.setDescription("View your profile")
.addUserOption((option) =>
option
.setName("user")
.setDescription("View someone else's profile")
.setRequired(false)
),
permissionLevel: 0,
async execute(interaction) {
await interaction.reply({ files:[ 'https://cdn.discordapp.com/attachments/856904078754971658/1019009533470842930/rendering-placeholder.gif']});
let discordUser = interaction.options.getUser("user") ? interaction.options.getUser("user") : interaction.member.user;
let user = await UserUtils.getUserByDiscordId(discordUser.id);
let profile = await user.getProfile();
let customStatus = profile.customStatus;
let userImage = discordUser.displayAvatarURL({format: 'png', size: 128}).split('webp')[0] + 'png';
let slots = ['slotOne', 'slotTwo', 'slotThree', 'slotFour'];
let renderedCards = [];
await Promise.all(slots.map(async slot => {
let card = await Card.findOne({ where: { id: profile[slot], burned: false } });
if (card) {
console.log(`Iterating card ${card.id}`);
let cardImage = await Rendering.renderCard(card);
renderedCards[slot] = cardImage;
} else {
renderedCards[slot] = `${process.env.ASSET_URL}/cards/card_cover.png`;
}
}));
let job = {
"type": "profile",
"size": {
"width": 1200,
"height": 600
},
"elements": [
{
"type": "image",
"asset": `${renderedCards['slotOne']}`,
"x": 25,
"y": 85,
"width": 300,
"height": 500
},
{
"type": "image",
"asset": `${renderedCards['slotTwo']}`,
"x": 375,
"y": 310,
"width": 175,
"height": 275
},
{
"type": "image",
"asset": `${renderedCards['slotThree']}`,
"x": 560,
"y": 310,
"width": 175,
"height": 275
},
{
"type": "image",
"asset": `${renderedCards['slotFour']}`,
"x": 745,
"y": 310,
"width": 175,
"height": 275
},
{
"type": "image",
"asset": userImage,
"x": 350,
"y": 50,
"width": 150,
"height": 150
},
{
"type": "text",
"text": discordUser.username.substr(0,15)+(discordUser.username.length>15?'...':''),
"fontSize": 32,
"x": 25,
"y": 20,
"width": 300,
"height": 30,
"horizontalAlignment": "center"
},
{
"type": "text",
"text": `CC: ${GeneralUtils.formatNumber(await Card.count({where: {userId: user.id}}))}`,
"fontSize": 30,
"x": 550,
"y": 20,
"width": 150,
"height": 30,
"horizontalAlignment": "left"
},
{
"type": "text",
"text": `LVL: ${await user.level().currentLevel}`,
"fontSize": 30,
"x": 700,
"y": 20,
"width": 150,
"height": 30,
"horizontalAlignment": "left"
},
{
"type": "text",
"text": `${GeneralUtils.formatNumber(await user.primaryCurrency)} ${CURRENCY_NAMES[1]}`,
"fontSize": 30,
"x": 850,
"y": 20,
"width": 170,
"height": 30,
"horizontalAlignment": "left"
},
{
"type": "text",
"text": `${await GeneralUtils.formatNumber(user.secondaryCurrency)} ${CURRENCY_NAMES[2]}`,
"fontSize": 30,
"x": 1020,
"y": 20,
"width": 170,
"height": 30,
"horizontalAlignment": "left"
},
{
"type": "text",
"text": customStatus,
"fontSize": 25,
"x": 550,
"y": 65,
"width": 625,
"height": 300,
"horizontalAlignment": "left"
}
]
}
console.log("Fetching ", );
if(process.env.NODE_ENV === "development") {
await interaction.channel.send(`\`\`\`${JSON.stringify(job)}\`\`\``);
}
let { data } = await axios.post(`${process.env.JOSE_ENDPOINT}/jobs`, job);
console.log("Fetched ", data);
await interaction.editReply({ files: [data["path"]] });
}
}