function sleep(time) { return new Promise((resolve) => setTimeout(resolve, time)); } module.exports = { config: { name: "filteruser", version: "2.0.0", author: "๐Œ๐š๐‘๐ฎ๐…", countDown: 5, role: 1, description: { en: "filter group members by number of messages or locked account" }, category: "box chat", guide: { en: "{pn} [ | die]" } }, langs: { en: { needAdmin: "โš ๏ธ | ๐‘ƒ๐‘™๐‘’๐‘Ž๐‘ ๐‘’ ๐‘š๐‘Ž๐‘˜๐‘’ ๐‘š๐‘’ ๐‘Ž๐‘‘๐‘š๐‘–๐‘› ๐‘“๐‘–๐‘Ÿ๐‘ ๐‘ก ๐‘๐‘œ๐‘  ๐Ÿฅบ ๐‘กโ„Ž๐‘’๐‘› ๐ผ ๐‘๐‘Ž๐‘› ๐‘‘๐‘œ ๐‘กโ„Ž๐‘–๐‘ ", confirm: "โš ๏ธ | ๐ด๐‘Ÿ๐‘’ ๐‘ฆ๐‘œ๐‘ข ๐‘ ๐‘ข๐‘Ÿ๐‘’ ๐‘ฆ๐‘œ๐‘ข ๐‘ค๐‘Ž๐‘›๐‘ก ๐‘ก๐‘œ ๐‘˜๐‘–๐‘๐‘˜ ๐‘š๐‘’๐‘š๐‘๐‘’๐‘Ÿ๐‘  ๐‘ค๐‘–๐‘กโ„Ž ๐‘™๐‘’๐‘ ๐‘  ๐‘กโ„Ž๐‘Ž๐‘› %1 ๐‘š๐‘’๐‘ ๐‘ ๐‘Ž๐‘”๐‘’๐‘ ?\n๐‘…๐‘’๐‘Ž๐‘๐‘ก ๐‘ก๐‘œ ๐‘กโ„Ž๐‘–๐‘  ๐‘š๐‘’๐‘ ๐‘ ๐‘Ž๐‘”๐‘’ ๐‘ก๐‘œ ๐‘๐‘œ๐‘›๐‘“๐‘–๐‘Ÿ๐‘š ๐Ÿ’ซ", kickByBlock: "โœ… | ๐‘†๐‘ข๐‘๐‘’๐‘ ๐‘“๐‘ข๐‘™๐‘ฆ ๐‘Ÿ๐‘’๐‘š๐‘œ๐‘ฃ๐‘’๐‘‘ %1 ๐‘‘๐‘’๐‘Ž๐‘๐‘ก๐‘–๐‘ฃ๐‘Ž๐‘ก๐‘’๐‘‘ ๐‘Ž๐‘๐‘๐‘œ๐‘ข๐‘›๐‘ก๐‘ ", kickByMsg: "โœ… | ๐‘†๐‘ข๐‘๐‘๐‘’๐‘ ๐‘ ๐‘“๐‘ข๐‘™๐‘ฆ ๐‘˜๐‘–๐‘๐‘˜๐‘’๐‘‘ %1 ๐‘š๐‘’๐‘š๐‘๐‘’๐‘Ÿ๐‘  ๐‘ค๐‘–๐‘กโ„Ž ๐‘™๐‘’๐‘  ๐‘กโ„Ž๐‘Ž๐‘› %2 ๐‘š๐‘’๐‘ ๐‘Ž๐‘”๐‘’๐‘ ", kickError: "โŒ | ๐น๐‘Ž๐‘–๐‘™๐‘’๐‘‘ ๐‘ก๐‘œ ๐‘˜๐‘–๐‘๐‘˜ %1 ๐‘š๐‘’๐‘š๐‘๐‘’๐‘Ÿ๐‘  ๐‘ ๐‘œ๐‘Ÿ๐‘ฆ ๐‘๐‘œ๐‘  ๐Ÿ˜ฅ\n%2", noBlock: "โœ… | ๐‘‡โ„Ž๐‘’๐‘Ÿ๐‘’ ๐‘Ž๐‘Ÿ๐‘’ ๐‘›๐‘œ ๐‘‘๐‘’๐‘Ž๐‘๐‘ก๐‘–๐‘ฃ๐‘Ž๐‘ก๐‘’๐‘‘ ๐‘Ž๐‘๐‘๐‘œ๐‘ข๐‘›๐‘ก๐‘  ๐‘–๐‘› ๐‘กโ„Ž๐‘–๐‘  ๐‘”๐‘Ÿ๐‘œ๐‘ข๐‘", noMsg: "โœ… | ๐‘๐‘œ ๐‘œ๐‘›๐‘’ โ„Ž๐‘Ž๐‘  ๐‘™๐‘’๐‘ ๐‘  ๐‘กโ„Ž๐‘Ž๐‘› %1 ๐‘š๐‘’๐‘ ๐‘Ž๐‘”๐‘’๐‘  ๐‘–๐‘› ๐‘กโ„Ž๐‘–๐‘  ๐‘”๐‘Ÿ๐‘œ๐‘ข๐‘" } }, onStart: async function ({ api, args, threadsData, message, event, commandName, getLang }) { const threadData = await threadsData.get(event.threadID); if (!threadData.adminIDs.includes(api.getCurrentUserID())) return message.reply(getLang("needAdmin")); if (!isNaN(args[0])) { message.reply(getLang("confirm", args[0]), (err, info) => { global.GoatBot.onReaction.set(info.messageID, { author: event.senderID, messageID: info.messageID, minimum: Number(args[0]), commandName }); }); } else if (args[0] == "die") { const threadInfo = await api.getThreadInfo(event.threadID); const membersBlocked = threadInfo.userInfo.filter(user => user.type!== "User"); const errors = []; const success = []; for (const user of membersBlocked) { if (user.type!== "User" &&!threadInfo.adminIDs.some(id => id == user.id)) { try { await api.removeUserFromGroup(user.id, event.threadID); success.push(user.id); } catch (e) { errors.push(user.name); } await sleep(700); } } let msg = ""; if (success.length > 0) msg += `${getLang("kickByBlock", success.length)}\n`; if (errors.length > 0) msg += `${getLang("kickError", errors.length, errors.join("\n"))}\n`; if (msg == "") msg += getLang("noBlock"); message.reply(msg); } else message.SyntaxError(); }, onReaction: async function ({ api, Reaction, event, threadsData, message, getLang }) { const { minimum = 1, author } = Reaction; if (event.userID!= author) return; const threadData = await threadsData.get(event.threadID); const botID = api.getCurrentUserID(); const membersCountLess = threadData.members.filter(member => member.count < minimum && member.inGroup == true && member.userID!= botID && !threadData.adminIDs.some(id => id == member.userID) ); const errors = []; const success = []; for (const member of membersCountLess) { try { await api.removeUserFromGroup(member.userID, event.threadID); success.push(member.userID); } catch (e) { errors.push(member.name); } await sleep(700); } let msg = ""; if (success.length > 0) msg += `${getLang("kickByMsg", success.length, minimum)}\n`; if (errors.length > 0) msg += `${getLang("kickError", errors.length, errors.join("\n"))}\n`; if (msg == "") msg += getLang("noMsg", minimum); message.reply(msg); } };