mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	Added .warn weights, improved .warnlog
This commit is contained in:
		@@ -8,5 +8,6 @@
 | 
			
		||||
        public bool Forgiven { get; set; }
 | 
			
		||||
        public string ForgivenBy { get; set; }
 | 
			
		||||
        public string Moderator { get; set; }
 | 
			
		||||
        public int Weight { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -196,10 +196,16 @@ namespace NadekoBot.Services.Database
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region Warnings
 | 
			
		||||
            var warn = modelBuilder.Entity<Warning>();
 | 
			
		||||
            warn.HasIndex(x => x.GuildId);
 | 
			
		||||
            warn.HasIndex(x => x.UserId);
 | 
			
		||||
            warn.HasIndex(x => x.DateAdded);
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity<Warning>(warn =>
 | 
			
		||||
            {
 | 
			
		||||
                warn.HasIndex(x => x.GuildId);
 | 
			
		||||
                warn.HasIndex(x => x.UserId);
 | 
			
		||||
                warn.HasIndex(x => x.DateAdded);
 | 
			
		||||
                warn.Property(x => x.Weight)
 | 
			
		||||
                    .HasDefaultValue(1);
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region PatreonRewards
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2653
									
								
								src/NadekoBot/Migrations/20211121002508_weighted-warnings.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2653
									
								
								src/NadekoBot/Migrations/20211121002508_weighted-warnings.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										24
									
								
								src/NadekoBot/Migrations/20211121002508_weighted-warnings.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/NadekoBot/Migrations/20211121002508_weighted-warnings.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Migrations
 | 
			
		||||
{
 | 
			
		||||
    public partial class weightedwarnings : Migration
 | 
			
		||||
    {
 | 
			
		||||
        protected override void Up(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            migrationBuilder.AddColumn<int>(
 | 
			
		||||
                name: "Weight",
 | 
			
		||||
                table: "Warnings",
 | 
			
		||||
                type: "INTEGER",
 | 
			
		||||
                nullable: false,
 | 
			
		||||
                defaultValue: 1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void Down(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            migrationBuilder.DropColumn(
 | 
			
		||||
                name: "Weight",
 | 
			
		||||
                table: "Warnings");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1967,6 +1967,11 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.Property<ulong>("UserId")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<int>("Weight")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER")
 | 
			
		||||
                        .HasDefaultValue(1);
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("DateAdded");
 | 
			
		||||
 
 | 
			
		||||
@@ -41,8 +41,11 @@ namespace NadekoBot.Modules.Administration.Services
 | 
			
		||||
            }, null, TimeSpan.FromSeconds(0), TimeSpan.FromHours(12));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<WarningPunishment> Warn(IGuild guild, ulong userId, IUser mod, string reason)
 | 
			
		||||
        public async Task<WarningPunishment> Warn(IGuild guild, ulong userId, IUser mod, int weight, string reason)
 | 
			
		||||
        {
 | 
			
		||||
            if (weight <= 0)
 | 
			
		||||
                throw new ArgumentOutOfRangeException(nameof(weight));
 | 
			
		||||
            
 | 
			
		||||
            var modName = mod.ToString();
 | 
			
		||||
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(reason))
 | 
			
		||||
@@ -57,6 +60,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
			
		||||
                Forgiven = false,
 | 
			
		||||
                Reason = reason,
 | 
			
		||||
                Moderator = modName,
 | 
			
		||||
                Weight = weight,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            int warnings = 1;
 | 
			
		||||
@@ -70,7 +74,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
			
		||||
                    .Warnings
 | 
			
		||||
                    .ForId(guildId, userId)
 | 
			
		||||
                    .Where(w => !w.Forgiven && w.UserId == userId)
 | 
			
		||||
                    .Count();
 | 
			
		||||
                    .Sum(x => x.Weight);
 | 
			
		||||
 | 
			
		||||
                uow.Warnings.Add(warn);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -54,8 +54,17 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
            [NadekoCommand, Aliases]
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
            [UserPerm(GuildPerm.BanMembers)]
 | 
			
		||||
            public async Task Warn(IGuildUser user, [Leftover] string reason = null)
 | 
			
		||||
            public Task Warn(IGuildUser user, [Leftover] string reason = null)
 | 
			
		||||
                => Warn(1, user, reason);
 | 
			
		||||
            
 | 
			
		||||
            [NadekoCommand, Aliases]
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
            [UserPerm(GuildPerm.BanMembers)]
 | 
			
		||||
            public async Task Warn(int weight, IGuildUser user, [Leftover] string reason = null)
 | 
			
		||||
            {
 | 
			
		||||
                if (weight <= 0)
 | 
			
		||||
                    return;
 | 
			
		||||
                
 | 
			
		||||
                if (!await CheckRoleHierarchy(user))
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
@@ -76,7 +85,7 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
                WarningPunishment punishment;
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    punishment = await _service.Warn(ctx.Guild, user.Id, ctx.User, reason).ConfigureAwait(false);
 | 
			
		||||
                    punishment = await _service.Warn(ctx.Guild, user.Id, ctx.User, weight, reason).ConfigureAwait(false);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
@@ -230,19 +239,29 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        var descText = GetText(strs.warn_count(
 | 
			
		||||
                            Format.Bold(warnings.Where(x => !x.Forgiven).Sum(x => x.Weight).ToString()),
 | 
			
		||||
                            Format.Bold(warnings.Sum(x => x.Weight).ToString())));
 | 
			
		||||
                        
 | 
			
		||||
                        embed.WithDescription(descText);
 | 
			
		||||
                        
 | 
			
		||||
                        var i = page * 9;
 | 
			
		||||
                        foreach (var w in warnings)
 | 
			
		||||
                        {
 | 
			
		||||
                            i++;
 | 
			
		||||
                            var name = GetText(strs.warned_on_by(
 | 
			
		||||
                                w.DateAdded.Value.ToString("dd.MM.yyy"),
 | 
			
		||||
                                w.DateAdded.Value.ToString("HH:mm"),
 | 
			
		||||
                                w.DateAdded?.ToString("dd.MM.yyy"),
 | 
			
		||||
                                w.DateAdded?.ToString("HH:mm"),
 | 
			
		||||
                                w.Moderator));
 | 
			
		||||
                            
 | 
			
		||||
                            if (w.Forgiven)
 | 
			
		||||
                                name = $"{Format.Strikethrough(name)} {GetText(strs.warn_cleared_by(w.ForgivenBy))}";
 | 
			
		||||
 | 
			
		||||
                            embed.AddField($"#`{i}` " + name, w.Reason.TrimTo(1020));
 | 
			
		||||
                            
 | 
			
		||||
                            embed.AddField($"#`{i}` " + name,
 | 
			
		||||
                                Format.Code(GetText(strs.warn_weight(w.Weight))) + 
 | 
			
		||||
                                '\n' +
 | 
			
		||||
                                w.Reason.TrimTo(1000));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1596,9 +1596,12 @@ warnlogall:
 | 
			
		||||
    - ""
 | 
			
		||||
    - "2"
 | 
			
		||||
warn:
 | 
			
		||||
  desc: "Warns a user."
 | 
			
		||||
  desc: |-
 | 
			
		||||
    Warns a user with an optional reason.
 | 
			
		||||
    You can specify a warning weight integer before the user. For example, 3 would mean that this warning counts as 3 warnings.
 | 
			
		||||
  args:
 | 
			
		||||
    - "@Someone Very rude person"
 | 
			
		||||
    - "3 @Someone Very rude person"
 | 
			
		||||
scadd:
 | 
			
		||||
  desc: "Adds a command to the list of commands which will be executed automatically in the current channel, in the order they were added in, by the bot when it startups up."
 | 
			
		||||
  args:
 | 
			
		||||
 
 | 
			
		||||
@@ -665,6 +665,8 @@
 | 
			
		||||
  "warning_clear_fail": "Warning not cleared. Either the warning at that index doesn't exist, or it has already been cleared.",
 | 
			
		||||
  "warning_cleared": "Warning {0} has been cleared for {1}.",
 | 
			
		||||
  "warnings_none": "No warning on this page.",
 | 
			
		||||
  "warn_weight": "Weight: {0}",
 | 
			
		||||
  "warn_count": "{0} current, {1} total",
 | 
			
		||||
  "warnlog_for": "Warnlog for {0}",
 | 
			
		||||
  "warnpl_none": "No punishments set.",
 | 
			
		||||
  "warn_expire_set_delete": "Warnings will be deleted after {0} days.",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user