Update lookup command

This commit is contained in:
Neko Life 2021-05-09 13:09:35 +00:00
parent 124d9dd0dd
commit 03afecade9
3 changed files with 176 additions and 10 deletions

View file

@ -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);

View file

@ -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);
}

View file

@ -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<GuildMember[]>} 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,