← back to browse
goat command

leave

Leave group chats

0
views
0
likes
0
installs
raw source
const axios = require("axios");
const fs = require("fs-extra");
const request = require("request");

module.exports = {
  config: {
    name: "leave",
    version: "0.0.7",
    author: "Azadx69x",
    countDown: 5,
    role: 2,
    shortDescription: "Leave group chats",
    longDescription: "List all group chats with pagination and leave selected groups",
    category: "admin",
    guide: {
      en: "{p}{n} - List groups\nReply with number to leave\nReply 'next'/'previous' for pagination",
    },
  },

  onStart: async function ({ api, event, message }) {
    try {
      const groupList = await api.getThreadList(300, null, ['INBOX']); 
      const filteredList = groupList.filter(group => group.threadName !== null);

      if (filteredList.length === 0) {
        return message.reply('❌ 𝐍𝐨 𝐠𝐫𝐨𝐮𝐩 𝐜𝐡𝐚𝐭𝐬 𝐟𝐨𝐮𝐧𝐝.');
      }

      const formatGroups = (list, start=0) =>
        list.slice(start, start+5).map((g,i) => {
          let groupName = g.threadName;
          if (groupName.length > 25) groupName = groupName.slice(0,22) + "...";
          return `│ ${start+i+1}. 𝐆𝐫𝐨𝐮𝐩: ${groupName}\n│ 🆔 𝐓𝐈𝐃: ${g.threadID}`;
        });

      const start = 0;
      const currentList = formatGroups(filteredList, start);
      const totalPages = Math.ceil(filteredList.length / 5);

      const message_text = `╭━━━━━━━━━━━━━━━━━╮
│   🚪 𝐋𝐄𝐀𝐕𝐄 𝐂𝐎𝐌𝐌𝐀𝐍𝐃   │
├━━━━━━━━━━━━━━━━━┤
${currentList.join("\n")}
├━━━━━━━━━━━━━━━━━┤
│ 📄 𝐏𝐚𝐠𝐞 1/${totalPages}
│ 💡 𝐑𝐞𝐩𝐥𝐲: 𝐧𝐮𝐦𝐛𝐞𝐫
╰━━━━━━━━━━━━━━━━━╯`;

      const sentMessage = await message.reply(message_text);

      global.GoatBot.onReply.set(sentMessage.messageID, {
        commandName: 'leave',
        messageID: sentMessage.messageID,
        author: event.senderID,
        start,
        filteredList,
        totalPages
      });

    } catch (error) {
      console.error("Error listing group chats:", error);
      message.reply('❌ 𝐀𝐧 𝐞𝐫𝐫𝐨𝐫 𝐨𝐜𝐜𝐮𝐫𝐫𝐞𝐝 𝐰𝐡𝐢𝐥𝐞 𝐥𝐢𝐬𝐭𝐢𝐧𝐠 𝐠𝐫𝐨𝐮𝐩 𝐜𝐡𝐚𝐭𝐬.');
    }
  },

  onReply: async function ({ api, event, Reply, args, message }) {
    const { author, start, filteredList, totalPages } = Reply;

    if (event.senderID !== author) {
      return message.reply('⚠️ 𝐎𝐧𝐥𝐲 𝐭𝐡𝐞 𝐜𝐨𝐦𝐦𝐚𝐧𝐝 𝐚𝐮𝐭𝐡𝐨𝐫 𝐜𝐚𝐧 𝐮𝐬𝐞 𝐭𝐡𝐢𝐬 𝐫𝐞𝐩𝐥𝐲.');
    }

    const userInput = args.join(" ").trim().toLowerCase();

    const formatGroups = (list, start=0) =>
      list.slice(start, start+5).map((g,i) => {
        let groupName = g.threadName;
        if (groupName.length > 25) groupName = groupName.slice(0,22) + "...";
        return `│ ${start+i+1}. 𝐆𝐫𝐨𝐮𝐩: ${groupName}\n│ 🆔 𝐓𝐈𝐃: ${g.threadID}`;
      });
    
    if (userInput === 'next') {
      const nextStart = start + 5;
      if (nextStart >= filteredList.length) return message.reply('⚠️ 𝐄𝐧𝐝 𝐨𝐟 𝐥𝐢𝐬𝐭 𝐫𝐞𝐚𝐜𝐡𝐞𝐝.');

      const currentList = formatGroups(filteredList, nextStart);
      const currentPage = Math.floor(nextStart/5)+1;

      const message_text = `╭━━━━━━━━━━━━━━━━━╮
│   🚪 𝐋𝐄𝐀𝐕𝐄 𝐂𝐎𝐌𝐌𝐀𝐍𝐃   │
├━━━━━━━━━━━━━━━━━┤
${currentList.join("\n")}
├━━━━━━━━━━━━━━━━━┤
│ 📄 𝐏𝐚𝐠𝐞 ${currentPage}/${totalPages}
│ 💡 𝐑𝐞𝐩𝐥𝐲: 𝐧𝐮𝐦𝐛𝐞𝐫
╰━━━━━━━━━━━━━━━━━╯`;

      const sentMessage = await message.reply(message_text);
      global.GoatBot.onReply.set(sentMessage.messageID, {
        commandName: 'leave',
        messageID: sentMessage.messageID,
        author: event.senderID,
        start: nextStart,
        filteredList,
        totalPages
      });

      return;
    }
    
    if (userInput === 'previous') {
      const prevStart = Math.max(start - 5, 0);
      if (prevStart === start) return message.reply('⚠️ 𝐀𝐥𝐫𝐞𝐚𝐝𝐲 𝐚𝐭 𝐭𝐡𝐞 𝐛𝐞𝐠𝐢𝐧𝐧𝐢𝐧𝐠.');

      const currentList = formatGroups(filteredList, prevStart);
      const currentPage = Math.floor(prevStart/5)+1;

      const message_text = `╭━━━━━━━━━━━━━━━━━╮
│   🚪 𝐋𝐄𝐀𝐕𝐄 𝐂𝐎𝐌𝐌𝐀𝐍𝐃   │
├━━━━━━━━━━━━━━━━━┤
${currentList.join("\n")}
├━━━━━━━━━━━━━━━━━┤
│ 📄 𝐏𝐚𝐠𝐞 ${currentPage}/${totalPages}
│ 💡 𝐑𝐞𝐩𝐥𝐲: 𝐧𝐮𝐦𝐛𝐞𝐫
╰━━━━━━━━━━━━━━━━━╯`;

      const sentMessage = await message.reply(message_text);
      global.GoatBot.onReply.set(sentMessage.messageID, {
        commandName: 'leave',
        messageID: sentMessage.messageID,
        author: event.senderID,
        start: prevStart,
        filteredList,
        totalPages
      });

      return;
    }
    
    if (!isNaN(userInput)) {
      const idx = parseInt(userInput,10);
      if (idx <= 0 || idx > filteredList.length) return message.reply(`❌ 𝐈𝐧𝐯𝐚𝐥𝐢𝐝 𝐠𝐫𝐨𝐮𝐩 𝐧𝐮𝐦𝐛𝐞𝐫. 𝐂𝐡𝐨𝐨𝐬𝐞 1-${filteredList.length}`);

      const group = filteredList[idx-1];
      try {
        const botId = api.getCurrentUserID();
        await api.removeUserFromGroup(botId, group.threadID);

        return message.reply(`✅ 𝐒𝐮𝐜𝐜𝐞𝐬𝐬𝐟𝐮𝐥𝐥𝐲 𝐥𝐞𝐟𝐭:
📛 ${group.threadName.length>25 ? group.threadName.slice(0,22)+"..." : group.threadName}
🆔 ${group.threadID}`);
      } catch (err) {
        console.error(err);
        return message.reply('❌ 𝐅𝐚𝐢𝐥𝐞𝐝 𝐭𝐨 𝐥𝐞𝐚𝐯𝐞 𝐭𝐡𝐞 𝐠𝐫𝐨𝐮𝐩.');
      }
    }

    message.reply(`❌ 𝐈𝐧𝐯𝐚𝐥𝐢𝐝 𝐢𝐧𝐩𝐮𝐭.
💡 𝐔𝐬𝐞:
• 𝐍𝐮𝐦𝐛𝐞𝐫 1-${filteredList.length} 𝐭𝐨 𝐥𝐞𝐚𝐯𝐞
• "next" 𝐟𝐨𝐫 𝐧𝐞𝐱𝐭 𝐩𝐚𝐠𝐞
• "previous" 𝐟𝐨𝐫 𝐩𝐫𝐞𝐯𝐢𝐨𝐮𝐬`);
  },
};

View raw file