mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	Added Timeout as a punishment to warnpunish and anti* commands
This commit is contained in:
		@@ -49,7 +49,8 @@ public enum PunishmentAction
 | 
			
		||||
    ChatMute,
 | 
			
		||||
    VoiceMute,
 | 
			
		||||
    AddRole,
 | 
			
		||||
    Warn
 | 
			
		||||
    Warn,
 | 
			
		||||
    TimeOut
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public class AntiSpamIgnore : DbEntity
 | 
			
		||||
 
 | 
			
		||||
@@ -38,10 +38,14 @@ public partial class Administration
 | 
			
		||||
            if (minAgeMinutes < 1 || punishTimeMinutes < 0)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var minutes = (int?)punishTime?.Time.TotalMinutes ?? 0;
 | 
			
		||||
            if (action is PunishmentAction.TimeOut && minutes < 1)
 | 
			
		||||
                minutes = 1;
 | 
			
		||||
 | 
			
		||||
            await _service.StartAntiAltAsync(ctx.Guild.Id,
 | 
			
		||||
                minAgeMinutes,
 | 
			
		||||
                action,
 | 
			
		||||
                (int?)punishTime?.Time.TotalMinutes ?? 0);
 | 
			
		||||
                minutes);
 | 
			
		||||
 | 
			
		||||
            await ctx.OkAsync();
 | 
			
		||||
        }
 | 
			
		||||
@@ -56,6 +60,9 @@ public partial class Administration
 | 
			
		||||
            if (minAgeMinutes < 1)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if (action == PunishmentAction.TimeOut)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            await _service.StartAntiAltAsync(ctx.Guild.Id, minAgeMinutes, action, roleId: role.Id);
 | 
			
		||||
 | 
			
		||||
            await ctx.OkAsync();
 | 
			
		||||
@@ -122,6 +129,9 @@ public partial class Administration
 | 
			
		||||
            var time = (int?)punishTime?.Time.TotalMinutes ?? 0;
 | 
			
		||||
            if (time is < 0 or > 60 * 24)
 | 
			
		||||
                return;
 | 
			
		||||
            
 | 
			
		||||
            if(action is PunishmentAction.TimeOut && time < 1)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var stats = await _service.StartAntiRaidAsync(ctx.Guild.Id, userThreshold, seconds, action, time);
 | 
			
		||||
 | 
			
		||||
@@ -187,6 +197,9 @@ public partial class Administration
 | 
			
		||||
            if (time is < 0 or > 60 * 24)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if (action is PunishmentAction.TimeOut && time < 1)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var stats = await _service.StartAntiSpamAsync(ctx.Guild.Id, messageCount, action, time, role?.Id);
 | 
			
		||||
 | 
			
		||||
            await SendConfirmAsync(GetText(strs.prot_enable("Anti-Spam")),
 | 
			
		||||
 
 | 
			
		||||
@@ -345,6 +345,10 @@ public partial class Administration
 | 
			
		||||
            if (punish is PunishmentAction.AddRole or PunishmentAction.Warn)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            // you must specify the time for timeout
 | 
			
		||||
            if (punish is PunishmentAction.TimeOut && time is null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var success = _service.WarnPunish(ctx.Guild.Id, number, punish, time);
 | 
			
		||||
 | 
			
		||||
            if (!success)
 | 
			
		||||
 
 | 
			
		||||
@@ -193,6 +193,9 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
            case PunishmentAction.Warn:
 | 
			
		||||
                await Warn(guild, user.Id, mod, 1, reason);
 | 
			
		||||
                break;
 | 
			
		||||
            case PunishmentAction.TimeOut:
 | 
			
		||||
                await user.SetTimeOutAsync(TimeSpan.FromMinutes(minutes));
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -224,6 +227,8 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
                return botUser.GuildPermissions.MuteMembers;
 | 
			
		||||
            case PunishmentAction.AddRole:
 | 
			
		||||
                return botUser.GuildPermissions.ManageRoles;
 | 
			
		||||
            case PunishmentAction.TimeOut:
 | 
			
		||||
                return botUser.GuildPermissions.ModerateMembers;
 | 
			
		||||
            default:
 | 
			
		||||
                return true;
 | 
			
		||||
        }
 | 
			
		||||
@@ -351,7 +356,7 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
            await uow.Warnings.ForgiveAll(guildId, userId, moderator);
 | 
			
		||||
        else
 | 
			
		||||
            toReturn = uow.Warnings.Forgive(guildId, userId, moderator, index - 1);
 | 
			
		||||
        uow.SaveChanges();
 | 
			
		||||
        await uow.SaveChangesAsync();
 | 
			
		||||
        return toReturn;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -372,6 +377,9 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
        if (punish is PunishmentAction.AddRole && role is null)
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
        if (punish is PunishmentAction.TimeOut && time is null)
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
        using var uow = _db.GetDbContext();
 | 
			
		||||
        var ps = uow.GuildConfigsForId(guildId, set => set.Include(x => x.WarnPunishments)).WarnPunishments;
 | 
			
		||||
        var toDelete = ps.Where(x => x.Count == number);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user