← back to browse
goat command

accept

Manage friend requests

0
views
0
likes
0
installs

Aliases: acp

raw source
const moment = require("moment-timezone");

module.exports = {
  config: {
    name: "accept",
    aliases: ["acp"],
    version: "1.0.0",
    author: "๐Œ๐š๐‘๐ฎ๐…",
    countDown: 8,
    role: 2,
    shortDescription: "Manage friend requests",
    longDescription: "Accept or delete pending friend requests",
    category: "Admin"
  },

  onReply: async function ({ message, Reply, event, api }) {
    const { author, listRequest, messageID } = Reply;

    if (author !== event.senderID) return;

    clearTimeout(Reply.unsendTimeout);

    const args = event.body.trim().toLowerCase().split(/\s+/);

    if (!["add", "del"].includes(args[0])) {
      return api.sendMessage(
        "โžœ Use: add <number | all>\nโžœ Use: del <number | all>",
        event.threadID,
        event.messageID
      );
    }

    if (!args[1]) {
      return api.sendMessage(
        `โžœ Please select a number or "all".`,
        event.threadID,
        event.messageID
      );
    }

    const form = {
      av: api.getCurrentUserID(),
      fb_api_caller_class: "RelayModern",
      variables: {
        input: {
          source: "friends_tab",
          actor_id: api.getCurrentUserID(),
          client_mutation_id: Math.random().toString(36).substring(2, 15)
        },
        scale: 3,
        refresh_num: 0
      }
    };

    if (args[0] === "add") {
      form.fb_api_req_friendly_name =
        "FriendingCometFriendRequestConfirmMutation";
      form.doc_id = "3147613905362928";
    } else {
      form.fb_api_req_friendly_name =
        "FriendingCometFriendRequestDeleteMutation";
      form.doc_id = "4108254489275063";
    }

    const targets =
      args[1] === "all"
        ? listRequest.map((_, i) => i + 1)
        : args.slice(1);

    const success = [];
    const failed = [];
    const requests = [];

    for (const target of targets) {
      const index = parseInt(target) - 1;
      const user = listRequest[index];

      if (!user) {
        failed.push(`Unknown #${target}`);
        continue;
      }

      form.variables.input.friend_requester_id = user.node.id;

      requests.push({
        name: user.node.name,
        promise: api.httpPost(
          "https://www.facebook.com/api/graphql/",
          {
            ...form,
            variables: JSON.stringify(form.variables)
          }
        )
      });
    }

    for (const item of requests) {
      try {
        const response = await item.promise;
        const data = JSON.parse(response);

        if (data.errors) {
          failed.push(item.name);
        } else {
          success.push(item.name);
        }
      } catch {
        failed.push(item.name);
      }
    }

    let result = `โ•ญโ”€โ– ๐‘๐ž๐ฌ๐ฎ๐ฅ๐ญ\nโ”‚\n`;

    if (success.length) {
      result += `โ”œโ”€โžค ${args[0] === "add" ? "โœ… Accepted" : "๐Ÿ—‘๏ธ Deleted"} : ${success.length}\n`;
      result += success.map(name => `โ”‚   โ””โ”€ ${name}`).join("\n");
      result += "\nโ”‚\n";
    }

    if (failed.length) {
      result += `โ”œโ”€โžค โŒ Failed : ${failed.length}\n`;
      result += failed.map(name => `โ”‚   โ””โ”€ ${name}`).join("\n");
      result += "\nโ”‚\n";
    }

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

    api.unsendMessage(messageID);

    return api.sendMessage(
      result,
      event.threadID,
      event.messageID
    );
  },

  onStart: async function ({ event, api, commandName }) {
    const form = {
      av: api.getCurrentUserID(),
      fb_api_req_friendly_name:
        "FriendingCometFriendRequestsRootQueryRelayPreloader",
      fb_api_caller_class: "RelayModern",
      doc_id: "4499164963466303",
      variables: JSON.stringify({
        input: {
          scale: 3
        }
      })
    };

    try {
      const response = await api.httpPost(
        "https://www.facebook.com/api/graphql/",
        form
      );

      const listRequest =
        JSON.parse(response)?.data?.viewer?.friending_possibilities?.edges || [];

      if (!listRequest.length) {
        return api.sendMessage(
          "โžœ No pending friend requests found.",
          event.threadID,
          event.messageID
        );
      }

      const time = moment()
        .tz("Asia/Manila")
        .format("DD/MM/YYYY โ€ข HH:mm:ss");

      let msg = `โ•ญโ”€โ– ๐…๐ซ๐ข๐ž๐ง๐ ๐‘๐ž๐ช๐ฎ๐ž๐ฌ๐ญ๐ฌ\nโ”‚\n`;

      listRequest.forEach((user, i) => {
        msg +=
          `โ”œโ”€โžค ${i + 1}. ${user.node.name}\n` +
          `โ”‚   โ”œโ”€ ID : ${user.node.id}\n` +
          `โ”‚   โ”œโ”€ URL : ${user.node.url.replace("www.facebook", "fb")}\n` +
          `โ”‚   โ””โ”€ Time : ${time}\nโ”‚\n`;
      });

      msg +=
        `โ•ฐโ”€โ– ๐Œ๐š๐ซ๐ฎ๐Ÿ'๐ฌ ๐๐จ๐ญ\n\n` +
        `โžœ Reply: add <number | all>\n` +
        `โžœ Reply: del <number | all>`;

      api.sendMessage(
        msg,
        event.threadID,
        (err, info) => {
          if (err) return;

          global.GoatBot.onReply.set(info.messageID, {
            commandName,
            messageID: info.messageID,
            listRequest,
            author: event.senderID,
            unsendTimeout: setTimeout(() => {
              api.unsendMessage(info.messageID);
            }, this.config.countDown * 1000)
          });
        },
        event.messageID
      );

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

      return api.sendMessage(
        "โžœ Failed to retrieve friend requests.",
        event.threadID,
        event.messageID
      );
    }
  }
};

View raw file