3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-16 14:11:50 +00:00

Implement temporary permission check public functions

This commit is contained in:
Dark 2021-08-15 01:44:25 +02:00
parent 7cf75f3255
commit 1c8a223264
No known key found for this signature in database
GPG key ID: 384C4B4F5B1E25A8
7 changed files with 46 additions and 10 deletions

View file

@ -17,9 +17,9 @@ export async function cleanAction(
channelId: interaction.channelId, channelId: interaction.channelId,
member: executingMember, member: executingMember,
}); });
const utility = pluginData.getPlugin(UtilityPlugin);
// TODO: Add perm check for can_clean in util if (!userCfg.can_use || !(await utility.hasPermission(executingMember, interaction.channelId, "can_clean"))) {
if (!userCfg.can_use) {
await interaction.followUp({ content: "Cannot clean: insufficient permissions" }); await interaction.followUp({ content: "Cannot clean: insufficient permissions" });
return; return;
} }
@ -36,7 +36,6 @@ export async function cleanAction(
try { try {
interaction.followUp(`Cleaning... Amount: ${amount}, User Only: ${targetUserOnly}, Pins: ${deletePins}`); interaction.followUp(`Cleaning... Amount: ${amount}, User Only: ${targetUserOnly}, Pins: ${deletePins}`);
const utility = pluginData.getPlugin(UtilityPlugin);
utility.clean({ count: amount, user, channel: targetMessage.channel.id, "delete-pins": deletePins }, targetMessage); utility.clean({ count: amount, user, channel: targetMessage.channel.id, "delete-pins": deletePins }, targetMessage);
} catch (e) { } catch (e) {
interaction.followUp({ ephemeral: true, content: "Plugin error, please check your BOT_ALERTs" }); interaction.followUp({ ephemeral: true, content: "Plugin error, please check your BOT_ALERTs" });

View file

@ -1,5 +1,6 @@
import humanizeDuration from "humanize-duration"; import humanizeDuration from "humanize-duration";
import { GuildPluginData } from "knub"; import { GuildPluginData } from "knub";
import { ModActionsPlugin } from "src/plugins/ModActions/ModActionsPlugin";
import { canActOn } from "src/pluginUtils"; import { canActOn } from "src/pluginUtils";
import { LogType } from "../../../data/LogType"; import { LogType } from "../../../data/LogType";
import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError"; import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError";
@ -17,8 +18,8 @@ export async function muteAction(pluginData: GuildPluginData<ContextMenuPluginTy
member: executingMember, member: executingMember,
}); });
// TODO: Add perm check for can_mute const modactions = pluginData.getPlugin(ModActionsPlugin);
if (!userCfg.can_use) { if (!userCfg.can_use || !(await modactions.hasMutePermission(executingMember, interaction.channelId))) {
await interaction.followUp({ content: "Cannot mute: insufficient permissions" }); await interaction.followUp({ content: "Cannot mute: insufficient permissions" });
return; return;
} }

View file

@ -9,11 +9,10 @@ export async function userInfoAction(pluginData: GuildPluginData<ContextMenuPlug
channelId: interaction.channelId, channelId: interaction.channelId,
member: executingMember, member: executingMember,
}); });
const utility = pluginData.getPlugin(UtilityPlugin);
// TODO: Add can_userinfo perm check if (userCfg.can_use && (await utility.hasPermission(executingMember, interaction.channelId, "can_userinfo"))) {
if (userCfg.can_use) { const embed = await utility.userInfo(interaction.targetId, interaction.user.id);
const util = pluginData.getPlugin(UtilityPlugin);
const embed = await util.userInfo(interaction.targetId, interaction.user.id);
await interaction.followUp({ embeds: [embed] }); await interaction.followUp({ embeds: [embed] });
} else { } else {
await interaction.followUp({ content: "Cannot info: insufficient permissions" }); await interaction.followUp({ content: "Cannot info: insufficient permissions" });

View file

@ -38,6 +38,7 @@ import { CreateKickCaseOnManualKickEvt } from "./events/CreateKickCaseOnManualKi
import { CreateUnbanCaseOnManualUnbanEvt } from "./events/CreateUnbanCaseOnManualUnbanEvt"; import { CreateUnbanCaseOnManualUnbanEvt } from "./events/CreateUnbanCaseOnManualUnbanEvt";
import { PostAlertOnMemberJoinEvt } from "./events/PostAlertOnMemberJoinEvt"; import { PostAlertOnMemberJoinEvt } from "./events/PostAlertOnMemberJoinEvt";
import { banUserId } from "./functions/banUserId"; import { banUserId } from "./functions/banUserId";
import { hasMutePermission } from "./functions/hasMutePerm";
import { kickMember } from "./functions/kickMember"; import { kickMember } from "./functions/kickMember";
import { offModActionsEvent } from "./functions/offModActionsEvent"; import { offModActionsEvent } from "./functions/offModActionsEvent";
import { onModActionsEvent } from "./functions/onModActionsEvent"; import { onModActionsEvent } from "./functions/onModActionsEvent";
@ -181,6 +182,12 @@ export const ModActionsPlugin = zeppelinGuildPlugin<ModActionsPluginType>()({
}; };
}, },
hasMutePermission(pluginData) {
return (member: GuildMember, channelId: string) => {
return hasMutePermission(pluginData, member, channelId);
};
},
on: mapToPublicFn(onModActionsEvent), on: mapToPublicFn(onModActionsEvent),
off: mapToPublicFn(offModActionsEvent), off: mapToPublicFn(offModActionsEvent),
getEventEmitter(pluginData) { getEventEmitter(pluginData) {

View file

@ -0,0 +1,11 @@
import { GuildMember, Snowflake } from "discord.js";
import { GuildPluginData } from "knub";
import { ModActionsPluginType } from "../types";
export async function hasMutePermission(
pluginData: GuildPluginData<ModActionsPluginType>,
member: GuildMember,
channelId: Snowflake,
) {
return (await pluginData.config.getMatchingConfig({ member, channelId })).can_mute;
}

View file

@ -1,4 +1,4 @@
import { MessageEmbedOptions } from "discord.js"; import { GuildMember, MessageEmbedOptions } from "discord.js";
import { PluginOptions } from "knub"; import { PluginOptions } from "knub";
import { GuildArchives } from "../../data/GuildArchives"; import { GuildArchives } from "../../data/GuildArchives";
import { GuildCases } from "../../data/GuildCases"; import { GuildCases } from "../../data/GuildCases";
@ -38,6 +38,7 @@ import { VcdisconnectCmd } from "./commands/VcdisconnectCmd";
import { VcmoveAllCmd, VcmoveCmd } from "./commands/VcmoveCmd"; import { VcmoveAllCmd, VcmoveCmd } from "./commands/VcmoveCmd";
import { AutoJoinThreadEvt, AutoJoinThreadSyncEvt } from "./events/AutoJoinThreadEvt"; import { AutoJoinThreadEvt, AutoJoinThreadSyncEvt } from "./events/AutoJoinThreadEvt";
import { getUserInfoEmbed } from "./functions/getUserInfoEmbed"; import { getUserInfoEmbed } from "./functions/getUserInfoEmbed";
import { hasPermission } from "./functions/hasPermission";
import { activeReloads } from "./guildReloads"; import { activeReloads } from "./guildReloads";
import { refreshMembersIfNeeded } from "./refreshMembers"; import { refreshMembersIfNeeded } from "./refreshMembers";
import { ConfigSchema, UtilityPluginType } from "./types"; import { ConfigSchema, UtilityPluginType } from "./types";
@ -170,6 +171,12 @@ export const UtilityPlugin = zeppelinGuildPlugin<UtilityPluginType>()({
return getUserInfoEmbed(pluginData, userId, false, requestMemberId); return getUserInfoEmbed(pluginData, userId, false, requestMemberId);
}; };
}, },
hasPermission(pluginData) {
return (member: GuildMember, channelId: string, permission: string) => {
return hasPermission(pluginData, member, channelId, permission);
};
},
}, },
beforeLoad(pluginData) { beforeLoad(pluginData) {

View file

@ -0,0 +1,12 @@
import { GuildMember, Snowflake } from "discord.js";
import { GuildPluginData } from "knub";
import { UtilityPluginType } from "../types";
export async function hasPermission(
pluginData: GuildPluginData<UtilityPluginType>,
member: GuildMember,
channelId: Snowflake,
permission: string,
) {
return (await pluginData.config.getMatchingConfig({ member, channelId }))[permission];
}