mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	Bot will now check for permissions when trying to apply punishments
This commit is contained in:
		@@ -99,6 +99,10 @@ namespace NadekoBot.Modules.Administration.Services
 | 
			
		||||
        public async Task ApplyPunishment(IGuild guild, IGuildUser user, IUser mod, PunishmentAction p, int minutes,
 | 
			
		||||
            ulong? roleId, string reason)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (!await CheckPermission(guild, p))
 | 
			
		||||
                return;
 | 
			
		||||
            
 | 
			
		||||
            switch (p)
 | 
			
		||||
            {
 | 
			
		||||
                case PunishmentAction.Mute:
 | 
			
		||||
@@ -171,6 +175,40 @@ namespace NadekoBot.Modules.Administration.Services
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Used to prevent the bot from hitting 403's when it needs to
 | 
			
		||||
        /// apply punishments with insufficient permissions 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="guild">Guild the punishment is applied in</param>
 | 
			
		||||
        /// <param name="punish">Punishment to apply</param>
 | 
			
		||||
        /// <returns>Whether the bot has sufficient permissions</returns>
 | 
			
		||||
        private async Task<bool> CheckPermission(IGuild guild, PunishmentAction punish)
 | 
			
		||||
        {
 | 
			
		||||
            
 | 
			
		||||
            var botUser = await guild.GetCurrentUserAsync();
 | 
			
		||||
            switch (punish)
 | 
			
		||||
            {
 | 
			
		||||
                case PunishmentAction.Mute:
 | 
			
		||||
                    return botUser.GuildPermissions.MuteMembers && botUser.GuildPermissions.ManageRoles;
 | 
			
		||||
                case PunishmentAction.Kick:
 | 
			
		||||
                    return botUser.GuildPermissions.KickMembers;
 | 
			
		||||
                case PunishmentAction.Ban:
 | 
			
		||||
                    return botUser.GuildPermissions.BanMembers;
 | 
			
		||||
                case PunishmentAction.Softban:
 | 
			
		||||
                    return botUser.GuildPermissions.BanMembers; // ban + unban
 | 
			
		||||
                case PunishmentAction.RemoveRoles:
 | 
			
		||||
                    return botUser.GuildPermissions.ManageRoles;
 | 
			
		||||
                case PunishmentAction.ChatMute:
 | 
			
		||||
                    return botUser.GuildPermissions.ManageRoles; // adds nadeko-mute role
 | 
			
		||||
                case PunishmentAction.VoiceMute:
 | 
			
		||||
                    return botUser.GuildPermissions.MuteMembers;
 | 
			
		||||
                case PunishmentAction.AddRole:
 | 
			
		||||
                    return botUser.GuildPermissions.ManageRoles;
 | 
			
		||||
                default:
 | 
			
		||||
                    return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task CheckAllWarnExpiresAsync()
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user