← back to browse
goat command

groupinfo

View detailed group information

0
views
0
likes
0
installs

Aliases: boxinfo

raw source
const fs = require("fs-extra");
const fetch = require("node-fetch");
const path = require("path");

module.exports = {
  config: {
    name: "groupinfo",
    aliases: ['boxinfo'],
    version: "1.0",
    author: "BADHON",
    countDown: 5,
    role: 0,
    shortDescription: "View detailed group information",
    longDescription: "Displays comprehensive information about the current chat group",
    category: "group",
    guide: {
      en: "{p}groupinfo"
    }
  },

  onStart: async function ({ api, event, args }) {
    try {
      const threadInfo = await api.getThreadInfo(event.threadID);
      
     
      let maleCount = 0, femaleCount = 0, unknownCount = 0;
      for (const user of Object.values(threadInfo.userInfo)) {
        if (user.gender === "MALE") maleCount++;
        else if (user.gender === "FEMALE") femaleCount++;
        else unknownCount++;
      }

      
      const adminNames = [];
      if (threadInfo.adminIDs?.length > 0) {
        for (const admin of threadInfo.adminIDs) {
          try {
            const userInfo = await api.getUserInfo(admin.id);
            adminNames.push(userInfo[admin.id]?.name || 'Unknown');
          } catch {
            adminNames.push('[Hidden User]');
          }
        }
      }

      
      const messageBody = `
┌─── 𝗚𝗥𝗢𝗨𝗣 𝗜𝗡𝗙𝗢 ───
│
├ 𝗡𝗮𝗺𝗲: ${threadInfo.threadName || 'Unnamed Group'}
├ 𝗜𝗗: ${threadInfo.threadID}
│
├─── 𝗠𝗘𝗠𝗕𝗘𝗥𝗦 ───
│
├ ➤ Total: ${threadInfo.participantIDs.length}
├ ➤ Male: ${maleCount}
├ ➤ Female: ${femaleCount}
├ ➤ Unknown: ${unknownCount}
│
├─── 𝗔𝗗𝗠𝗜𝗡𝗦 ───
│
${adminNames.length > 0 
  ? adminNames.map(name => `├ ➤ ${name}`).join('\n') 
  : '├ ➤ No admins'}
│
├─── 𝗢𝗧𝗛𝗘𝗥 𝗜𝗡𝗙𝗢 ───
│
├ ➤ Approval Mode: ${threadInfo.approvalMode ? '✅ ON' : '❌ OFF'}
├ ➤ Emoji: ${threadInfo.emoji || 'None'}
├ ➤ Messages: ${threadInfo.messageCount || 0}
│
└─── ✨ 𝗕𝗔𝗗𝗛𝗢𝗡 ✨ ───
      `.trim();

      
      if (threadInfo.imageSrc) {
        try {
          const cachePath = path.join(__dirname, 'cache', `group_${event.threadID}.png`);
          
          if (!fs.existsSync(path.dirname(cachePath))) {
            fs.mkdirSync(path.dirname(cachePath), { recursive: true });
          }

          await this.downloadImage(threadInfo.imageSrc, cachePath);
          
          await api.sendMessage({
            body: messageBody,
            attachment: fs.createReadStream(cachePath)
          }, event.threadID);
          
          fs.unlinkSync(cachePath);
          
        } catch (error) {
          console.error("Image error:", error);
          await api.sendMessage(messageBody, event.threadID);
        }
      } else {
        await api.sendMessage(messageBody, event.threadID);
      }

    } catch (error) {
      console.error("Groupinfo error:", error);
      await api.sendMessage("❌ 𝗔𝗻 𝗲𝗿𝗿𝗼𝗿 𝗼𝗰𝗰𝘂𝗿𝗿𝗲𝗱 𝘄𝗵𝗶𝗹𝗲 𝗳𝗲𝘁𝗰𝗵𝗶𝗻𝗴 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗳𝗼𝗿𝗺𝗮𝘁𝗶𝗼𝗻.", event.threadID);
    }
  },

  downloadImage: async function(url, filePath) {
    const res = await fetch(url);
    if (!res.ok) throw new Error(`Failed to fetch image: ${res.statusText}`);
    const buffer = await res.buffer();
    await fs.writeFile(filePath, buffer);
  }
};

View raw file