From d88bb5c75c96d33a5f6aae6b4e31772e0579de37 Mon Sep 17 00:00:00 2001 From: Neko Life Date: Sat, 8 May 2021 23:46:13 +0000 Subject: [PATCH] Added lookup member command --- cmds/utility/avatar.js | 27 +++++---------------- cmds/utility/lookup.js | 53 ++++++++++++++++++++++++++++++++++++++++++ resources/functions.js | 34 ++++++++++++++++++++++----- 3 files changed, 87 insertions(+), 27 deletions(-) create mode 100644 cmds/utility/lookup.js diff --git a/cmds/utility/avatar.js b/cmds/utility/avatar.js index d25215e..520f673 100644 --- a/cmds/utility/avatar.js +++ b/cmds/utility/avatar.js @@ -2,7 +2,7 @@ const commando = require("@iceprod/discord.js-commando"); const { MessageEmbed } = require("discord.js"); -const { ranLog, errLog, trySend, findMemberRegEx, multipleMembersFound } = require("../../resources/functions"); +const { ranLog, errLog, trySend, findMemberRegEx, multipleMembersFound, cleanMentionID } = require("../../resources/functions"); const { database } = require("../../database/mongo"); const { randomColors } = require("../../config.json"); @@ -16,11 +16,6 @@ module.exports = class avatar extends commando.Command { description: "Avatar showcase." }); } - /** - * - * @param {commando.CommandoMessage} msg - * @param {*} arg - */ async run(msg, arg) { const doc = msg.guild?.id ?? msg.author.id; const config = database.collection(msg.guild ? "Guild" : "User"); @@ -29,7 +24,8 @@ module.exports = class avatar extends commando.Command { errLog(docErr, msg, this.client); } const footerQuote = r?.["settings"]?.defaultEmbed?.footerQuote; - const withPerm = arg.trim().split(/,/); + const withPerm = arg.trim().split(/,+/); + console.log(withPerm); const option = arg.trim().split(/(\-\-)+/); let user, avatar, member, show; let [allEmb, multipleMemMes, dupliCheck] = [[], [], []]; @@ -55,22 +51,11 @@ module.exports = class avatar extends commando.Command { } } } - if (arg) { + if (args.length !== 0) { for(const theAvThis of args) { const avThis = theAvThis.replace(/\-\-show *\d*/i, ""); let uID = avThis.trim(); - if (uID.startsWith('<@')) { - uID = uID.slice(2); - } - if (uID.startsWith('!')) { - uID = uID.slice(1); - } - if (uID.endsWith('>')) { - uID = uID.slice(0,-1) - } - if (uID.startsWith("@")) { - uID = uID.slice(1); - } + uID = cleanMentionID(uID); if (uID.length === 1) { return trySend(this.client, msg, "One character for searching member isn't allowed <:catstareLife:794930503076675584>"); } else { @@ -103,7 +88,7 @@ module.exports = class avatar extends commando.Command { } else { dupliCheck.push(ree[0].id); user = ree[0].user ?? ree[0]; - multipleMemMes.push(await multipleMembersFound(this.client, msg, ree, uID, show)); + multipleMemMes.push(multipleMembersFound(this.client, msg, ree, uID, show)); } } if (user) { diff --git a/cmds/utility/lookup.js b/cmds/utility/lookup.js new file mode 100644 index 0000000..1328c5c --- /dev/null +++ b/cmds/utility/lookup.js @@ -0,0 +1,53 @@ +'use strict'; + +const commando = require("@iceprod/discord.js-commando"); +const { cleanMentionID, findMemberRegEx, multipleMembersFound, trySend } = require("../../resources/functions"); + +module.exports = class lookup extends commando.Command { + constructor(client) { + super(client, { + name: "lookup", + memberName: "lookup", + group: "utility", + description: "Lookup something in the server using mention, ID, or RegExp." + }); + } + async run(msg, arg) { + let show; + const showArg = arg.match(/\-\-show *\d*/i); + if (showArg?.[0]) { + const digit = showArg[0].match(/\d*/g); + for (const val of digit) { + if (val.length > 0) { + const res = parseInt(val, 10); + show = res; + } + } + } + arg = arg.replace(/\-\-show *\d*/i, ""); + const args = arg.split(/ +/); + let [fetchedMember, memMes] = [[], ""]; + if (args[0].toLowerCase() === "member") { + if (args[1]) { + const memberID = cleanMentionID(arg.slice("member".length).trim()); + if (!/\D/.test(memberID)) { + fetchedMember.push(msg.guild.member(memberID)); + } + if (/\D/.test(memberID) || fetchedMember[0] === undefined) { + fetchedMember = await findMemberRegEx(msg, this.client, memberID); + } + if (fetchedMember.length > 1) { + memMes = multipleMembersFound(this.client, msg, fetchedMember, memberID, show, true); + } else { + if (fetchedMember.length === 0) { + return trySend(this.client, msg, `No member found for: **${memberID}**`); + } + memMes = `Member found for: **${memberID}**\`\`\`md\n# ${fetchedMember[0].user.tag} (${fetchedMember[0].user.id})\`\`\``; + } + } + } + if (memMes.length > 0) { + return trySend(this.client, msg, memMes); + } + } +}; \ No newline at end of file diff --git a/resources/functions.js b/resources/functions.js index 1cf109e..fb9496f 100644 --- a/resources/functions.js +++ b/resources/functions.js @@ -171,17 +171,19 @@ async function ranLog(msg, cmd, addition) { * @param {GuildMember[]} arr - Test array * @param {String} key - Keyword * @param {Number} max - Max length - * @returns {Promise} + * @param {Boolean} withID - Include user_ID + * @returns {String} */ -async function multipleMembersFound(client, msg, arr, key, max) { - if (!max) { - max = 5; - } +function multipleMembersFound(client, msg, arr, key, max = 5, withID) { if (arr.length > 1) { try { let multipleFound = []; for(const one of arr) { - multipleFound.push((await (client.users.fetch(one.id))).tag); + let mes = one.user.tag; + if (withID) { + mes = mes + ` (${one.user.id})`; + } + multipleFound.push(mes); } let multi = []; for(const mu of multipleFound) { @@ -323,7 +325,27 @@ async function defaultImageEmbed(client, msg, image, author, title, footerText) return emb; } +/** + * Return clean ID of provided key + * @param {String} key - Mention | Channel Name | Username | Rolename + * @returns {String} Clean ID + */ +function cleanMentionID(key) { + let uID = key.trim(); + if (uID.startsWith('<@') || uID.startsWith('<#')) { + uID = uID.slice(2); + } + if (uID.endsWith('>')) { + uID = uID.slice(0,-1) + } + if (uID.startsWith('!') || uID.startsWith("@") || uID.startsWith("#") || uID.startsWith('&')) { + uID = uID.slice(1); + } + return uID; +} + module.exports = { + cleanMentionID, multipleMembersFound, findMemberRegEx, getUser, getChannelMessage, errLog,