public async Task AntiSpam(int messageCount = 3, PunishmentAction action = PunishmentAction.Mute) { if (messageCount < 2 || messageCount > 10) { return; } AntiSpamStats throwaway; if (antiSpamGuilds.TryRemove(Context.Guild.Id, out throwaway)) { using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiSpamSetting) .ThenInclude(x => x.IgnoredChannels)); gc.AntiSpamSetting = null; await uow.CompleteAsync().ConfigureAwait(false); } await Context.Channel.SendConfirmAsync("**Anti-Spam** has been **disabled** on this server.").ConfigureAwait(false); return; } try { await MuteCommands.GetMuteRole(Context.Guild).ConfigureAwait(false); } catch (Exception ex) { await Context.Channel.SendErrorAsync("⚠️ Failed creating a mute role. Give me ManageRoles permission" + "or create 'nadeko-mute' role with disabled SendMessages and try again.") .ConfigureAwait(false); _log.Warn(ex); return; } var stats = new AntiSpamStats { AntiSpamSettings = new AntiSpamSetting() { Action = action, MessageThreshold = messageCount, } }; antiSpamGuilds.AddOrUpdate(Context.Guild.Id, stats, (key, old) => stats); using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiSpamSetting)); gc.AntiSpamSetting = stats.AntiSpamSettings; await uow.CompleteAsync().ConfigureAwait(false); } await Context.Channel.SendConfirmAsync("Anti-Spam Enabled", $"{Context.User.Mention} {stats.ToString()}").ConfigureAwait(false); }
public async Task AntiSpam(int messageCount = 3, PunishmentAction action = PunishmentAction.Mute) { if (messageCount < 2 || messageCount > 10) { return; } AntiSpamStats throwaway; if (_antiSpamGuilds.TryRemove(Context.Guild.Id, out throwaway)) { throwaway.UserStats.ForEach(x => x.Value.Dispose()); using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiSpamSetting) .ThenInclude(x => x.IgnoredChannels)); gc.AntiSpamSetting = null; await uow.CompleteAsync().ConfigureAwait(false); } await ReplyConfirmLocalized("prot_disable", "Anti-Spam").ConfigureAwait(false); return; } try { await MuteCommands.GetMuteRole(Context.Guild).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); await ReplyErrorLocalized("prot_error").ConfigureAwait(false); return; } var stats = new AntiSpamStats { AntiSpamSettings = new AntiSpamSetting() { Action = action, MessageThreshold = messageCount, } }; _antiSpamGuilds.AddOrUpdate(Context.Guild.Id, stats, (key, old) => stats); using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiSpamSetting)); gc.AntiSpamSetting = stats.AntiSpamSettings; await uow.CompleteAsync().ConfigureAwait(false); } await Context.Channel.SendConfirmAsync(GetText("prot_enable", "Anti-Spam"), $"{Context.User.Mention} {GetAntiSpamString(stats)}").ConfigureAwait(false); }
public async Task AntiRaid(IUserMessage imsg, int userThreshold, int seconds, PunishmentAction action) { var channel = (ITextChannel)imsg.Channel; if (userThreshold < 2 || userThreshold > 30) { await channel.SendErrorAsync("❗️User threshold must be between **2** and **30**.").ConfigureAwait(false); return; } if (seconds < 2 || seconds > 300) { await channel.SendErrorAsync("❗️Time must be between **2** and **300** seconds.").ConfigureAwait(false); return; } try { await MuteCommands.GetMuteRole(channel.Guild).ConfigureAwait(false); } catch (Exception ex) { await channel.SendConfirmAsync("⚠️ Failed creating a mute role. Give me ManageRoles permission" + "or create 'nadeko-mute' role with disabled SendMessages and try again.") .ConfigureAwait(false); _log.Warn(ex); return; } var setting = new AntiRaidSetting() { Action = action, Seconds = seconds, UserThreshold = userThreshold, }; antiRaidGuilds.AddOrUpdate(channel.Guild.Id, setting, (id, old) => setting); await channel.SendConfirmAsync($"ℹ️ {imsg.Author.Mention} If **{userThreshold}** or more users join within **{seconds}** seconds, I will **{action}** them.") .ConfigureAwait(false); }
public async Task AntiSpam(IUserMessage imsg, int messageCount = 3, PunishmentAction action = PunishmentAction.Mute) { var channel = (ITextChannel)imsg.Channel; if (messageCount < 2 || messageCount > 10) { return; } AntiSpamSetting throwaway; if (antiSpamGuilds.TryRemove(channel.Guild.Id, out throwaway)) { await channel.SendConfirmAsync("🆗 **Anti-Spam feature** has been **disabled** on this server.").ConfigureAwait(false); } else { try { await MuteCommands.GetMuteRole(channel.Guild).ConfigureAwait(false); } catch (Exception ex) { await channel.SendErrorAsync("⚠️ Failed creating a mute role. Give me ManageRoles permission" + "or create 'nadeko-mute' role with disabled SendMessages and try again.") .ConfigureAwait(false); _log.Warn(ex); return; } if (antiSpamGuilds.TryAdd(channel.Guild.Id, new AntiSpamSetting() { Action = action, MessageThreshold = messageCount, })) { await channel.SendConfirmAsync("✅ **Anti-Spam feature** has been **enabled** on this server.").ConfigureAwait(false); } } }
public async Task AntiRaid(int userThreshold = 5, int seconds = 10, PunishmentAction action = PunishmentAction.Mute) { if (userThreshold < 2 || userThreshold > 30) { await Context.Channel.SendErrorAsync("❗️User threshold must be between **2** and **30**.").ConfigureAwait(false); return; } if (seconds < 2 || seconds > 300) { await Context.Channel.SendErrorAsync("❗️Time must be between **2** and **300** seconds.").ConfigureAwait(false); return; } AntiRaidStats throwaway; if (antiRaidGuilds.TryRemove(Context.Guild.Id, out throwaway)) { using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiRaidSetting)); gc.AntiRaidSetting = null; await uow.CompleteAsync().ConfigureAwait(false); } await Context.Channel.SendConfirmAsync("**Anti-Raid** feature has been **disabled** on this server.").ConfigureAwait(false); return; } try { await MuteCommands.GetMuteRole(Context.Guild).ConfigureAwait(false); } catch (Exception ex) { await Context.Channel.SendConfirmAsync("⚠️ Failed creating a mute role. Give me ManageRoles permission" + "or create 'nadeko-mute' role with disabled SendMessages and try again.") .ConfigureAwait(false); _log.Warn(ex); return; } var stats = new AntiRaidStats() { AntiRaidSettings = new AntiRaidSetting() { Action = action, Seconds = seconds, UserThreshold = userThreshold, } }; antiRaidGuilds.AddOrUpdate(Context.Guild.Id, stats, (key, old) => stats); using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiRaidSetting)); gc.AntiRaidSetting = stats.AntiRaidSettings; await uow.CompleteAsync().ConfigureAwait(false); } await Context.Channel.SendConfirmAsync("Anti-Raid Enabled", $"{Context.User.Mention} {stats.ToString()}") .ConfigureAwait(false); }
public async Task AntiRaid(int userThreshold = 5, int seconds = 10, PunishmentAction action = PunishmentAction.Mute) { if (userThreshold < 2 || userThreshold > 30) { await ReplyErrorLocalized("raid_cnt", 2, 30).ConfigureAwait(false); return; } if (seconds < 2 || seconds > 300) { await ReplyErrorLocalized("raid_time", 2, 300).ConfigureAwait(false); return; } AntiRaidStats throwaway; if (_antiRaidGuilds.TryRemove(Context.Guild.Id, out throwaway)) { using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiRaidSetting)); gc.AntiRaidSetting = null; await uow.CompleteAsync().ConfigureAwait(false); } await ReplyConfirmLocalized("prot_disable", "Anti-Raid").ConfigureAwait(false); return; } try { await MuteCommands.GetMuteRole(Context.Guild).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); await ReplyErrorLocalized("prot_error").ConfigureAwait(false); return; } var stats = new AntiRaidStats() { AntiRaidSettings = new AntiRaidSetting() { Action = action, Seconds = seconds, UserThreshold = userThreshold, } }; _antiRaidGuilds.AddOrUpdate(Context.Guild.Id, stats, (key, old) => stats); using (var uow = DbHandler.UnitOfWork()) { var gc = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.AntiRaidSetting)); gc.AntiRaidSetting = stats.AntiRaidSettings; await uow.CompleteAsync().ConfigureAwait(false); } await Context.Channel.SendConfirmAsync(GetText("prot_enable", "Anti-Raid"), $"{Context.User.Mention} {GetAntiRaidString(stats)}") .ConfigureAwait(false); }