Added .log userwarned

This commit is contained in:
Kwoth
2022-07-03 21:58:05 +02:00
parent 03396642a4
commit 643987c41f
13 changed files with 10155 additions and 4 deletions

View File

@@ -27,5 +27,6 @@ public enum LogType
UserPresence, UserPresence,
VoicePresence, VoicePresence,
VoicePresenceTts, VoicePresenceTts,
UserMuted UserMuted,
UserWarned,
} }

View File

@@ -4,7 +4,7 @@ namespace NadekoBot.Services.Database.Models;
public class LogSetting : DbEntity public class LogSetting : DbEntity
{ {
public List<IgnoredLogItem> LogIgnores { get; set; } = new(); public List<IgnoredLogItem> LogIgnores { get; set; } = new();
public ulong GuildId { get; set; } public ulong GuildId { get; set; }
public ulong? LogOtherId { get; set; } public ulong? LogOtherId { get; set; }
public ulong? MessageUpdatedId { get; set; } public ulong? MessageUpdatedId { get; set; }
@@ -29,4 +29,5 @@ public class LogSetting : DbEntity
public ulong? LogVoicePresenceId { get; set; } public ulong? LogVoicePresenceId { get; set; }
public ulong? LogVoicePresenceTTSId { get; set; } public ulong? LogVoicePresenceTTSId { get; set; }
public ulong? LogWarnsId { get; set; }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,25 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace NadekoBot.Migrations.Mysql
{
public partial class logwarns : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<ulong>(
name: "logwarnsid",
table: "logsettings",
type: "bigint unsigned",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "logwarnsid",
table: "logsettings");
}
}
}

View File

@@ -1406,6 +1406,10 @@ namespace NadekoBot.Migrations.Mysql
.HasColumnType("bigint unsigned") .HasColumnType("bigint unsigned")
.HasColumnName("logvoicepresencettsid"); .HasColumnName("logvoicepresencettsid");
b.Property<ulong?>("LogWarnsId")
.HasColumnType("bigint unsigned")
.HasColumnName("logwarnsid");
b.Property<ulong?>("MessageDeletedId") b.Property<ulong?>("MessageDeletedId")
.HasColumnType("bigint unsigned") .HasColumnType("bigint unsigned")
.HasColumnName("messagedeletedid"); .HasColumnName("messagedeletedid");

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,25 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace NadekoBot.Migrations.PostgreSql
{
public partial class logwarns : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<decimal>(
name: "logwarnsid",
table: "logsettings",
type: "numeric(20,0)",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "logwarnsid",
table: "logsettings");
}
}
}

View File

@@ -1472,6 +1472,10 @@ namespace NadekoBot.Migrations.PostgreSql
.HasColumnType("numeric(20,0)") .HasColumnType("numeric(20,0)")
.HasColumnName("logvoicepresencettsid"); .HasColumnName("logvoicepresencettsid");
b.Property<decimal?>("LogWarnsId")
.HasColumnType("numeric(20,0)")
.HasColumnName("logwarnsid");
b.Property<decimal?>("MessageDeletedId") b.Property<decimal?>("MessageDeletedId")
.HasColumnType("numeric(20,0)") .HasColumnType("numeric(20,0)")
.HasColumnName("messagedeletedid"); .HasColumnName("messagedeletedid");

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,43 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace NadekoBot.Migrations
{
public partial class logwarns : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Name",
table: "StreamOnlineMessages",
type: "TEXT",
nullable: true,
oldClrType: typeof(string),
oldType: "TEXT");
migrationBuilder.AddColumn<ulong>(
name: "LogWarnsId",
table: "LogSettings",
type: "INTEGER",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "LogWarnsId",
table: "LogSettings");
migrationBuilder.AlterColumn<string>(
name: "Name",
table: "StreamOnlineMessages",
type: "TEXT",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "TEXT",
oldNullable: true);
}
}
}

View File

@@ -278,7 +278,6 @@ namespace NadekoBot.Migrations
.HasColumnType("INTEGER"); .HasColumnType("INTEGER");
b.Property<string>("Name") b.Property<string>("Name")
.IsRequired()
.HasColumnType("TEXT"); .HasColumnType("TEXT");
b.Property<int>("Type") b.Property<int>("Type")
@@ -1100,6 +1099,9 @@ namespace NadekoBot.Migrations
b.Property<ulong?>("LogVoicePresenceTTSId") b.Property<ulong?>("LogVoicePresenceTTSId")
.HasColumnType("INTEGER"); .HasColumnType("INTEGER");
b.Property<ulong?>("LogWarnsId")
.HasColumnType("INTEGER");
b.Property<ulong?>("MessageDeletedId") b.Property<ulong?>("MessageDeletedId")
.HasColumnType("INTEGER"); .HasColumnType("INTEGER");

View File

@@ -26,6 +26,7 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
private readonly IMemoryCache _memoryCache; private readonly IMemoryCache _memoryCache;
private readonly ConcurrentHashSet<ulong> _ignoreMessageIds = new(); private readonly ConcurrentHashSet<ulong> _ignoreMessageIds = new();
private readonly UserPunishService _punishService;
public LogCommandService( public LogCommandService(
DiscordSocketClient client, DiscordSocketClient client,
@@ -35,7 +36,8 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
ProtectionService prot, ProtectionService prot,
GuildTimezoneService tz, GuildTimezoneService tz,
IMemoryCache memoryCache, IMemoryCache memoryCache,
IEmbedBuilderService eb) IEmbedBuilderService eb,
UserPunishService punishService)
{ {
_client = client; _client = client;
_memoryCache = memoryCache; _memoryCache = memoryCache;
@@ -45,6 +47,8 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
_mute = mute; _mute = mute;
_prot = prot; _prot = prot;
_tz = tz; _tz = tz;
_punishService = punishService;
using (var uow = db.GetDbContext()) using (var uow = db.GetDbContext())
{ {
var guildIds = client.Guilds.Select(x => x.Id).ToList(); var guildIds = client.Guilds.Select(x => x.Id).ToList();
@@ -78,6 +82,8 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
_mute.UserUnmuted += MuteCommands_UserUnmuted; _mute.UserUnmuted += MuteCommands_UserUnmuted;
_prot.OnAntiProtectionTriggered += TriggeredAntiProtection; _prot.OnAntiProtectionTriggered += TriggeredAntiProtection;
_punishService.OnUserWarned += PunishServiceOnOnUserWarned;
} }
public async Task OnReadyAsync() public async Task OnReadyAsync()
@@ -183,6 +189,30 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
GuildLogSettings.AddOrUpdate(guildId, _ => logSetting, (_, _) => logSetting); GuildLogSettings.AddOrUpdate(guildId, _ => logSetting, (_, _) => logSetting);
} }
private async Task PunishServiceOnOnUserWarned(Warning arg)
{
if (!GuildLogSettings.TryGetValue(arg.GuildId, out var logSetting) || logSetting.LogWarnsId is null)
return;
var g = _client.GetGuild(arg.GuildId);
ITextChannel? logChannel;
if ((logChannel = await TryGetLogChannel(g, logSetting, LogType.UserWarned)) is null)
return;
var embed = _eb.Create()
.WithOkColor()
.WithTitle($"⚠️ User Warned")
.WithDescription($"<@{arg.UserId}> | {arg.UserId}")
.AddField("Mod", arg.Moderator)
.AddField("Reason", string.IsNullOrWhiteSpace(arg.Reason) ? "-" : arg.Reason, true)
.WithFooter(CurrentTime(g));
await logChannel.EmbedAsync(embed);
}
private Task _client_UserUpdated(SocketUser before, SocketUser uAfter) private Task _client_UserUpdated(SocketUser before, SocketUser uAfter)
{ {
_ = Task.Run(async () => _ = Task.Run(async () =>
@@ -296,6 +326,9 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
channelId = logSetting.LogVoicePresenceTTSId = channelId = logSetting.LogVoicePresenceTTSId =
logSetting.LogVoicePresenceTTSId is null ? cid : default; logSetting.LogVoicePresenceTTSId is null ? cid : default;
break; break;
case LogType.UserWarned:
channelId = logSetting.LogWarnsId = logSetting.LogWarnsId is null ? cid : default;
break;
} }
uow.SaveChanges(); uow.SaveChanges();
@@ -1144,6 +1177,9 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
case LogType.UserMuted: case LogType.UserMuted:
id = logSetting.UserMutedId; id = logSetting.UserMutedId;
break; break;
case LogType.UserWarned:
id = logSetting.LogWarnsId;
break;
} }
if (id is null or 0) if (id is null or 0)
@@ -1214,6 +1250,9 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor
case LogType.VoicePresenceTts: case LogType.VoicePresenceTts:
newLogSetting.LogVoicePresenceTTSId = null; newLogSetting.LogVoicePresenceTTSId = null;
break; break;
case LogType.UserWarned:
newLogSetting.LogWarnsId = null;
break;
} }
GuildLogSettings.AddOrUpdate(guildId, newLogSetting, (_, _) => newLogSetting); GuildLogSettings.AddOrUpdate(guildId, newLogSetting, (_, _) => newLogSetting);

View File

@@ -18,6 +18,8 @@ public class UserPunishService : INService, IReadyExecutor
private readonly BotConfigService _bcs; private readonly BotConfigService _bcs;
private readonly DiscordSocketClient _client; private readonly DiscordSocketClient _client;
public event Func<Warning, Task> OnUserWarned = static delegate { return Task.CompletedTask; };
public UserPunishService( public UserPunishService(
MuteService mute, MuteService mute,
DbService db, DbService db,
@@ -93,6 +95,8 @@ public class UserPunishService : INService, IReadyExecutor
await uow.SaveChangesAsync(); await uow.SaveChangesAsync();
} }
_ = OnUserWarned(warn);
var totalCount = previousCount + weight; var totalCount = previousCount + weight;
var p = ps.Where(x => x.Count > previousCount && x.Count <= totalCount) var p = ps.Where(x => x.Count > previousCount && x.Count <= totalCount)