From 03afecade952306d6549c5bc151774837376df29 Mon Sep 17 00:00:00 2001 From: Neko Life Date: Sun, 9 May 2021 13:09:35 +0000 Subject: [PATCH] Update lookup command --- cmds/utility/avatar.js | 2 +- cmds/utility/lookup.js | 53 +++++++++++++++-- resources/functions.js | 131 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 176 insertions(+), 10 deletions(-) diff --git a/cmds/utility/avatar.js b/cmds/utility/avatar.js index 7a9565d..3ff13c2 100644 --- a/cmds/utility/avatar.js +++ b/cmds/utility/avatar.js @@ -68,7 +68,7 @@ module.exports = class avatar extends commando.Command { if (uID.length > 1) { let ree = []; async function nonDigit(client) { - const theree = await findMemberRegEx(msg, uID); + const theree = findMemberRegEx(msg, uID); if (theree) { for (const reeRes of theree) { ree.push(reeRes); diff --git a/cmds/utility/lookup.js b/cmds/utility/lookup.js index d253078..ee99a7d 100644 --- a/cmds/utility/lookup.js +++ b/cmds/utility/lookup.js @@ -1,7 +1,7 @@ 'use strict'; const commando = require("@iceprod/discord.js-commando"); -const { cleanMentionID, findMemberRegEx, multipleMembersFound, trySend } = require("../../resources/functions"); +const { cleanMentionID, findMemberRegEx, multipleMembersFound, trySend, findRoleRegEx, multipleRolesFound, multipleChannelsFound, findChannelRegEx } = require("../../resources/functions"); module.exports = class lookup extends commando.Command { constructor(client) { @@ -12,6 +12,12 @@ module.exports = class lookup extends commando.Command { description: "Lookup something in the server using mention, ID, or RegExp." }); } + /** + * + * @param {commando.CommandoMessage} msg + * @param {*} arg + * @returns + */ async run(msg, arg) { let show; const showArg = arg.match(/\-\-show *\d*/i); @@ -26,15 +32,16 @@ module.exports = class lookup extends commando.Command { } arg = arg.replace(/\-\-show *\d*/i, ""); const args = arg.split(/ +/); - let [fetchedMember, memMes] = [[], ""]; - if (args[0].toLowerCase() === "member") { + let [fetchedMember, fetchedRoles, fetchedChannels, memMes] = [[], [], [], ""]; + const lowCaseArg0 = args[0].toLowerCase(); + if (lowCaseArg0 === "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] === null) { - fetchedMember = await findMemberRegEx(msg, memberID); + fetchedMember = findMemberRegEx(msg, memberID); } if (fetchedMember.length > 1) { memMes = multipleMembersFound(this.client, msg, fetchedMember, memberID, show, true); @@ -46,6 +53,44 @@ module.exports = class lookup extends commando.Command { } } } + if (lowCaseArg0 === "role") { + if (args[1]) { + const cleanRoleID = cleanMentionID(arg.slice("role".length).trim()); + if (!/\D/.test(cleanRoleID)) { + fetchedRoles.push(msg.guild.roles.cache.get(cleanRoleID)); + } + if (/\D/.test(cleanRoleID) || fetchedRoles[0] == null) { + fetchedRoles = findRoleRegEx(msg, cleanRoleID); + } + if (fetchedRoles.length > 1) { + memMes = multipleRolesFound(this.client, msg, fetchedRoles, cleanRoleID, show, true); + } else { + if (fetchedRoles.length === 0 || fetchedRoles[0] === null) { + return trySend(this.client, msg, `No role found for: **${cleanRoleID}**`); + } + memMes = `Role found for: **${cleanRoleID}**\`\`\`md\n# ${fetchedRoles[0].name} (${fetchedRoles[0].id})\`\`\``; + } + } + } + if (lowCaseArg0 === "channel") { + if (args[1]) { + const cleanChannelID = cleanMentionID(arg.slice("channel".length).trim()); + if (!/\D/.test(cleanChannelID)) { + fetchedChannels.push(msg.guild.roles.cache.get(cleanChannelID)); + } + if (/\D/.test(cleanChannelID) || fetchedChannels[0] == null) { + fetchedChannels = findChannelRegEx(msg, cleanChannelID); + } + if (fetchedChannels.length > 1) { + memMes = multipleChannelsFound(this.client, msg, fetchedChannels, cleanChannelID, show, true); + } else { + if (fetchedChannels.length === 0 || fetchedChannels[0] === null) { + return trySend(this.client, msg, `No channel found for: **${cleanChannelID}**`); + } + memMes = `Channel found for: **${cleanChannelID}**\`\`\`md\n# ${fetchedChannels[0].name} (${fetchedChannels[0].id})\`\`\``; + } + } + } if (memMes.length > 0) { return trySend(this.client, msg, memMes); } diff --git a/resources/functions.js b/resources/functions.js index 6d3de89..570fbbc 100644 --- a/resources/functions.js +++ b/resources/functions.js @@ -1,7 +1,7 @@ 'use strict'; const fs = require('fs-extra'); -const { MessageEmbed, Message, GuildMember, User, Channel, Client } = require('discord.js'); +const { MessageEmbed, Message, GuildMember, User, Channel, Client, GuildChannel, Role, GuildMemberRoleManager } = require('discord.js'); const { defaultErrorLogChannel } = require("../config.json"); const { database } = require("../database/mongo"); @@ -208,9 +208,9 @@ function multipleMembersFound(client, msg, arr, key, max = 5, withID) { * Get member object with RegExp * @param {Message} msg * @param {String} name - * @returns {Promise} Member object found + * @returns {GuildMember[]} Member object found */ -async function findMemberRegEx(msg, name) { +function findMemberRegEx(msg, name) { let found = []; const re = new RegExp(name, "i"); const list = msg.guild?.members.cache.array(); @@ -346,10 +346,131 @@ function cleanMentionID(key) { return uID; } +/** + * Get channel object wit RegExp + * @param {Message} msg + * @param {String} name + * @returns {GuildChannel[]} Channels object found + */ +function findChannelRegEx(msg, name) { + let found = []; + const re = new RegExp(name, "i"); + const list = msg.guild?.channels.cache.array(); + if (list) { + for(const mem of list) { + if (re.test(mem.name)) { + found.push(mem); + } + } + return found; + } +} + +/** + * Get role object with RegExp + * @param {Message} msg + * @param {String} name + * @returns {Role[]} Roles object found + */ +function findRoleRegEx(msg, name) { + let found = []; + const re = new RegExp(name, "i"); + const list = msg.guild?.roles.cache.array(); + if (list) { + for(const mem of list) { + if (re.test(mem.name)) { + found.push(mem); + } + } + return found; + } +} + +/** + * Notify when more than one channel found when looking in the channel list + * @param {Client} client - (this.client) + * @param {Message} msg - Message object + * @param {GuildChannel[]} arr - Test array + * @param {String} key - Keyword + * @param {Number} max - Max length + * @param {Boolean} withID - Include channel_ID + * @returns {String} + */ +function multipleChannelsFound(client, msg, arr, key, max = 5, withID) { + if (arr.length > 1) { + try { + let multipleFound = []; + for(const one of arr) { + let mes = one.name; + if (withID) { + mes = mes + ` (${one.id})`; + } + multipleFound.push(mes); + } + let multi = []; + for(const mu of multipleFound) { + if (multipleFound.indexOf(mu) < max) { + multi.push(mu); + } + } + let mes = multi.join(", "); + if (multipleFound.length > max) { + mes = mes+` and ${multipleFound.length - max} more...`; + } + return `Multiple channels found for: **${key}**\`\`\`md\n# ${mes}\`\`\``; + } catch (e) { + errLog(e, msg, client); + } + } else { + return ''; + } +} + +/** + * Notify when more than one role found when looking in the role list + * @param {Client} client - (this.client) + * @param {Message} msg - Message object + * @param {Role[]} arr - Test array + * @param {String} key - Keyword + * @param {Number} max - Max length + * @param {Boolean} withID - Include role_ID + * @returns {String} + */ + function multipleRolesFound(client, msg, arr, key, max = 5, withID) { + if (arr.length > 1) { + try { + let multipleFound = []; + for(const one of arr) { + let mes = one.name; + if (withID) { + mes = mes + ` (${one.id})`; + } + multipleFound.push(mes); + } + let multi = []; + for(const mu of multipleFound) { + if (multipleFound.indexOf(mu) < max) { + multi.push(mu); + } + } + let mes = multi.join(", "); + if (multipleFound.length > max) { + mes = mes+` and ${multipleFound.length - max} more...`; + } + return `Multiple roles found for: **${key}**\`\`\`md\n# ${mes}\`\`\``; + } catch (e) { + errLog(e, msg, client); + } + } else { + return ''; + } +} + module.exports = { cleanMentionID, - multipleMembersFound, - findMemberRegEx, getUser, + multipleMembersFound, multipleRolesFound, multipleChannelsFound, + findMemberRegEx, findChannelRegEx, findRoleRegEx, + getUser, getChannelMessage, errLog, execCB, ranLog, noPerm, trySend, tryDelete, tryReact,