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 { StoreDataEvt } from "./events/StoreDataEvt";
|
||||||
import { LoadDataEvt } from "./events/LoadDataEvt";
|
import { LoadDataEvt } from "./events/LoadDataEvt";
|
||||||
import { trimPluginDescription } from "../../utils";
|
import { trimPluginDescription } from "../../utils";
|
||||||
|
import { LogsPlugin } from "../Logs/LogsPlugin";
|
||||||
|
|
||||||
const defaultOptions: PluginOptions<PersistPluginType> = {
|
const defaultOptions: PluginOptions<PersistPluginType> = {
|
||||||
config: {
|
config: {
|
||||||
|
@ -25,6 +26,7 @@ export const PersistPlugin = zeppelinPlugin<PersistPluginType>()("persist", {
|
||||||
`),
|
`),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
dependencies: [LogsPlugin],
|
||||||
configSchema: ConfigSchema,
|
configSchema: ConfigSchema,
|
||||||
defaultOptions,
|
defaultOptions,
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
import { persistEvent } from "../types";
|
import { persistEvent } from "../types";
|
||||||
import { MemberOptions } from "eris";
|
import { Constants, MemberOptions } from "eris";
|
||||||
import intersection from "lodash.intersection";
|
import intersection from "lodash.intersection";
|
||||||
import { LogType } from "src/data/LogType";
|
import { LogType } from "src/data/LogType";
|
||||||
import { stripObjectToScalars } from "src/utils";
|
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({
|
export const LoadDataEvt = persistEvent({
|
||||||
event: "guildMemberAdd",
|
event: "guildMemberAdd",
|
||||||
|
@ -23,9 +29,35 @@ export const LoadDataEvt = persistEvent({
|
||||||
const config = pluginData.config.getForMember(member);
|
const config = pluginData.config.getForMember(member);
|
||||||
const restoredData = [];
|
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;
|
const persistedRoles = config.persisted_roles;
|
||||||
if (persistedRoles.length) {
|
if (persistedRoles.length) {
|
||||||
const rolesToRestore = intersection(persistedRoles, persistedData.roles);
|
const rolesToRestore = intersection(persistedRoles, persistedData.roles);
|
||||||
|
|
||||||
if (rolesToRestore.length) {
|
if (rolesToRestore.length) {
|
||||||
restoredData.push("roles");
|
restoredData.push("roles");
|
||||||
toRestore.roles = Array.from(new Set([...rolesToRestore, ...member.roles]));
|
toRestore.roles = Array.from(new Set([...rolesToRestore, ...member.roles]));
|
||||||
|
|
Loading…
Add table
Reference in a new issue