djskage
Version:
A Discord.js extension for utility commands
128 lines (127 loc) • 5.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
module.exports = {
name: "permissions",
aliases: ["pms"],
description: "Check permissions of a user, role or bot in the current or different channel.",
usage: "permissions <user/role/bot> (?c <#id> -> channel, ?u <@id> -> user, ?r <@&id> -> role)",
execute: async (kage, client, message) => {
const args = message.content.split(" ").slice(2);
const b = message.guild?.members.me;
if (!message.guild)
return;
if (!b)
return;
let c;
const channelArg = args.findIndex((arg) => arg.startsWith("?c"));
if ((channelArg || channelArg === 0) && channelArg !== -1) {
const channelInput = args[channelArg + 1];
const channelMention = channelInput.match(/^<#(\d+)>$/);
let targetChannel;
if (channelMention) {
targetChannel = message.guild?.channels.cache.get(channelMention[1]);
}
else if (/^\d+$/.test(channelInput)) {
targetChannel = message.guild?.channels.cache.get(channelInput);
}
else {
targetChannel = message.guild?.channels.cache.find((channel) => channel.name === channelInput);
}
c = targetChannel;
args.splice(channelArg, 2);
}
let u;
let m;
const userArg = args.findIndex((arg) => arg.startsWith("?u"));
if ((userArg || userArg === 0) && userArg !== -1) {
const userInput = args[userArg + 1];
const userMatch = userInput.match(/^<@!?(\d+)>$/);
if (userMatch) {
const overrideUser = client.users.cache.get(userMatch[1]);
if (overrideUser)
u = overrideUser;
const overrideMember = message.guild?.members.cache.get(userMatch[1]);
if (overrideMember)
m = overrideMember;
}
else if (/^\d+$/.test(userInput)) {
u = client.users.cache.get(userInput) || u;
m = message.guild?.members.cache.get(userInput) || m;
}
else {
u = client.users.cache.find((user) => user.username === userInput) || u;
m =
message.guild?.members.cache.find((member) => member.user.username === userInput) || m;
}
args.splice(userArg, 2);
}
let r;
const roleArg = args.findIndex((arg) => arg.startsWith("?r"));
if ((roleArg || roleArg === 0) && roleArg !== -1) {
const userInput = args[roleArg + 1];
const userMatch = userInput.match(/^<@&!?(\d+)>$/);
if (userMatch) {
const overideRole = message.guild?.roles.cache.get(userMatch[1]);
if (overideRole)
r = overideRole;
}
else if (/^\d+$/.test(userInput)) {
r = message.guild?.roles.cache.get(userInput) || r;
}
else {
r =
message.guild?.roles.cache.find((role) => role.name === userInput) ||
r;
}
args.splice(roleArg, 2);
}
const bGP = b?.permissions;
const bCP = c ? c.permissionsFor(b) : null;
const uGP = m ? m.permissions : null;
const uCP = m ? c?.permissionsFor(m) : null;
const rGP = r ? r.permissions : null;
const rCP = r ? c?.permissionsFor(r) : null;
const formatPermissions = (permissions) => {
return permissions.toArray().length > 0
? permissions.toArray().join(", ")
: "No permissions granted.";
};
const title = `Permission Check - ${r ? r.name : u ? u.username : client.user?.username}`;
const em = new discord_js_1.EmbedBuilder()
.setColor(kage.options.customisation.embedColor)
.setTitle(title)
.setFooter({ text: "Djskage - v0.2.0" })
.setThumbnail(r
? r.iconURL({ size: 512, extension: "webp" }) || null
: u
? u.displayAvatarURL({ size: 512, extension: "webp" })
: client.user?.displayAvatarURL({ size: 512, extension: "webp" }) ||
"");
if (uCP) {
em.setDescription(`**Channel Permissions for User**${u ? ` **${u.username}**\n> <@${u.id}> \n> \`${u.id}\`` : ""}${c ? ` **in ${c.name}**\n> <#${c.id}> \n> \`${c.id}\`` : ""}\n` +
`\`\`\`${formatPermissions(uCP)}\`\`\``);
}
else if (rCP) {
em.setDescription(`**Channel Permissions for Role**${r ? ` **${r.name}**\n> <@&${r.id}> \n> \`${r.id}\`` : ""}${c ? ` **in ${c.name}**\n> <#${c.id}> \n> \`${c.id}\`` : ""}\n\`\`\`${formatPermissions(rCP)}\`\`\``);
}
else if (uGP) {
em.setDescription(`**User Permissions**${u ? ` **${u.username}**\n> <@${u.id}> \n> \`${u.id}\`` : ""}\n\`\`\`${formatPermissions(uGP)}\`\`\``);
}
else if (rGP) {
em.setDescription(`**Role Permissions**${r ? ` **${r.name}**\n> <@&${r.id}> \n> \`${r.id}\`` : ""}\n\`\`\`${formatPermissions(rGP)}\`\`\``);
}
else if (bCP) {
em.setDescription(`**Channel Permissions for Bot**${c ? ` **in ${c.name}**\n> <#${c.id}> \n> \`${c.id}\`` : ""}\n\`\`\`${formatPermissions(bCP)}\`\`\``);
}
else if (bGP) {
em.setDescription(`**Bot Permissions**\n\`\`\`${formatPermissions(bGP)}\`\`\``);
}
try {
await message.reply({ embeds: [em] });
}
catch (e) {
message.reply("Error sending embed.");
}
},
};