Refactor/unify temp image handling
This commit is contained in:
parent
78003e498d
commit
36477ed253
3 changed files with 70 additions and 84 deletions
66
utils/tempimages.js
Normal file
66
utils/tempimages.js
Normal file
|
@ -0,0 +1,66 @@
|
|||
import * as logger from "../utils/logger.js";
|
||||
import { readdir, lstat, rm, writeFile } from "fs/promises";
|
||||
|
||||
export async function upload(client, result, context, interaction = false) {
|
||||
const filename = `${Math.random().toString(36).substring(2, 15)}.${result.name.split(".")[1]}`;
|
||||
await writeFile(`${process.env.TEMPDIR}/${filename}`, result.file);
|
||||
const imageURL = `${process.env.TMP_DOMAIN || "https://tmp.projectlounge.pw"}/${filename}`;
|
||||
const payload = {
|
||||
embeds: [{
|
||||
color: 16711680,
|
||||
title: "Here's your image!",
|
||||
url: imageURL,
|
||||
image: {
|
||||
url: imageURL
|
||||
},
|
||||
footer: {
|
||||
text: "The result image was more than 8MB in size, so it was uploaded to an external site instead."
|
||||
},
|
||||
}]
|
||||
};
|
||||
if (interaction) {
|
||||
await context[context.acknowledged ? "editOriginalMessage" : "createMessage"](payload);
|
||||
} else {
|
||||
await client.createMessage(context.channel.id, Object.assign(payload, {
|
||||
messageReference: {
|
||||
channelID: context.channel.id,
|
||||
messageID: context.id,
|
||||
guildID: context.channel.guild ? context.channel.guild.id : undefined,
|
||||
failIfNotExists: false
|
||||
},
|
||||
allowedMentions: {
|
||||
repliedUser: false
|
||||
}
|
||||
}));
|
||||
}
|
||||
if (process.env.THRESHOLD) {
|
||||
process.env.DIRSIZECACHE += result.file.length;
|
||||
await removeOldImages();
|
||||
}
|
||||
}
|
||||
|
||||
export async function removeOldImages() {
|
||||
if (process.env.DIRSIZECACHE > process.env.THRESHOLD) {
|
||||
const files = (await readdir(process.env.TEMPDIR)).map((file) => {
|
||||
return lstat(`${process.env.TEMPDIR}/${file}`).then((stats) => {
|
||||
if (stats.isSymbolicLink()) return;
|
||||
return {
|
||||
name: file,
|
||||
size: stats.size,
|
||||
ctime: stats.ctime
|
||||
};
|
||||
});
|
||||
}).filter(Boolean);
|
||||
const resolvedFiles = await Promise.all(files);
|
||||
process.env.DIRSIZECACHE = resolvedFiles.reduce((a, b)=>{
|
||||
return a + b.size;
|
||||
}, 0);
|
||||
const oldestFiles = resolvedFiles.sort((a, b) => a.ctime - b.ctime);
|
||||
while (process.env.DIRSIZECACHE > process.env.THRESHOLD) {
|
||||
await rm(`${process.env.TEMPDIR}/${oldestFiles[0].name}`);
|
||||
process.env.DIRSIZECACHE -= oldestFiles[0].size;
|
||||
logger.log(`Removed oldest image file: ${oldestFiles[0].name}`);
|
||||
oldestFiles.shift();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue