← back to browse
goat command

clear

Clear bot messages

0
views
0
likes
0
installs
raw source
module.exports = {
  config: {
    name: "clear",
    aliases: [],
    author: "Mohammad Maruf",
    version: "1.0.0",
    countDown: 5,
    role: 0,

    shortDescription: {
      en: "Clear bot messages"
    },

    longDescription: {
      en: "Unsend bot messages while keeping the latest 20 messages"
    },

    category: "admin",

    guide: {
      en: "{p}clear\n{p}clear all"
    }
  },

  onStart: async function ({ api, event, args }) {

    const threadID = event.threadID;
    const messageID = event.messageID;
    const botID = String(api.getCurrentUserID());

    /* =========================
       REACTION HELPER
    ========================= */

    const react = async emoji => {
      try {
        await api.setMessageReaction(
          emoji,
          messageID,
          () => {},
          true
        );
      } catch (_) {
        // Reaction unsupported হলেও command চলবে
      }
    };

    /* =========================
       LOADING
    ========================= */

    await react("⏳");

    try {

      /* =========================
         GET HISTORY
      ========================= */

      const messages = await api.getThreadHistory(
        threadID,
        100
      );

      if (
        !Array.isArray(messages) ||
        messages.length === 0
      ) {
        await react("✅");
        return;
      }

      /* =========================
         CHECK CLEAR ALL
      ========================= */

      const isAll =
        String(args[0] || "").toLowerCase() === "all";

      let targetMessages = [];

      if (isAll) {

        /*
         * clear all
         * History থেকে পাওয়া
         * সব Bot message
         */
        targetMessages = messages.filter(
          msg =>
            String(msg.senderID) === botID &&
            msg.messageID
        );

      } else {

        /*
         * clear
         *
         * Latest 20 message রেখে
         * তার আগের messageগুলো নেওয়া
         */
        const oldMessages = messages.slice(20);

        /*
         * শুধু Bot-এর message
         */
        targetMessages = oldMessages.filter(
          msg =>
            String(msg.senderID) === botID &&
            msg.messageID
        );
      }

      /* =========================
         NOTHING TO CLEAR
      ========================= */

      if (targetMessages.length === 0) {
        await react("✅");
        return;
      }

      /* =========================
         UNSEND
      ========================= */

      let success = 0;
      let failed = 0;

      for (const msg of targetMessages) {

        try {

          await api.unsendMessage(
            msg.messageID
          );

          success++;

          /*
           * API rate-limit কমানোর জন্য
           * ছোট delay
           */
          await new Promise(
            resolve => setTimeout(resolve, 150)
          );

        } catch (err) {

          failed++;

          console.error(
            `[CLEAR] Failed ${msg.messageID}:`,
            err?.message || err
          );
        }
      }

      /* =========================
         FINAL REACTION
      ========================= */

      if (success > 0 && failed === 0) {

        // সব সফল
        await react("✅");

      } else if (success > 0 && failed > 0) {

        // কিছু হয়েছে, কিছু হয়নি
        await react("⚠️");

      } else {

        // কিছুই unsend হয়নি
        await react("❌");
      }

    } catch (err) {

      console.error(
        "[CLEAR] ERROR:",
        err?.message || err
      );

      /*
       * কোনো error message পাঠাবে না
       */
      await react("❌");

      return;
    }
  }
};

View raw file