← back to browse
goat command

api

API tester (GET/POST) with headers, params, auto JSON)

0
views
0
likes
0
installs
raw source
const axios = require("axios");
const qs = require("qs");

module.exports = {
  config: {
    name: "api",
    version: "1.0",
    author: "Azadx69x",
    role: 0,
    usePrefix: false,
    description: "API tester (GET/POST) with headers, params, auto JSON)",
    guide: `
/apitest get <url> [param:key=value&key2=value2]
/apitest post <url> <body> [header:Key=Value&Key2=Value2]`,
    category: "utility",
    cooldowns: 5
  },

  onStart: async function({ api, event, args }) {
    const method = args[0]?.toLowerCase();
    const url = args[1];
    const rest = args.slice(2).join(" ").trim();

    if (!method || !url) {
      return api.sendMessage(
        "Usage:\n/apitest get <url> [params]\n/apitest post <url> <body> [headers]",
        event.threadID,
        event.messageID
      );
    }

    let data = {};
    let headers = {};
    let params = {};

    try {
      const paramMatch = rest.match(/param:(.+)/);
      if (paramMatch) {
        params = qs.parse(paramMatch[1], { delimiter: "&" });
      }
            
      const headerMatch = rest.match(/header:(.+)/);
      if (headerMatch) {
        const h = qs.parse(headerMatch[1], { delimiter: "&" });
        headers = h;
      }
            
      if (method === "post") {
        const bodyPart = rest.replace(/header:.+/, "").trim();
        if (bodyPart) {
          try {
            data = JSON.parse(bodyPart);
          } catch {
            data = qs.parse(bodyPart, { delimiter: "&" });
          }
        }
        headers["Content-Type"] = headers["Content-Type"] || "application/json";
      }

      let res;
      if (method === "get") {
        res = await axios.get(url, { params, headers });
      } else if (method === "post") {
        res = await axios.post(url, data, { headers, params });
      } else {
        return api.sendMessage(
          "❌ Only GET and POST supported",
          event.threadID,
          event.messageID
        );
      }

      const reply = JSON.stringify(res.data, null, 2);
      if (reply.length > 19000) {
        return api.sendMessage(
          "✅ Response too long. Use pastebin: [example.com/paste]",
          event.threadID,
          event.messageID
        );
      }

      return api.sendMessage(reply, event.threadID, event.messageID);
    } catch (err) {
      const errorMsg = err.response
        ? `HTTP ${err.response.status} ${err.response.statusText}\n${JSON.stringify(err.response.data, null, 2)}`
        : err.message;
      return api.sendMessage("❌ Error:\n" + errorMsg, event.threadID, event.messageID);
    }
  }
};

View raw file