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, ChatMute,
VoiceMute, VoiceMute,
AddRole, AddRole,
Warn Warn,
TimeOut
} }
public class AntiSpamIgnore : DbEntity public class AntiSpamIgnore : DbEntity

View File

@@ -38,10 +38,14 @@ public partial class Administration
if (minAgeMinutes < 1 || punishTimeMinutes < 0) if (minAgeMinutes < 1 || punishTimeMinutes < 0)
return; return;
var minutes = (int?)punishTime?.Time.TotalMinutes ?? 0;
if (action is PunishmentAction.TimeOut && minutes < 1)
minutes = 1;
await _service.StartAntiAltAsync(ctx.Guild.Id, await _service.StartAntiAltAsync(ctx.Guild.Id,
minAgeMinutes, minAgeMinutes,
action, action,
(int?)punishTime?.Time.TotalMinutes ?? 0); minutes);
await ctx.OkAsync(); await ctx.OkAsync();
} }
@@ -56,6 +60,9 @@ public partial class Administration
if (minAgeMinutes < 1) if (minAgeMinutes < 1)
return; return;
if (action == PunishmentAction.TimeOut)
return;
await _service.StartAntiAltAsync(ctx.Guild.Id, minAgeMinutes, action, roleId: role.Id); await _service.StartAntiAltAsync(ctx.Guild.Id, minAgeMinutes, action, roleId: role.Id);
await ctx.OkAsync(); await ctx.OkAsync();
@@ -122,6 +129,9 @@ public partial class Administration
var time = (int?)punishTime?.Time.TotalMinutes ?? 0; var time = (int?)punishTime?.Time.TotalMinutes ?? 0;
if (time is < 0 or > 60 * 24) if (time is < 0 or > 60 * 24)
return; return;
if(action is PunishmentAction.TimeOut && time < 1)
return;
var stats = await _service.StartAntiRaidAsync(ctx.Guild.Id, userThreshold, seconds, action, time); 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) if (time is < 0 or > 60 * 24)
return; return;
if (action is PunishmentAction.TimeOut && time < 1)
return;
var stats = await _service.StartAntiSpamAsync(ctx.Guild.Id, messageCount, action, time, role?.Id); var stats = await _service.StartAntiSpamAsync(ctx.Guild.Id, messageCount, action, time, role?.Id);
await SendConfirmAsync(GetText(strs.prot_enable("Anti-Spam")), 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) if (punish is PunishmentAction.AddRole or PunishmentAction.Warn)
return; 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); var success = _service.WarnPunish(ctx.Guild.Id, number, punish, time);
if (!success) if (!success)

View File

@@ -193,6 +193,9 @@ public class UserPunishService : INService, IReadyExecutor
case PunishmentAction.Warn: case PunishmentAction.Warn:
await Warn(guild, user.Id, mod, 1, reason); await Warn(guild, user.Id, mod, 1, reason);
break; break;
case PunishmentAction.TimeOut:
await user.SetTimeOutAsync(TimeSpan.FromMinutes(minutes));
break;
} }
} }
@@ -224,6 +227,8 @@ public class UserPunishService : INService, IReadyExecutor
return botUser.GuildPermissions.MuteMembers; return botUser.GuildPermissions.MuteMembers;
case PunishmentAction.AddRole: case PunishmentAction.AddRole:
return botUser.GuildPermissions.ManageRoles; return botUser.GuildPermissions.ManageRoles;
case PunishmentAction.TimeOut:
return botUser.GuildPermissions.ModerateMembers;
default: default:
return true; return true;
} }
@@ -351,7 +356,7 @@ public class UserPunishService : INService, IReadyExecutor
await uow.Warnings.ForgiveAll(guildId, userId, moderator); await uow.Warnings.ForgiveAll(guildId, userId, moderator);
else else
toReturn = uow.Warnings.Forgive(guildId, userId, moderator, index - 1); toReturn = uow.Warnings.Forgive(guildId, userId, moderator, index - 1);
uow.SaveChanges(); await uow.SaveChangesAsync();
return toReturn; return toReturn;
} }
@@ -372,6 +377,9 @@ public class UserPunishService : INService, IReadyExecutor
if (punish is PunishmentAction.AddRole && role is null) if (punish is PunishmentAction.AddRole && role is null)
return false; return false;
if (punish is PunishmentAction.TimeOut && time is null)
return false;
using var uow = _db.GetDbContext(); using var uow = _db.GetDbContext();
var ps = uow.GuildConfigsForId(guildId, set => set.Include(x => x.WarnPunishments)).WarnPunishments; var ps = uow.GuildConfigsForId(guildId, set => set.Include(x => x.WarnPunishments)).WarnPunishments;
var toDelete = ps.Where(x => x.Count == number); var toDelete = ps.Where(x => x.Count == number);