← back to browse
goat command

catbox

Upload file to catbox.moe

0
views
0
likes
0
installs

Aliases: cb

raw source
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs-extra');
const path = require('path');

module.exports = {
  config: {
    name: "catbox",
    aliases: ["cb"],
    version: "1.0",
    author: "Tenzo",
    countDown: 5,
    role: 0,
    shortDescription: "Upload file to catbox.moe",
    category: "media",
    guide: {
      en: "Reply to an image/video"
    }
  },

  onStart: async function ({ message, event, api }) {
    if (!event.messageReply || !event.messageReply.attachments) {
      return message.reply("Reply to an image or video");
    }

    const attachment = event.messageReply.attachments[0];
    api.setMessageReaction("⏳", event.messageID);

    const cacheDir = path.join(__dirname, 'cache');
    await fs.ensureDir(cacheDir);
    const tempPath = path.join(cacheDir, `upload_${Date.now()}.tmp`);

    try {
      const dlRes = await axios({ url: attachment.url, responseType: 'stream' });
      const writer = fs.createWriteStream(tempPath);
      dlRes.data.pipe(writer);
      await new Promise((resolve, reject) => {
        writer.on('finish', resolve);
        writer.on('error', reject);
      });

      const form = new FormData();
      form.append('reqtype', 'fileupload');
      form.append('fileToUpload', fs.createReadStream(tempPath));

      const uploadRes = await axios.post('https://catbox.moe/user/api.php', form, {
        headers: {
          ...form.getHeaders(),
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
          'Origin': 'https://catbox.moe',
          'Referer': 'https://catbox.moe/'
        }
      });

      await fs.unlink(tempPath);
      api.setMessageReaction("✅", event.messageID);
      message.reply(uploadRes.data);

    } catch (err) {
      api.setMessageReaction("❌", event.messageID);
      message.reply(`Failed: ${err.message}`);
      if (fs.existsSync(tempPath)) await fs.unlink(tempPath);
    }
  }
};

View raw file