Eager-check permissions in persist plugin
This commit is contained in:
parent
6730e51552
commit
e55375fb25
2 changed files with 35 additions and 1 deletions
|
@ -6,6 +6,7 @@ import { GuildLogs } from "src/data/GuildLogs";
|
|||
import { StoreDataEvt } from "./events/StoreDataEvt";
|
||||
import { LoadDataEvt } from "./events/LoadDataEvt";
|
||||
import { trimPluginDescription } from "../../utils";
|
||||
import { LogsPlugin } from "../Logs/LogsPlugin";
|
||||
|
||||
const defaultOptions: PluginOptions<PersistPluginType> = {
|
||||
config: {
|
||||
|
@ -25,6 +26,7 @@ export const PersistPlugin = zeppelinPlugin<PersistPluginType>()("persist", {
|
|||
`),
|
||||
},
|
||||
|
||||
dependencies: [LogsPlugin],
|
||||
configSchema: ConfigSchema,
|
||||
defaultOptions,
|
||||
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
import { persistEvent } from "../types";
|
||||
import { MemberOptions } from "eris";
|
||||
import { Constants, MemberOptions } from "eris";
|
||||
import intersection from "lodash.intersection";
|
||||
import { LogType } from "src/data/LogType";
|
||||
import { stripObjectToScalars } from "src/utils";
|
||||
import { getMissingPermissions } from "../../../utils/getMissingPermissions";
|
||||
import { LogsPlugin } from "../../Logs/LogsPlugin";
|
||||
import { missingPermissionError } from "../../../utils/missingPermissionError";
|
||||
import { canAssignRole } from "../../../utils/canAssignRole";
|
||||
|
||||
const p = Constants.Permissions;
|
||||
|
||||
export const LoadDataEvt = persistEvent({
|
||||
event: "guildMemberAdd",
|
||||
|
@ -23,9 +29,35 @@ export const LoadDataEvt = persistEvent({
|
|||
const config = pluginData.config.getForMember(member);
|
||||
const restoredData = [];
|
||||
|
||||
// Check permissions
|
||||
const me = pluginData.guild.members.get(pluginData.client.user.id);
|
||||
let requiredPermissions = 0;
|
||||
if (config.persist_nicknames) requiredPermissions |= p.manageNicknames;
|
||||
if (config.persisted_roles) requiredPermissions |= p.manageRoles;
|
||||
const missingPermissions = getMissingPermissions(me.permission, requiredPermissions);
|
||||
if (missingPermissions) {
|
||||
pluginData.getPlugin(LogsPlugin).log(LogType.BOT_ALERT, {
|
||||
body: `Missing permissions for persist plugin: ${missingPermissionError(missingPermissions)}`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Check specific role permissions
|
||||
if (config.persisted_roles) {
|
||||
for (const roleId of config.persisted_roles) {
|
||||
if (!canAssignRole(pluginData.guild, me, roleId)) {
|
||||
pluginData.getPlugin(LogsPlugin).log(LogType.BOT_ALERT, {
|
||||
body: `Missing permissions to assign role \`${roleId}\` in persist plugin`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const persistedRoles = config.persisted_roles;
|
||||
if (persistedRoles.length) {
|
||||
const rolesToRestore = intersection(persistedRoles, persistedData.roles);
|
||||
|
||||
if (rolesToRestore.length) {
|
||||
restoredData.push("roles");
|
||||
toRestore.roles = Array.from(new Set([...rolesToRestore, ...member.roles]));
|
||||
|
|
Loading…
Add table
Reference in a new issue