← back to browse
goat command

activemember

Show top active members

0
views
0
likes
0
installs

Aliases: am

raw source
module.exports = {
  config: {
    name: "activemember",
    aliases: ["am"],
    version: "1.0.0",
    author: "๐Œ๐š๐‘๐ฎ๐…",
    countDown: 5,
    role: 0,
    shortDescription: "Show top active members",
    longDescription: "Show the top 15 active members by message count",
    category: "box chat",
    guide: "{pn}"
  },

  onStart: async function ({ api, event }) {
    const threadID = event.threadID;

    try {
      const threadInfo = await api.getThreadInfo(threadID, {
        participantIDs: true
      });

      const messageCounts = {};

      for (const id of threadInfo.participantIDs) {
        messageCounts[id] = 0;
      }

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

      for (const message of messages) {
        if (messageCounts[message.senderID] !== undefined) {
          messageCounts[message.senderID]++;
        }
      }

      const topUsers = Object.entries(messageCounts)
        .sort((a, b) => b[1] - a[1])
        .slice(0, 15);

      let result = `โ•ญโ”€โ– ๐€๐œ๐ญ๐ข๐ฏ๐ž ๐Œ๐ž๐ฆ๐›๐ž๐ซ๐ฌ
โ”‚
`;

      const mentions = [];

      for (let i = 0; i < topUsers.length; i++) {
        const [userID, count] = topUsers[i];

        try {
          const userInfo = await api.getUserInfo(userID);
          const name = userInfo[userID]?.name || "Unknown User";

          result += `โ”œโ”€โžค ${i + 1}. ${name}\n`;
          result += `โ”‚   โ””โ”€ ๐Ÿ’ฌ ${count} messages\n`;

          mentions.push({
            tag: name,
            id: userID,
            type: "user"
          });

          if (i < topUsers.length - 1) {
            result += `โ”‚\n`;
          }
        } catch {
          result += `โ”œโ”€โžค ${i + 1}. Unknown User\n`;
          result += `โ”‚   โ””โ”€ ๐Ÿ’ฌ ${count} messages\nโ”‚\n`;
        }
      }

      result += `โ•ฐโ”€โ– ๐Œ๐š๐ซ๐ฎ๐Ÿ'๐ฌ ๐๐จ๐ญ`;

      return api.sendMessage(
        {
          body: result,
          mentions
        },
        threadID
      );

    } catch (error) {
      console.error(error);

      return api.sendMessage(
        "โžœ Failed to get active member list.",
        threadID,
        event.messageID
      );
    }
  }
};

View raw file