mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-03-16 22:21:51 +00:00
Add all-encompassing permission listing command (#145)
This commit is contained in:
parent
7925f516b8
commit
d8e721c9de
2 changed files with 80 additions and 0 deletions
|
@ -16,6 +16,7 @@ import { RemoveDashboardUserCmd } from "./commands/RemoveDashboardUserCmd";
|
||||||
import { Configs } from "../../data/Configs";
|
import { Configs } from "../../data/Configs";
|
||||||
import { ApiPermissionAssignments } from "../../data/ApiPermissionAssignments";
|
import { ApiPermissionAssignments } from "../../data/ApiPermissionAssignments";
|
||||||
import { ListDashboardUsersCmd } from "./commands/ListDashboardUsersCmd";
|
import { ListDashboardUsersCmd } from "./commands/ListDashboardUsersCmd";
|
||||||
|
import { ListDashboardPermsCmd } from "./commands/ListDashboardPermsCmd";
|
||||||
|
|
||||||
const defaultOptions = {
|
const defaultOptions = {
|
||||||
config: {
|
config: {
|
||||||
|
@ -39,6 +40,7 @@ export const BotControlPlugin = zeppelinGlobalPlugin<BotControlPluginType>()("bo
|
||||||
AddDashboardUserCmd,
|
AddDashboardUserCmd,
|
||||||
RemoveDashboardUserCmd,
|
RemoveDashboardUserCmd,
|
||||||
ListDashboardUsersCmd,
|
ListDashboardUsersCmd,
|
||||||
|
ListDashboardPermsCmd,
|
||||||
],
|
],
|
||||||
|
|
||||||
onLoad(pluginData) {
|
onLoad(pluginData) {
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
import { botControlCmd } from "../types";
|
||||||
|
import { isOwnerPreFilter, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils";
|
||||||
|
import { commandTypeHelpers as ct } from "../../../commandTypes";
|
||||||
|
import { createChunkedMessage, resolveUser } from "../../../utils";
|
||||||
|
import { AllowedGuild } from "../../../data/entities/AllowedGuild";
|
||||||
|
import { ApiPermissionAssignment } from "../../../data/entities/ApiPermissionAssignment";
|
||||||
|
|
||||||
|
export const ListDashboardPermsCmd = botControlCmd({
|
||||||
|
trigger: ["list_dashboard_permissions", "list_dashboard_perms", "list_dash_permissionss", "list_dash_perms"],
|
||||||
|
permission: null,
|
||||||
|
config: {
|
||||||
|
preFilters: [isOwnerPreFilter],
|
||||||
|
},
|
||||||
|
|
||||||
|
signature: {
|
||||||
|
guildId: ct.string({ option: true, shortcut: "g" }),
|
||||||
|
user: ct.resolvedUser({ option: true, shortcut: "u" }),
|
||||||
|
},
|
||||||
|
|
||||||
|
async run({ pluginData, message: msg, args }) {
|
||||||
|
if (!args.user && !args.guildId) {
|
||||||
|
sendErrorMessage(pluginData, msg.channel, "Must specify at least guildId, user, or both.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let guild: AllowedGuild | undefined;
|
||||||
|
if (args.guildId) {
|
||||||
|
guild = await pluginData.state.allowedGuilds.find(args.guildId);
|
||||||
|
if (!guild) {
|
||||||
|
sendErrorMessage(pluginData, msg.channel, "Server is not using Zeppelin");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let existingUserAssignment: ApiPermissionAssignment[];
|
||||||
|
if (args.user) {
|
||||||
|
existingUserAssignment = await pluginData.state.apiPermissionAssignments.getByUserId(args.user.id);
|
||||||
|
if (existingUserAssignment.length === 0) {
|
||||||
|
sendErrorMessage(pluginData, msg.channel, "The user has no assigned permissions.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let finalMessage = "";
|
||||||
|
|
||||||
|
// If we have user, always display which guilds they have permissions in (or only specified guild permissions)
|
||||||
|
if (args.user) {
|
||||||
|
for (const assignment of existingUserAssignment!) {
|
||||||
|
if (guild != null && assignment.guild_id !== args.guildId) continue;
|
||||||
|
finalMessage += `The user has the following permissions on server \`${
|
||||||
|
assignment.guild_id
|
||||||
|
}\`:\n${assignment.permissions.join("\n")}\n\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (finalMessage === "") {
|
||||||
|
sendErrorMessage(pluginData, msg.channel, "The user has no assigned permissions on the specified server.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Else display all users that have permissions on the specified guild
|
||||||
|
} else if (guild) {
|
||||||
|
const existingGuildAssignment = await pluginData.state.apiPermissionAssignments.getByGuildId(guild.id);
|
||||||
|
if (existingGuildAssignment.length === 0) {
|
||||||
|
sendErrorMessage(pluginData, msg.channel, "The server has no assigned permissions.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
finalMessage += `The server \`${guild.id}\` has the following assigned permissions:\n`; // Double \n for consistency with AddDashboardUserCmd
|
||||||
|
for (const assignment of existingGuildAssignment) {
|
||||||
|
const user = await resolveUser(pluginData.client, assignment.target_id);
|
||||||
|
finalMessage += `\n**${user.username}#${user.discriminator}**, \`${
|
||||||
|
assignment.target_id
|
||||||
|
}\`: ${assignment.permissions.join(", ")}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await sendSuccessMessage(pluginData, msg.channel, finalMessage.trim(), {});
|
||||||
|
},
|
||||||
|
});
|
Loading…
Add table
Reference in a new issue