Added Timeout as a punishment to warnpunish and anti* commands

This commit is contained in:
Kwoth
2022-08-11 16:19:02 +02:00
parent b853495d65
commit dc229ea2b3
4 changed files with 29 additions and 3 deletions

View File

@@ -49,7 +49,8 @@ public enum PunishmentAction
ChatMute,
VoiceMute,
AddRole,
Warn
Warn,
TimeOut
}
public class AntiSpamIgnore : DbEntity

View File

@@ -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")),

View File

@@ -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)

View File

@@ -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);