goat
command
approve
Approve pending members
0
views
0
likes
0
installs
Aliases: aprv
raw source
module.exports = {
config: {
name: "approve",
aliases: ["aprv"],
version: "3.0",
author: "xalman",
countDown: 5,
role: 1,
shortDescription: { en: "Approve pending members" },
category: "box chat",
guide: { en: "{pn} | {pn} 1 | {pn} all" }
},
onStart: async ({ api, event, args, commandName }) => {
const { threadID, messageID, senderID, isGroup } = event;
if (!isGroup) return api.sendMessage("❌ Group only.", threadID, messageID);
let info;
try {
info = await api.getThreadInfo(threadID);
} catch {
return api.sendMessage("❌ Failed to get pending list.", threadID, messageID);
}
const queue = info?.approvalQueue || [];
if (!queue.length) return api.sendMessage("✅ No pending members.", threadID, messageID);
const approve = async targets => {
const msg = await api.sendMessage(`⏳ Approving ${targets.length} member(s)...`, threadID);
let ok = 0, fail = 0;
for (const user of targets) {
try {
await api.addUserToGroup(user.requesterID, threadID);
ok++;
} catch {
fail++;
}
}
const result = `Done ${ok} member(s) ✅\nFailed ${fail} member(s) ❎`;
try {
await api.editMessage(result, msg.messageID);
} catch {
await api.sendMessage(result, threadID);
try { await api.unsendMessage(msg.messageID); } catch {}
}
};
if (args.length) {
if (/^all$/i.test(args[0])) return approve(queue);
const targets = [];
for (const n of args) {
if (!/^\d+$/.test(n) || n < 1 || n > queue.length)
return api.sendMessage(`❌ Invalid number: ${n}`, threadID, messageID);
targets.push(queue[n - 1]);
}
return approve(targets);
}
let names = {};
try {
names = await api.getUserInfo(queue.map(x => x.requesterID));
} catch {}
const list = queue.map((x, i) =>
`${i + 1}. ${names?.[x.requesterID]?.name || "Unknown"} (${x.requesterID})`
).join("\n");
return api.sendMessage(
`🔔 PENDING MEMBERS (${queue.length})\n\n${list}\n\nReply with number(s) to approve.`,
threadID,
(err, m) => {
if (!err) global.GoatBot.onReply.set(m.messageID, {
commandName,
author: senderID,
queue
});
},
messageID
);
},
onReply: async ({ api, event, Reply }) => {
if (event.senderID !== Reply.author) return;
const input = event.body.trim();
let targets;
if (/^all$/i.test(input)) {
targets = Reply.queue;
} else {
targets = [];
for (const n of input.split(/\s+/)) {
if (!/^\d+$/.test(n) || n < 1 || n > Reply.queue.length)
return api.sendMessage(`❌ Invalid number: ${n}`, event.threadID, event.messageID);
targets.push(Reply.queue[n - 1]);
}
}
try { await api.unsendMessage(event.messageID); } catch {}
global.GoatBot.onReply.delete(event.messageID);
const msg = await api.sendMessage(
`⏳ Approving ${targets.length} member(s)...`,
event.threadID
);
let ok = 0, fail = 0;
for (const user of targets) {
try {
await api.addUserToGroup(user.requesterID, event.threadID);
ok++;
} catch {
fail++;
}
}
const result = `Done ${ok} member(s) ✅\nFailed ${fail} member(s) ❎`;
try {
await api.editMessage(result, msg.messageID);
} catch {
await api.sendMessage(result, event.threadID);
try { await api.unsendMessage(msg.messageID); } catch {}
}
}
};