diff options
author | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2022-07-06 22:10:58 +0200 |
---|---|---|
committer | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2022-07-06 22:10:58 +0200 |
commit | adbb5e939cebcf4c0479d66162377957f2a845af (patch) | |
tree | e69b237c79fac2701f162fce6076ec1f85f617a9 /src/lib/common/util | |
parent | 22b3a8af49dc16bf5d8f9c3ce48b4770505ea33b (diff) | |
download | tanzanite-adbb5e939cebcf4c0479d66162377957f2a845af.tar.gz tanzanite-adbb5e939cebcf4c0479d66162377957f2a845af.tar.bz2 tanzanite-adbb5e939cebcf4c0479d66162377957f2a845af.zip |
feat(automod): unmute button
Diffstat (limited to 'src/lib/common/util')
-rw-r--r-- | src/lib/common/util/Moderation.ts | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/lib/common/util/Moderation.ts b/src/lib/common/util/Moderation.ts index cb6b4db..fc01602 100644 --- a/src/lib/common/util/Moderation.ts +++ b/src/lib/common/util/Moderation.ts @@ -1,13 +1,16 @@ import { ActivePunishment, ActivePunishmentType, + baseMuteResponse, colors, emojis, format, Guild as GuildDB, humanizeDuration, ModLog, - type ModLogType + permissionsResponse, + type ModLogType, + type ValueOf } from '#lib'; import assert from 'assert'; import { @@ -119,6 +122,25 @@ export async function permissionCheck( } /** + * Performs permission checks that are required in order to (un)mute a member. + * @param guild The guild to check the mute permissions in. + * @returns A {@link MuteResponse} or true if nothing failed. + */ +export async function checkMutePermissions( + guild: Guild +): Promise<ValueOf<typeof baseMuteResponse> | ValueOf<typeof permissionsResponse> | true> { + if (!guild.members.me!.permissions.has('ManageRoles')) return permissionsResponse.MISSING_PERMISSIONS; + const muteRoleID = await guild.getSetting('muteRole'); + if (!muteRoleID) return baseMuteResponse.NO_MUTE_ROLE; + const muteRole = guild.roles.cache.get(muteRoleID); + if (!muteRole) return baseMuteResponse.MUTE_ROLE_INVALID; + if (muteRole.position >= guild.members.me!.roles.highest.position || muteRole.managed) + return baseMuteResponse.MUTE_ROLE_NOT_MANAGEABLE; + + return true; +} + +/** * Creates a modlog entry for a punishment. * @param options Options for creating a modlog entry. * @param getCaseNumber Whether or not to get the case number of the entry. |