From 487ee866ba02271fe79b747c9688a2594b453349 Mon Sep 17 00:00:00 2001 From: Minzkraut Date: Mon, 12 Jun 2023 21:55:13 +0200 Subject: [PATCH] Cleanup legacy rendering code and files also removes dockerfile and imagemagick. --- Dockerfile | 3 --- commands/profile.js | 32 +++++--------------------------- docker-compose.yml | 2 +- util/compositing.js | 42 ------------------------------------------ util/rendering.js | 18 +----------------- 5 files changed, 7 insertions(+), 90 deletions(-) delete mode 100644 Dockerfile delete mode 100644 util/compositing.js diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index d0f4688..0000000 --- a/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -# syntax=docker/dockerfile:1 -FROM node:16.9.0-alpine -RUN apk add --no-cache imagemagick \ No newline at end of file diff --git a/commands/profile.js b/commands/profile.js index af330e3..de05285 100644 --- a/commands/profile.js +++ b/commands/profile.js @@ -1,11 +1,9 @@ require("dotenv").config(); -const { SlashCommandBuilder, MessageAttachment, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js"); -const { Card, User, Character } = require("../models"); -const { UserUtils, Compositing, Rendering } = require("../util"); +const { SlashCommandBuilder } = require("discord.js"); +const { Card } = require("../models"); +const { UserUtils, Rendering } = require("../util"); const axios = require("axios"); -const sharp = require("sharp"); const { CURRENCY_NAMES } = require("../config/constants"); -const fs = require('fs'); const pageSize = 8; @@ -29,17 +27,8 @@ module.exports = { let profile = await user.getProfile(); - let customStatus = this.encodeStr(profile.customStatus); + let customStatus = profile.customStatus; - let profileTemplate = fs.readFileSync('/app/assets/profile/profile.svg').toString(); - profileTemplate = profileTemplate.replace(/{{USERNAME}}/g, this.encodeStr(discordUser.username.substr(0,15)+(discordUser.username.length>15?'...':''))); - profileTemplate = profileTemplate.replace(/{{PROFILE_TEXT}}/g, customStatus ); - profileTemplate = profileTemplate.replace(/{{HEADER_COLOR}}/g, '190,31,97'); - profileTemplate = profileTemplate.replace(/{{CC}}/g, await Card.count({where: {userId: user.id}})); - profileTemplate = profileTemplate.replace(/{{LVL}}/g, await user.level().currentLevel); - profileTemplate = profileTemplate.replace(/{{CUR_1}}/g, `${await user.primaryCurrency} ${CURRENCY_NAMES[1]}`); - profileTemplate = profileTemplate.replace(/{{CUR_2}}/g, `${await user.secondaryCurrency} ${CURRENCY_NAMES[2]}`); - let userImage = discordUser.displayAvatarURL({format: 'png', size: 128}).split('webp')[0] + 'png'; let slots = ['slotOne', 'slotTwo', 'slotThree', 'slotFour']; @@ -104,7 +93,7 @@ module.exports = { }, { "type": "text", - "text": this.encodeStr(discordUser.username.substr(0,15)+(discordUser.username.length>15?'...':'')), + "text": discordUser.username.substr(0,15)+(discordUser.username.length>15?'...':''), "fontSize": 32, "x": 25, "y": 20, @@ -169,16 +158,5 @@ module.exports = { let { data } = await axios.post(`${process.env.JOSE_ENDPOINT}/jobs`, job); console.log("Fetched ", data); await interaction.editReply({ files: [data["path"]] }); - }, - encodeStr: function(str) { - let charMapping = { - '&': '&', - '"': '"', - '<': '<', - '>': '>' - }; - return str.replace(/([\&"<>])/g, function(str, item) { - return charMapping[item]; - }); } } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index e093317..4b5fbee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: bot: - build: . + image: node:16.9.0-alpine command: sh -c "npm config set cache /app/.npm_cache --global && npm install && npx sequelize db:migrate && node ." restart: unless-stopped environment: diff --git a/util/compositing.js b/util/compositing.js deleted file mode 100644 index eb660db..0000000 --- a/util/compositing.js +++ /dev/null @@ -1,42 +0,0 @@ -const { spawn } = require('child_process'); -const crypto = require('crypto'); -const fs = require('fs'); -const { Card } = require('../models'); - -//TODO: Handle missing images -module.exports = { - name: "Compositing", - renderProfile: async function(profile, background, renderedCards) { - let hash = crypto.createHash('md5').update(JSON.stringify(profile) + background).digest('hex'); - - let outFile = `/app/assets/image_cache/profiles/${hash}.gif`; - console.log('Rendering profile to ' + outFile); - - //composite {overlay} {background} [{mask}] [-compose {method}] {result} - let args = ['png:-', 'null:', - '\(', `${renderedCards[0]}`, '-coalesce', '\)', - '-geometry', '+25+85', '-compose', 'over', '-layers', 'composite', - 'null:', '\(', `${renderedCards[1]}`, '-coalesce', '-resize', '170x283', '\)', - '-geometry', '+350+300', '-compose', 'over', '-layers', 'composite', - 'null:', '\(', `${renderedCards[2]}`, '-coalesce', '-resize', '170x283', '\)', - '-geometry', '+535+300', '-compose', 'over', '-layers', 'composite', - 'null:', '\(', `${renderedCards[3]}`, '-coalesce', '-resize', '170x283', '\)', - '-geometry', '+720+300', '-compose', 'over', '-layers', 'composite', - '-layers', 'optimize', outFile]; - - console.log('GM Args: ' + args); - - const composite = spawn('convert', args); - composite.stdin.write(background); - composite.stdin.end(); - - composite.stderr.on('data', (data) => { - console.log(`stdout: ${data}`); - }); - const exitCode = await new Promise( (resolve, reject) => { - composite.on('close', resolve); - }) - - return outFile; - } -} diff --git a/util/rendering.js b/util/rendering.js index cf8fad3..77eb248 100644 --- a/util/rendering.js +++ b/util/rendering.js @@ -1,7 +1,4 @@ require("dotenv").config(); -const sharp = require('sharp'); -const crypto = require('crypto'); -const fs = require('fs'); const { Character } = require('../models'); const axios = require('axios').default @@ -14,7 +11,6 @@ const QualityColors = { 6: {r: 255, g: 255, b: 0} //shiny } -//TODO: Handle missing images module.exports = { name: "Rendering", renderCardStack: async function(cards) { @@ -71,17 +67,7 @@ module.exports = { } }); -/* if (!card.userId) { - return './assets/cards/card_cover.png'; - } */ - /** - 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 - if (fs.existsSync(`./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 ${card.id} ${character.name} ${character.imageIdentifier}`); let characterImage = `${process.env.ASSET_URL}/cards/${character.imageIdentifier}`; @@ -91,7 +77,6 @@ module.exports = { character.name = ' '; } - console.log("Character iomage ", characterImage); let job = { "type": "card", "size": { @@ -132,6 +117,5 @@ module.exports = { let { data } = await axios.post(`${process.env.JOSE_ENDPOINT}/jobs`, job); console.log("Fetched ", data["path"]); return data["path"]; - } }