← back to browse
goat command

baby

Baby AI auto reply

0
views
0
likes
0
installs

Aliases: bby, xan, bbz, jan, বেবি

raw source
const axios = require("axios");

/* =========================================================
   BABY AI - GOATBOT
   API: https://noobs-api.top/dipto/baby2
   ========================================================= */

module.exports.config = {
  name: "baby",
  version: "3.1.0",
  role: 0,
  author: "SUJON - BOSS",
  countDown: 0,
  category: "AI",
  shortDescription: "Baby AI auto reply",
  longDescription: "Baby AI using Dipto API",
  guide: {
    en: "{pn} [text]"
  },
  aliases: [
    "bby",
    "xan",
    "bbz",
    "jan",
    "বেবি"
  ]
};

/* =========================================================
   API
   ========================================================= */

const BASE_URL = "https://noobs-api.top";

/* =========================================================
   DUPLICATE LOCK
   ========================================================= */

const processedMessages = new Set();

function isAlreadyProcessed(event) {
  const id = event?.messageID;

  if (!id) return false;

  if (processedMessages.has(id)) {
    return true;
  }

  processedMessages.add(id);

  setTimeout(() => {
    processedMessages.delete(id);
  }, 30000);

  return false;
}

/* =========================================================
   TYPING
   ========================================================= */

async function typing(api, threadID, status) {
  try {
    if (typeof api.sendTypingIndicator === "function") {
      await api.sendTypingIndicator(threadID, status);
    }
  } catch (e) {
    console.log("⚠️ Typing error:", e.message);
  }
}

/* =========================================================
   API REQUEST
   ========================================================= */

async function getReply(text, senderID) {
  try {

    const res = await axios.get(
      `${BASE_URL}/dipto/baby2`,
      {
        params: {
          text: text,
          senderID: senderID
        },
        timeout: 15000
      }
    );

    console.log("🤖 BABY API:", res.data);

    return {
      reply:
        res.data?.reply ||
        "😶 আমি কিছু বলতে পারছি না…",

      react:
        res.data?.react ||
        ""
    };

  } catch (e) {

    console.log(
      "❌ BABY API ERROR:",
      e.response?.data || e.message
    );

    return {
      reply: "❌ এখন কথা বলতে পারছি না…",
      react: ""
    };
  }
}

/* =========================================================
   SAVE REPLY
   ========================================================= */

function saveReply(info, event) {

  try {

    if (
      global.GoatBot &&
      global.GoatBot.onReply &&
      info?.messageID
    ) {

      global.GoatBot.onReply.set(
        info.messageID,
        {
          commandName: module.exports.config.name,
          messageID: info.messageID,
          author: event.senderID,
          type: "baby"
        }
      );

      console.log(
        "✅ Baby reply handler saved:",
        info.messageID
      );
    }

  } catch (e) {

    console.log(
      "⚠️ Save reply error:",
      e.message
    );
  }
}

/* =========================================================
   SEND BABY REPLY
   ========================================================= */

async function sendBabyReply(api, event, result) {

  return new Promise((resolve, reject) => {

    api.sendMessage(
      result.reply,
      event.threadID,

      async (err, info) => {

        if (err) {

          console.log(
            "❌ Send error:",
            err
          );

          return reject(err);
        }

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

        if (
          result.react &&
          event.messageID &&
          typeof api.setMessageReaction === "function"
        ) {

          try {

            await api.setMessageReaction(
              result.react,
              event.messageID,
              () => {},
              true
            );

          } catch (e) {

            console.log(
              "⚠️ Reaction error:",
              e.message
            );
          }
        }

        /* ================= SAVE REPLY ================= */

        saveReply(info, event);

        resolve(info);
      },

      event.messageID
    );
  });
}

/* =========================================================
   GREETING
   ========================================================= */

const greetingReplies = [
  "হ্যা জান বলো 🤌💋",
  "কী চাই তোমার 😒",
  "তুমি কি আমাকে মিস করো 🥺",
  "এই যে আমি আছি 💖",
  "বারবার ডাকছো কেন 😏"
];

/* =========================================================
   SEND GREETING
   ========================================================= */

async function sendGreeting(api, event) {

  const reply =
    greetingReplies[
      Math.floor(
        Math.random() * greetingReplies.length
      )
    ];

  await typing(
    api,
    event.threadID,
    true
  );

  await new Promise(
    resolve =>
      setTimeout(resolve, 3000)
  );

  await typing(
    api,
    event.threadID,
    false
  );

  return new Promise((resolve, reject) => {

    api.sendMessage(
      reply,
      event.threadID,

      (err, info) => {

        if (err) {

          console.log(
            "❌ Greeting error:",
            err
          );

          return reject(err);
        }

        saveReply(info, event);

        resolve(info);
      }
    );

  });
}

/* =========================================================
   TRIGGERS
   ========================================================= */

const triggers = [
  "baby",
  "bby",
  "xan",
  "bbz",
  "jan",
  "বেবি"
];

const triggerRegex =
  /^(baby|bby|xan|bbz|jan|বেবি)(?:\s+|$)/i;

/* =========================================================
   COMMAND
   ========================================================= */

module.exports.onStart = async function ({
  api,
  event,
  args
}) {

  /*
   * যদি একই message অন্য handler ইতিমধ্যে process করে,
   * তাহলে আবার reply করবে না।
   */
  if (isAlreadyProcessed(event)) {
    return;
  }

  const q =
    args
      .join(" ")
      .trim();

  if (!q) {

    return api.sendMessage(
      "💖 আমাকে কিছু বলো জান…",
      event.threadID,
      event.messageID
    );
  }

  await typing(
    api,
    event.threadID,
    true
  );

  await new Promise(
    resolve =>
      setTimeout(resolve, 2000)
  );

  await typing(
    api,
    event.threadID,
    false
  );

  const result =
    await getReply(
      q,
      event.senderID
    );

  return sendBabyReply(
    api,
    event,
    result
  );
};

/* =========================================================
   REPLY HANDLER
   ========================================================= */

module.exports.onReply = async function ({
  api,
  event,
  Reply
}) {

  if (!event.body) return;

  const text =
    event.body.trim();

  if (!text) return;

  /*
   * IMPORTANT:
   * এখানে duplicate lock ব্যবহার করা হয়নি।
   * কারণ onChat যেন reply event আটকাতে না পারে।
   */

  console.log(
    "💬 Baby reply received:",
    text
  );

  await typing(
    api,
    event.threadID,
    true
  );

  await new Promise(
    resolve =>
      setTimeout(resolve, 2000)
  );

  await typing(
    api,
    event.threadID,
    false
  );

  const result =
    await getReply(
      text,
      event.senderID
    );

  return sendBabyReply(
    api,
    event,
    result
  );
};

/* =========================================================
   AUTO CHAT
   ========================================================= */

module.exports.onChat = async function ({
  api,
  event
}) {

  if (!event.body) return;

  const text =
    event.body.trim();

  if (!text) return;

  const lowerText =
    text.toLowerCase();

  /* =======================================================
     ONLY BABY / BBY / XAN
     ======================================================= */

  if (
    triggers.includes(lowerText)
  ) {

    /*
     * শুধু trigger message-এই duplicate lock।
     * অন্য সাধারণ message-এ lock করা যাবে না।
     */

    if (isAlreadyProcessed(event)) {
      return;
    }

    return sendGreeting(
      api,
      event
    );
  }

  /* =======================================================
     BABY + TEXT
     ======================================================= */

  if (!triggerRegex.test(text)) {
    return;
  }

  /*
   * এই message duplicate কিনা check
   */

  if (isAlreadyProcessed(event)) {
    return;
  }

  const q =
    text
      .replace(triggerRegex, "")
      .trim();

  if (!q) {

    return sendGreeting(
      api,
      event
    );
  }

  await typing(
    api,
    event.threadID,
    true
  );

  await new Promise(
    resolve =>
      setTimeout(resolve, 3000)
  );

  await typing(
    api,
    event.threadID,
    false
  );

  const result =
    await getReply(
      q,
      event.senderID
    );

  return sendBabyReply(
    api,
    event,
    result
  );
};

View raw file