antiraid improvement

This commit is contained in:
Kwoth 2016-10-19 01:50:15 +02:00
parent 30e1521810
commit be89ab7ecf

View File

@ -25,6 +25,12 @@ namespace NadekoBot.Modules.Administration
Ban, Ban,
} }
public enum ProtectionType
{
Raiding,
Spamming,
}
private class AntiRaidSetting private class AntiRaidSetting
{ {
public int UserThreshold { get; set; } public int UserThreshold { get; set; }
@ -106,7 +112,7 @@ namespace NadekoBot.Modules.Administration
{ {
if (spamSettings.UserStats.TryRemove(msg.Author.Id, out stats)) if (spamSettings.UserStats.TryRemove(msg.Author.Id, out stats))
{ {
var log = await PunishUser((IGuildUser)msg.Author, spamSettings.Action, spamSettings.MuteRole) var log = await PunishUser((IGuildUser)msg.Author, spamSettings.Action, spamSettings.MuteRole, ProtectionType.Spamming)
.ConfigureAwait(false); .ConfigureAwait(false);
try { await channel.Guild.SendMessageToOwnerAsync(log).ConfigureAwait(false); } catch { } try { await channel.Guild.SendMessageToOwnerAsync(log).ConfigureAwait(false); } catch { }
} }
@ -139,7 +145,7 @@ namespace NadekoBot.Modules.Administration
string msg = ""; string msg = "";
foreach (var gu in users) foreach (var gu in users)
{ {
msg += await PunishUser(gu, settings.Action, settings.MuteRole).ConfigureAwait(false); msg += await PunishUser(gu, settings.Action, settings.MuteRole, ProtectionType.Raiding).ConfigureAwait(false);
} }
try { await usr.Guild.SendMessageToOwnerAsync(msg).ConfigureAwait(false); } catch { } try { await usr.Guild.SendMessageToOwnerAsync(msg).ConfigureAwait(false); } catch { }
} }
@ -154,7 +160,7 @@ namespace NadekoBot.Modules.Administration
}; };
} }
private async Task<string> PunishUser(IGuildUser gu, PunishmentAction action, IRole muteRole) private async Task<string> PunishUser(IGuildUser gu, PunishmentAction action, IRole muteRole, ProtectionType pt)
{ {
switch (action) switch (action)
{ {
@ -162,7 +168,7 @@ namespace NadekoBot.Modules.Administration
try try
{ {
await gu.AddRolesAsync(muteRole); await gu.AddRolesAsync(muteRole);
return $"{Format.Bold(gu.ToString())} was muted due to raiding protection.\n"; return $"{Format.Bold(gu.ToString())} was **MUTED** due to `{pt}` protection on **{gu.Guild.Name}** server.\n";
} }
catch (Exception ex) { _log.Warn(ex, "I can't apply punishement"); } catch (Exception ex) { _log.Warn(ex, "I can't apply punishement"); }
break; break;
@ -180,7 +186,7 @@ namespace NadekoBot.Modules.Administration
// try it twice, really don't want to ban user if // try it twice, really don't want to ban user if
// only kick has been specified as the punishement // only kick has been specified as the punishement
} }
return $"{Format.Bold(gu.ToString())} was kicked due to raiding protection.\n"; return $"{Format.Bold(gu.ToString())} was **KICKED** due to `{pt}` protection on **{gu.Guild.Name}** server.\n";
} }
catch (Exception ex) { _log.Warn(ex, "I can't apply punishment"); } catch (Exception ex) { _log.Warn(ex, "I can't apply punishment"); }
@ -189,7 +195,7 @@ namespace NadekoBot.Modules.Administration
try try
{ {
await gu.Guild.AddBanAsync(gu, 7); await gu.Guild.AddBanAsync(gu, 7);
return $"{Format.Bold(gu.ToString())} was banned due to raiding protection.\n"; return $"{Format.Bold(gu.ToString())} was **BANNED** due to `{pt}` protection on **{gu.Guild.Name}** server.\n";
} }
catch (Exception ex) { _log.Warn(ex, "I can't apply punishment"); } catch (Exception ex) { _log.Warn(ex, "I can't apply punishment"); }
break; break;
@ -262,10 +268,13 @@ namespace NadekoBot.Modules.Administration
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequirePermission(GuildPermission.Administrator)] [RequirePermission(GuildPermission.Administrator)]
public async Task AntiSpam(IUserMessage imsg, PunishmentAction action = PunishmentAction.Mute) public async Task AntiSpam(IUserMessage imsg, int messageCount=3, PunishmentAction action = PunishmentAction.Mute)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
if (messageCount < 2 || messageCount > 10)
return;
AntiSpamSetting throwaway; AntiSpamSetting throwaway;
if (antiSpamGuilds.TryRemove(channel.Guild.Id, out throwaway)) if (antiSpamGuilds.TryRemove(channel.Guild.Id, out throwaway))
{ {
@ -277,6 +286,7 @@ namespace NadekoBot.Modules.Administration
{ {
Action = action, Action = action,
MuteRole = await GetMuteRole(channel.Guild).ConfigureAwait(false), MuteRole = await GetMuteRole(channel.Guild).ConfigureAwait(false),
MessageThreshold = messageCount,
})) }))
await channel.SendMessageAsync("`Anti-Spam feature enabled on this server.`").ConfigureAwait(false); await channel.SendMessageAsync("`Anti-Spam feature enabled on this server.`").ConfigureAwait(false);
} }