From e1b16065b0bfdf7b9da5997dee2876602bfac793 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Fri, 18 Jul 2025 23:59:59 -0600 Subject: [PATCH] cache command --- src/modules/utility/cache.js | 75 ++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/modules/utility/cache.js diff --git a/src/modules/utility/cache.js b/src/modules/utility/cache.js new file mode 100644 index 0000000..ecd883e --- /dev/null +++ b/src/modules/utility/cache.js @@ -0,0 +1,75 @@ +const {readFile} = require("node:fs/promises"); + +const Command = require("#lib/command.js"); + +const {APIEndpoints} = require("#util/dconstants.js"); +const {Icons} = require("#util/constants.js"); + +const cache = new Command("cache"); +cache.category = "utility"; +cache.helpText = "Cache a user to your client from their ID"; +cache.usage = ""; +cache.callback = async function (msg, id) { + if (id == msg.author?.id ?? msg.user?.id) return "Can't cache yourself."; + + try { + await hf.bot.requestHandler.request("GET", APIEndpoints.USER(id), true); + } catch (err) { + if (err.code == 10013) { + return "User not found."; + } else { + return `${Icons.silk.error} Failed to validate user exists:\n\`\`\`\n${err}\`\`\``; + } + } + + let member; + if (msg.guildID) { + const guild = msg.channel.guild ?? hf.bot.guilds.get(msg.guildID); + member = guild?.members?.get(id); + } + + if (member != null) { + return `"Cached" <@${id}>\n-# User is in this server silly`; + } + + const attachments = []; + + try { + const clip = { + is_clip: true, + clip_created_at: new Date().toISOString(), + clip_participant_ids: [id], + application_id: hf.bot.application?.id, + }; + + const video = await readFile(require.resolve("#root/data/clip.mp4")); + + const {upload_url, upload_filename} = await hf.bot.requestHandler + .request("POST", APIEndpoints.MESSAGE_CREATE_ATTACHMENT_UPLOAD(msg.channel.id), true, { + files: [ + { + file_size: video.length, + filename: "clip.mp4", + ...clip, + }, + ], + }) + .then((res) => res.attachments[0]); + + await fetch(upload_url, {method: "PUT", body: video}); + + attachments.push({ + filename: "clip.mp4", + uploaded_filename: upload_filename, + is_thumbnail: true, + ...clip, + }); + } catch (err) { + return `${Icons.silk.error} Failed to create clip for caching:\n\`\`\`\n${err}\`\`\``; + } + + return { + content: `Cached <@${id}>`, + attachments, + }; +};