← back to browse
goat command

protect

Lock group name, nickname, theme, emoji

0
views
0
likes
0
installs
raw source
module.exports = {
  config: {
    name: "protect",
    version: "1.2",
    author: "MOHAMMAD AKASH",
    role: 1,
    shortDescription: "Lock group name, nickname, theme, emoji",
    category: "group",
    guide: "{pn} on/off"
  },

  onStart: async ({ api, event, message, threadsData, args }) => {
    const { threadID } = event;

    if (!args[0]) return message.reply("⚠️ Usage: /protect on | /protect off");

    if (args[0] === "on") {
      const info = await api.getThreadInfo(threadID);

      const protectData = {
        enable: true,
        name: info.threadName || "",
        emoji: info.emoji || "",
        color: info.color || "",
        nickname: {}
      };

      // Safely handle members
      const members = info.members || [];
      members.forEach(u => {
        protectData.nickname[u.userID] = u.nickname || "";
      });

      await threadsData.set(threadID, protectData, "data.protect");

      return message.reply(
        "🛡 𝗣𝗥𝗢𝗧𝗘𝗖𝗧 𝗘𝗡𝗔𝗕𝗟𝗘𝗗\n✨ Name, Nickname, Theme & Emoji are now LOCKED!"
      );
    }

    if (args[0] === "off") {
      await threadsData.set(threadID, {}, "data.protect");
      return message.reply(
        "🔓 𝗣𝗥𝗢𝗧𝗘𝗖𝗧 𝗗𝗜𝗦𝗔𝗕𝗟𝗘𝗗\n💥 All locks are now OFF!"
      );
    }
  },

  onEvent: async ({ api, event, threadsData }) => {
    const { threadID, author, logMessageType, logMessageData } = event;
    const protectData = await threadsData.get(threadID, "data.protect");
    if (!protectData?.enable) return;

    const info = await api.getThreadInfo(threadID);
    const isAdmin = info.adminIDs.some(e => e.id === author);
    const isBot = api.getCurrentUserID() === author;

    if (!isAdmin && !isBot) {
      // NAME
      if (logMessageType === "log:thread-name") {
        api.setTitle(protectData.name, threadID);
      }

      // EMOJI
      if (logMessageType === "log:thread-icon") {
        api.changeThreadEmoji(protectData.emoji, threadID);
      }

      // COLOR/THEME
      if (logMessageType === "log:thread-color") {
        api.changeThreadColor(protectData.color, threadID);
      }

      // NICKNAME
      if (logMessageType === "log:user-nickname") {
        const { participant_id } = logMessageData;
        api.changeNickname(
          protectData.nickname[participant_id] || "",
          threadID,
          participant_id
        );
      }
    }

    // ADMIN changed → update saved data
    if (isAdmin) {
      if (logMessageType === "log:thread-name") {
        await threadsData.set(threadID, logMessageData.name || "", "data.protect.name");
      }
      if (logMessageType === "log:thread-icon") {
        await threadsData.set(threadID, logMessageData.thread_icon || "", "data.protect.emoji");
      }
      if (logMessageType === "log:thread-color") {
        await threadsData.set(threadID, logMessageData.theme_id || "", "data.protect.color");
      }
      if (logMessageType === "log:user-nickname") {
        const { participant_id, nickname } = logMessageData;
        await threadsData.set(
          threadID,
          nickname || "",
          `data.protect.nickname.${participant_id}`
        );
      }
    }
  }
};

View raw file