mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 08:34:27 -05:00 
			
		
		
		
	Added .banprune command which sets how many days worth of messages will be pruned when bot (soft)bans a person either through a command or another punishment feature. Also updated .next usage string.
This commit is contained in:
		@@ -358,9 +358,10 @@ public class MuteService : INService
 | 
			
		||||
        IGuild guild,
 | 
			
		||||
        IUser user,
 | 
			
		||||
        TimeSpan after,
 | 
			
		||||
        string reason)
 | 
			
		||||
        string reason,
 | 
			
		||||
        int pruneDays)
 | 
			
		||||
    {
 | 
			
		||||
        await guild.AddBanAsync(user.Id, 0, reason);
 | 
			
		||||
        await guild.AddBanAsync(user.Id, pruneDays, reason);
 | 
			
		||||
        await using (var uow = _db.GetDbContext())
 | 
			
		||||
        {
 | 
			
		||||
            var config = uow.GuildConfigsForId(guild.Id, set => set.Include(x => x.UnbanTimer));
 | 
			
		||||
 
 | 
			
		||||
@@ -429,7 +429,8 @@ public partial class Administration
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await _mute.TimedBan(ctx.Guild, user, time.Time, (ctx.User + " | " + msg).TrimTo(512));
 | 
			
		||||
            var banPrune = await _service.GetBanPruneAsync(ctx.Guild.Id) ?? 7;
 | 
			
		||||
            await _mute.TimedBan(ctx.Guild, user, time.Time, (ctx.User + " | " + msg).TrimTo(512), banPrune);
 | 
			
		||||
            var toSend = _eb.Create()
 | 
			
		||||
                            .WithOkColor()
 | 
			
		||||
                            .WithTitle("⛔️ " + GetText(strs.banned_user))
 | 
			
		||||
@@ -455,7 +456,8 @@ public partial class Administration
 | 
			
		||||
            var user = await ((DiscordSocketClient)Context.Client).Rest.GetGuildUserAsync(ctx.Guild.Id, userId);
 | 
			
		||||
            if (user is null)
 | 
			
		||||
            {
 | 
			
		||||
                await ctx.Guild.AddBanAsync(userId, 7, (ctx.User + " | " + msg).TrimTo(512));
 | 
			
		||||
                var banPrune = await _service.GetBanPruneAsync(ctx.Guild.Id) ?? 7;
 | 
			
		||||
                await ctx.Guild.AddBanAsync(userId, banPrune, (ctx.User + " | " + msg).TrimTo(512));
 | 
			
		||||
 | 
			
		||||
                await ctx.Channel.EmbedAsync(_eb.Create()
 | 
			
		||||
                                                .WithOkColor()
 | 
			
		||||
@@ -490,7 +492,8 @@ public partial class Administration
 | 
			
		||||
                dmFailed = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await ctx.Guild.AddBanAsync(user, 7, (ctx.User + " | " + msg).TrimTo(512));
 | 
			
		||||
            var banPrune = await _service.GetBanPruneAsync(ctx.Guild.Id) ?? 7;
 | 
			
		||||
            await ctx.Guild.AddBanAsync(user, banPrune, (ctx.User + " | " + msg).TrimTo(512));
 | 
			
		||||
 | 
			
		||||
            var toSend = _eb.Create()
 | 
			
		||||
                            .WithOkColor()
 | 
			
		||||
@@ -504,6 +507,26 @@ public partial class Administration
 | 
			
		||||
            await ctx.Channel.EmbedAsync(toSend);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Cmd]
 | 
			
		||||
        [RequireContext(ContextType.Guild)]
 | 
			
		||||
        [UserPerm(GuildPerm.BanMembers)]
 | 
			
		||||
        [BotPerm(GuildPerm.BanMembers)]
 | 
			
		||||
        public async Task BanPrune(int days)
 | 
			
		||||
        {
 | 
			
		||||
            if (days < 0 || days > 7)
 | 
			
		||||
            {
 | 
			
		||||
                await ReplyErrorLocalizedAsync(strs.invalid_input);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            await _service.SetBanPruneAsync(ctx.Guild.Id, days);
 | 
			
		||||
            
 | 
			
		||||
            if (days == 0)
 | 
			
		||||
                await ReplyConfirmLocalizedAsync(strs.ban_prune_disabled);
 | 
			
		||||
            else
 | 
			
		||||
                await ReplyConfirmLocalizedAsync(strs.ban_prune(days));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Cmd]
 | 
			
		||||
        [RequireContext(ContextType.Guild)]
 | 
			
		||||
        [UserPerm(GuildPerm.BanMembers)]
 | 
			
		||||
@@ -655,7 +678,8 @@ public partial class Administration
 | 
			
		||||
                dmFailed = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await ctx.Guild.AddBanAsync(user, 7, ("Softban | " + ctx.User + " | " + msg).TrimTo(512));
 | 
			
		||||
            var banPrune = await _service.GetBanPruneAsync(ctx.Guild.Id) ?? 7;
 | 
			
		||||
            await ctx.Guild.AddBanAsync(user, banPrune, ("Softban | " + ctx.User + " | " + msg).TrimTo(512));
 | 
			
		||||
            try { await ctx.Guild.RemoveBanAsync(user); }
 | 
			
		||||
            catch { await ctx.Guild.RemoveBanAsync(user); }
 | 
			
		||||
 | 
			
		||||
@@ -822,11 +846,12 @@ public partial class Administration
 | 
			
		||||
 | 
			
		||||
            var banningMessage = await ctx.Channel.EmbedAsync(toSend);
 | 
			
		||||
 | 
			
		||||
            var banPrune = await _service.GetBanPruneAsync(ctx.Guild.Id) ?? 7;
 | 
			
		||||
            foreach (var toBan in banning)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    await ctx.Guild.AddBanAsync(toBan.Id, 7, $"{ctx.User} | Massban");
 | 
			
		||||
                    await ctx.Guild.AddBanAsync(toBan.Id, banPrune, $"{ctx.User} | Massban");
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
@@ -865,10 +890,11 @@ public partial class Administration
 | 
			
		||||
                                                               .AddField(GetText(strs.invalid(missing)), missStr)
 | 
			
		||||
                                                               .WithPendingColor());
 | 
			
		||||
 | 
			
		||||
            var banPrune = await _service.GetBanPruneAsync(ctx.Guild.Id) ?? 7;
 | 
			
		||||
            //do the banning
 | 
			
		||||
            await Task.WhenAll(bans.Where(x => x.Id.HasValue)
 | 
			
		||||
                                   .Select(x => ctx.Guild.AddBanAsync(x.Id.Value,
 | 
			
		||||
                                       7,
 | 
			
		||||
                                       banPrune,
 | 
			
		||||
                                       x.Reason,
 | 
			
		||||
                                       new()
 | 
			
		||||
                                       {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
#nullable disable
 | 
			
		||||
using LinqToDB;
 | 
			
		||||
using LinqToDB.EntityFrameworkCore;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Common.ModuleBehaviors;
 | 
			
		||||
using NadekoBot.Common.TypeReaders.Models;
 | 
			
		||||
@@ -127,6 +128,7 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
        if (!await CheckPermission(guild, p))
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        int banPrune;
 | 
			
		||||
        switch (p)
 | 
			
		||||
        {
 | 
			
		||||
            case PunishmentAction.Mute:
 | 
			
		||||
@@ -151,13 +153,15 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
                await user.KickAsync(reason);
 | 
			
		||||
                break;
 | 
			
		||||
            case PunishmentAction.Ban:
 | 
			
		||||
                banPrune = await GetBanPruneAsync(user.GuildId) ?? 7;
 | 
			
		||||
                if (minutes == 0)
 | 
			
		||||
                    await guild.AddBanAsync(user, reason: reason, pruneDays: 7);
 | 
			
		||||
                    await guild.AddBanAsync(user, reason: reason, pruneDays: banPrune);
 | 
			
		||||
                else
 | 
			
		||||
                    await _mute.TimedBan(user.Guild, user, TimeSpan.FromMinutes(minutes), reason);
 | 
			
		||||
                    await _mute.TimedBan(user.Guild, user, TimeSpan.FromMinutes(minutes), reason, banPrune);
 | 
			
		||||
                break;
 | 
			
		||||
            case PunishmentAction.Softban:
 | 
			
		||||
                await guild.AddBanAsync(user, 7, $"Softban | {reason}");
 | 
			
		||||
                banPrune = await GetBanPruneAsync(user.GuildId) ?? 7;
 | 
			
		||||
                await guild.AddBanAsync(user, banPrune, $"Softban | {reason}");
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    await guild.RemoveBanAsync(user);
 | 
			
		||||
@@ -489,6 +493,37 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
        uow.SaveChanges();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task SetBanPruneAsync(ulong guildId, int? pruneDays)
 | 
			
		||||
    {
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        await ctx.BanTemplates
 | 
			
		||||
            .ToLinqToDBTable()
 | 
			
		||||
            .InsertOrUpdateAsync(() => new()
 | 
			
		||||
                {
 | 
			
		||||
                    GuildId = guildId,
 | 
			
		||||
                    Text = null,
 | 
			
		||||
                    DateAdded = DateTime.UtcNow,
 | 
			
		||||
                    PruneDays = pruneDays
 | 
			
		||||
                },
 | 
			
		||||
                old => new()
 | 
			
		||||
                {
 | 
			
		||||
                    PruneDays = pruneDays
 | 
			
		||||
                },
 | 
			
		||||
                () => new()
 | 
			
		||||
                {
 | 
			
		||||
                    GuildId = guildId
 | 
			
		||||
                });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<int?> GetBanPruneAsync(ulong guildId)
 | 
			
		||||
    {
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        return await ctx.BanTemplates
 | 
			
		||||
            .Where(x => x.GuildId == guildId)
 | 
			
		||||
            .Select(x => x.PruneDays)
 | 
			
		||||
            .FirstOrDefaultAsyncLinqToDB();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SmartText GetBanUserDmEmbed(
 | 
			
		||||
        ICommandContext context,
 | 
			
		||||
        IGuildUser target,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user