Merge new rendering into master #60
@@ -71,8 +71,6 @@ module.exports = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let cardImage = await Rendering.renderCard(card);
|
let cardImage = await Rendering.renderCard(card);
|
||||||
//get base filename
|
|
||||||
let filename = cardImage.split("/").pop();
|
|
||||||
|
|
||||||
let description = "";
|
let description = "";
|
||||||
//Add a new line after every 4th (long) word or after a full stop
|
//Add a new line after every 4th (long) word or after a full stop
|
||||||
@@ -92,7 +90,7 @@ module.exports = {
|
|||||||
const embed = new EmbedBuilder()
|
const embed = new EmbedBuilder()
|
||||||
.setTitle(`${card.Character.name}`)
|
.setTitle(`${card.Character.name}`)
|
||||||
.setDescription(description)
|
.setDescription(description)
|
||||||
.setImage(`attachment://${filename}`)
|
.setImage(cardImage)
|
||||||
.setThumbnail(card.Character.Group.imageURL)
|
.setThumbnail(card.Character.Group.imageURL)
|
||||||
.addFields(
|
.addFields(
|
||||||
{ name: "Owned by", value: `<@${card.User.discordId}>` },
|
{ name: "Owned by", value: `<@${card.User.discordId}>` },
|
||||||
@@ -108,7 +106,7 @@ module.exports = {
|
|||||||
embed.setColor(0xff0000);
|
embed.setColor(0xff0000);
|
||||||
embed.addFields({ name: "Burned", value: "This card has been burned" });
|
embed.addFields({ name: "Burned", value: "This card has been burned" });
|
||||||
}
|
}
|
||||||
const message = await interaction.editReply({ embeds: [embed], files: [cardImage], fetchReply: true });
|
const message = await interaction.editReply({ embeds: [embed], fetchReply: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ const sharp = require('sharp');
|
|||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const { Character } = require('../models');
|
const { Character } = require('../models');
|
||||||
|
const axios = require('axios').default
|
||||||
|
|
||||||
const QualityColors = {
|
const QualityColors = {
|
||||||
1: {r: 0, g: 0, b: 0}, //bad
|
1: {r: 0, g: 0, b: 0}, //bad
|
||||||
@@ -53,61 +54,60 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!card.userId) {
|
/* if (!card.userId) {
|
||||||
return './assets/cards/card_cover.png';
|
return './assets/cards/card_cover.png';
|
||||||
}
|
} */
|
||||||
|
/**
|
||||||
let hash = crypto.createHash('md5').update(character.imageIdentifier + card.quality + (card.userId == 1 ? 'unclaimed' : 'claimed')).digest('hex');
|
let hash = crypto.createHash('md5').update(character.imageIdentifier + card.quality + (card.userId == 1 ? 'unclaimed' : 'claimed')).digest('hex');
|
||||||
//TODO: Add switch to turn off or bypass caching
|
//TODO: Add switch to turn off or bypass caching
|
||||||
if (fs.existsSync(`./assets/image_cache/${hash}.gif`)) {
|
if (fs.existsSync(`./assets/image_cache/${hash}.gif`)) {
|
||||||
return `./assets/image_cache/${hash}.gif`;
|
return `./assets/image_cache/${hash}.gif`;
|
||||||
}
|
}
|
||||||
|
**/
|
||||||
|
console.log(`Rendering card or character ${character.name} ${character.imageIdentifier}`);
|
||||||
|
|
||||||
console.log(`Rendering card ${hash} for character ${character.name} ${character.imageIdentifier}`);
|
let characterImage = `http://vps5.minzkraut.com:6789/cards/${character.imageIdentifier}`;
|
||||||
|
console.log("Character iomage ", characterImage);
|
||||||
let filetype = character.imageIdentifier.split('.').pop();
|
let job = {
|
||||||
let isAnimated = ['gif', 'webp'].includes(filetype);
|
"type": "card",
|
||||||
|
"size": {
|
||||||
let border = await sharp(`./assets/overlays/border.svg`).tint(QualityColors[card.quality]).toBuffer();
|
"width": 600,
|
||||||
//BUGBUG: Custom fonts not loading
|
"height": 1000
|
||||||
let label = Buffer.from(`
|
},
|
||||||
<svg width="300" height="500">
|
"elements": [
|
||||||
<text x="50%" y="95%" text-anchor="middle" style="font-size:28px;">${character.name}</text>
|
{
|
||||||
</svg>
|
"type": "image",
|
||||||
`);
|
"asset": `${characterImage}`,
|
||||||
|
"x": 0,
|
||||||
let cardImage;
|
"y": 300,
|
||||||
try {
|
"width": 600,
|
||||||
console.log("Loading character image");
|
"height": 1000
|
||||||
cardImage = await sharp(`./assets/cards/${character.imageIdentifier}`,
|
},
|
||||||
{ animated: isAnimated, pages: (isAnimated ? -1 : 1) });
|
{
|
||||||
await cardImage.toBuffer();
|
"type": "text",
|
||||||
} catch (error) {
|
"text": `${character.name}`,
|
||||||
console.log(`Missing character image: ${character.imageIdentifier}`);
|
"fontSize": 55,
|
||||||
cardImage = await sharp(`./assets/cards/missing_image.png`);
|
"x": 0,
|
||||||
}
|
"y": 700,
|
||||||
console.log("rendering");
|
"width": 600,
|
||||||
await cardImage.resize(300, 500);
|
"height": 300,
|
||||||
await cardImage.composite([
|
"horizontalAlignment": "center"
|
||||||
{input: border, top:0, left: 0, tile: true},
|
},
|
||||||
{input: label, top:0, left: 0, tile: true}]);
|
{
|
||||||
//BUGBUG: Grayscale does not apply to card border
|
"type": "image",
|
||||||
if (card.userId === 1) {
|
"asset": "https://cdn.discordapp.com/attachments/1083687175998152714/1113486254953222205/rainbow_overlay.png",
|
||||||
await cardImage.grayscale()
|
"x": 0,
|
||||||
.modulate({
|
"y": 300,
|
||||||
brightness: 0.5
|
"width": 600,
|
||||||
});
|
"height": 1000
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isAnimated) {
|
console.log("Fetching ", );
|
||||||
await cardImage.gif({effort: 1})
|
let { data } = await axios.post('https://jose.toho.mnz.gg/jobs', job);
|
||||||
} else {
|
console.log("Fetched ", data);
|
||||||
await cardImage.png();
|
return data["path"];
|
||||||
}
|
|
||||||
|
|
||||||
let extension = isAnimated ? 'gif' : 'png';
|
|
||||||
await cardImage.toFile(`./assets/image_cache/${hash}.${extension}`);
|
|
||||||
|
|
||||||
return `./assets/image_cache/${hash}.${extension}`;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user