diff --git a/backend/src/plugins/BotControl/BotControlPlugin.ts b/backend/src/plugins/BotControl/BotControlPlugin.ts index 5e871612..e37df650 100644 --- a/backend/src/plugins/BotControl/BotControlPlugin.ts +++ b/backend/src/plugins/BotControl/BotControlPlugin.ts @@ -15,6 +15,7 @@ import { AddDashboardUserCmd } from "./commands/AddDashboardUserCmd"; import { RemoveDashboardUserCmd } from "./commands/RemoveDashboardUserCmd"; import { Configs } from "../../data/Configs"; import { ApiPermissionAssignments } from "../../data/ApiPermissionAssignments"; +import { ListDashboardUsersCmd } from "./commands/ListDashboardUsersCmd"; const defaultOptions = { config: { @@ -37,6 +38,7 @@ export const BotControlPlugin = zeppelinGlobalPlugin()("bo DisallowServerCmd, AddDashboardUserCmd, RemoveDashboardUserCmd, + ListDashboardUsersCmd, ], onLoad(pluginData) { diff --git a/backend/src/plugins/BotControl/commands/ListDashboardUsersCmd.ts b/backend/src/plugins/BotControl/commands/ListDashboardUsersCmd.ts new file mode 100644 index 00000000..35f8318f --- /dev/null +++ b/backend/src/plugins/BotControl/commands/ListDashboardUsersCmd.ts @@ -0,0 +1,37 @@ +import { botControlCmd } from "../types"; +import { isOwnerPreFilter, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; +import { commandTypeHelpers as ct } from "../../../commandTypes"; +import { ApiPermissions } from "@shared/apiPermissions"; +import { resolveUser } from "../../../utils"; + +export const ListDashboardUsersCmd = botControlCmd({ + trigger: ["list_dashboard_users"], + permission: null, + config: { + preFilters: [isOwnerPreFilter], + }, + + signature: { + guildId: ct.string(), + }, + + async run({ pluginData, message: msg, args }) { + const guild = await pluginData.state.allowedGuilds.find(args.guildId); + if (!guild) { + sendErrorMessage(pluginData, msg.channel, "Server is not using Zeppelin"); + return; + } + + const dashboardUsers = await pluginData.state.apiPermissionAssignments.getByGuildId(guild.id); + const users = await Promise.all(dashboardUsers.map(perm => resolveUser(pluginData.client, perm.target_id))); + const userNameList = users.map( + user => `<@!${user.id}> (**${user.username}#${user.discriminator}**, \`${user.id}\`)`, + ); + + sendSuccessMessage( + pluginData, + msg.channel, + `The following users have dashboard access for **${guild.name}**:\n\n${userNameList}`, + ); + }, +});