diff --git a/src/Nellebot/BotOptions.cs b/src/Nellebot/BotOptions.cs index bd92a31..8725be9 100644 --- a/src/Nellebot/BotOptions.cs +++ b/src/Nellebot/BotOptions.cs @@ -1,6 +1,4 @@ -using System; - -namespace Nellebot; +namespace Nellebot; public class BotOptions { @@ -27,19 +25,21 @@ public class BotOptions /// /// Gets discord roles with access to some admin commands. /// - public ulong[] TrustedRoleIds { get; init; } = Array.Empty(); + public ulong[] TrustedRoleIds { get; init; } = []; /// /// Gets channel id where Trusted roles have access to. /// public ulong TrustedChannelId { get; init; } - public ulong ActivityLogChannelId { get; init; } + public ulong ModAlertsChannelId { get; init; } - public ulong ExtendedActivityLogChannelId { get; init; } + public ulong ActivityLogChannelId { get; init; } public ulong GreetingsChannelId { get; init; } + public ulong OperationLogChannelId { get; init; } + public ulong ErrorLogChannelId { get; init; } public ulong SuggestionsChannelId { get; init; } diff --git a/src/Nellebot/CommandHandlers/MessageTemplates/AddMetaMessage.cs b/src/Nellebot/CommandHandlers/MessageTemplates/AddMetaMessage.cs index dfb9443..4eade37 100644 --- a/src/Nellebot/CommandHandlers/MessageTemplates/AddMetaMessage.cs +++ b/src/Nellebot/CommandHandlers/MessageTemplates/AddMetaMessage.cs @@ -235,7 +235,7 @@ private void LogActivityMessage( DiscordMessageBuilder activityMessageBuilder = new DiscordMessageBuilder() .WithContent(activityMessageText) .AddEmbed(EmbedBuilderHelper.BuildSimpleEmbed(encodedMessageText)); - _discordLogger.LogExtendedActivityMessage(activityMessageBuilder); + _discordLogger.LogActivityMessage(activityMessageBuilder); } catch (Exception ex) { diff --git a/src/Nellebot/CommandHandlers/MessageTemplates/EditMetaMessage.cs b/src/Nellebot/CommandHandlers/MessageTemplates/EditMetaMessage.cs index d2dca2f..5492883 100644 --- a/src/Nellebot/CommandHandlers/MessageTemplates/EditMetaMessage.cs +++ b/src/Nellebot/CommandHandlers/MessageTemplates/EditMetaMessage.cs @@ -97,7 +97,7 @@ public async Task Handle(EditMetaMessageCommand request, CancellationToken cance DiscordMessageBuilder activityMessageBuilder = new DiscordMessageBuilder() .WithContent(activityMessageText) .AddEmbed(EmbedBuilderHelper.BuildSimpleEmbed(encodedMessageText)); - _discordLogger.LogExtendedActivityMessage(activityMessageBuilder); + _discordLogger.LogActivityMessage(activityMessageBuilder); DiscordFollowupMessageBuilder followup = new DiscordFollowupMessageBuilder() .WithContent($"Message edited successfully! [Jump to message]({message.JumpLink})") diff --git a/src/Nellebot/Infrastructure/CommandRequestPipelineBehaviour.cs b/src/Nellebot/Infrastructure/CommandRequestPipelineBehaviour.cs index a9ac314..f0e2e6b 100644 --- a/src/Nellebot/Infrastructure/CommandRequestPipelineBehaviour.cs +++ b/src/Nellebot/Infrastructure/CommandRequestPipelineBehaviour.cs @@ -47,7 +47,7 @@ public async Task Handle( } catch (Exception ex) when (request is BotCommandCommand commandCommand) { - await HandeCommandCommandException(commandCommand, ex); + await HandleCommandCommandException(commandCommand, ex); return default!; } catch (Exception ex) when (request is IRequest) @@ -104,7 +104,7 @@ private async Task HandleSlashCommandException(BotSlashCommand request, Exceptio _logger.LogError(ex, nameof(HandleSlashCommandException)); } - private async Task HandeCommandCommandException(BotCommandCommand request, Exception ex) + private async Task HandleCommandCommandException(BotCommandCommand request, Exception ex) { CommandContext ctx = request.Ctx; @@ -126,6 +126,6 @@ private async Task HandeCommandCommandException(BotCommandCommand request, Excep _discordErrorLogger.LogCommandError(ctx, ex.ToString()); - _logger.LogError(ex, nameof(HandeCommandCommandException)); + _logger.LogError(ex, nameof(HandleCommandCommandException)); } } diff --git a/src/Nellebot/Infrastructure/NoWayGateway.cs b/src/Nellebot/Infrastructure/NoWayGateway.cs index aa8e3c7..4136f12 100644 --- a/src/Nellebot/Infrastructure/NoWayGateway.cs +++ b/src/Nellebot/Infrastructure/NoWayGateway.cs @@ -22,7 +22,7 @@ public NoWayGateway(EventQueueChannel eventQueue, DiscordLogger discordLogger) public async Task ZombiedAsync(IGatewayClient client) { - _discordLogger.LogExtendedActivityMessage("Connection to gateway zombied. Reconnecting..."); + _discordLogger.LogOperationMessage("Connection to gateway zombied. Reconnecting..."); await client.ReconnectAsync(); } @@ -46,13 +46,13 @@ public Task ReconnectRequestedAsync(IGatewayClient client) public Task ReconnectFailedAsync(IGatewayClient client) { - _discordLogger.LogExtendedActivityMessage("Reconnect failed."); + _discordLogger.LogOperationMessage("Reconnect failed."); return Task.CompletedTask; } public Task SessionInvalidatedAsync(IGatewayClient client) { - _discordLogger.LogExtendedActivityMessage("Session invalidated."); + _discordLogger.LogOperationMessage("Session invalidated."); return Task.CompletedTask; } } diff --git a/src/Nellebot/Jobs/MigrateResourcesJob.cs b/src/Nellebot/Jobs/MigrateResourcesJob.cs index 893f6e4..e659ca0 100644 --- a/src/Nellebot/Jobs/MigrateResourcesJob.cs +++ b/src/Nellebot/Jobs/MigrateResourcesJob.cs @@ -34,9 +34,9 @@ public class MigrateResourcesJob : IJob private static readonly ResourceChannel[] SourceResourcesChannelIds = [ - new(1333043499200679947, null), // #lang-res - new(1333048476950466570, NynorskTag), // #nn-res - new(1333043544553820222, MediaTag), // #media-res + new(DiscordChannelId: 1333043499200679947, Tag: null), // #lang-res + new(DiscordChannelId: 1333048476950466570, NynorskTag), // #nn-res + new(DiscordChannelId: 1333043544553820222, MediaTag), // #media-res ]; #else private const ulong ResourcesForumChannelId = 1289968921331634231; @@ -74,18 +74,17 @@ public async Task Execute(IJobExecutionContext context) context.MergedJobDataMap.TryGetBooleanValue("dryRun", out bool isDryRun); - _discordLogger.LogExtendedActivityMessage($"Running job {Key}{(isDryRun ? " (dry run)" : string.Empty)}"); + _discordLogger.LogOperationMessage($"Running job {Key}{(isDryRun ? " (dry run)" : string.Empty)}"); var forumPosts = new List(); DiscordForumChannel resourcesChannel = await _discordResolver.ResolveChannelAsync(ResourcesForumChannelId) as DiscordForumChannel - ?? throw new InvalidOperationException( - $"Could not resolve channel {ResourcesForumChannelId}"); + ?? throw new InvalidOperationException($"Could not resolve channel {ResourcesForumChannelId}"); IReadOnlyList channelTags = resourcesChannel.AvailableTags; - _discordLogger.LogExtendedActivityMessage("Collecting messages..."); + _discordLogger.LogOperationMessage("Collecting messages..."); var successCount = 0; var failureCount = 0; @@ -103,7 +102,7 @@ await _discordResolver.ResolveChannelAsync(ResourcesForumChannelId) as DiscordFo ForumPost? currentPost = null; await foreach (DiscordMessage message in discordChannel.GetMessagesAfterAsync( - 0, + after: 0, short.MaxValue, cancellationToken)) { @@ -165,7 +164,7 @@ await _discordResolver.ResolveChannelAsync(ResourcesForumChannelId) as DiscordFo } } - _discordLogger.LogExtendedActivityMessage("Done collecting messages"); + _discordLogger.LogOperationMessage("Done collecting messages"); // Post messages in forum channel in chronological order List orderedForumPosts = @@ -174,10 +173,9 @@ await _discordResolver.ResolveChannelAsync(ResourcesForumChannelId) as DiscordFo .OrderBy(x => x.FirstContentMessage.Id) .ToList(); - _discordLogger.LogExtendedActivityMessage( - $"{orderedForumPosts.Count} resource forum posts will be created"); + _discordLogger.LogOperationMessage($"{orderedForumPosts.Count} resource forum posts will be created"); - _discordLogger.LogExtendedActivityMessage($"{skippedCount} will be skipped"); + _discordLogger.LogOperationMessage($"{skippedCount} will be skipped"); foreach (ForumPost forumPost in orderedForumPosts) { @@ -220,8 +218,7 @@ await _discordResolver.ResolveChannelAsync(ResourcesForumChannelId) as DiscordFo forumPostBuilder = tags.Aggregate(forumPostBuilder, (current, tag) => current.AddTag(tag)); var sb = new StringBuilder(); - sb.AppendLineLF( - $"Creating post for message {forumPost.FirstContentMessage.JumpLink}") + sb.AppendLineLF($"Creating post for message {forumPost.FirstContentMessage.JumpLink}") .AppendLineLF($"Title: {title}") .AppendLineLF($"Content: {content.Sum(x => x.Length)} chars in {content.Count} message(s)") .AppendLineLF( @@ -230,7 +227,7 @@ await _discordResolver.ResolveChannelAsync(ResourcesForumChannelId) as DiscordFo .AppendLineLF($"Images: {imageAttachments.Count}") .AppendLineLF($"Non image files: {forumPost.NonImageAttachmentCount}"); - _discordLogger.LogExtendedActivityMessage(sb.ToString().TrimEnd()); + _discordLogger.LogOperationMessage(sb.ToString().TrimEnd()); // Gives us some time to follow along and to cancel if something goes wrong await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); @@ -279,8 +276,8 @@ await _discordResolver.ResolveChannelAsync(ResourcesForumChannelId) as DiscordFo } } - _discordLogger.LogExtendedActivityMessage($"Successful forum posts: {successCount}"); - _discordLogger.LogExtendedActivityMessage($"Failed forum posts: {failureCount}"); + _discordLogger.LogOperationMessage($"Successful forum posts: {successCount}"); + _discordLogger.LogOperationMessage($"Failed forum posts: {failureCount}"); } catch (Exception ex) { @@ -385,7 +382,7 @@ public List GetTextContent() sb.Clear(); // Split text into chunks of max 2000 chars each, split by newlines - string[] textLines = allText.Split('\n').ToArray(); + string[] textLines = allText.Split('\n'); var result = new List(); diff --git a/src/Nellebot/Jobs/RoleMaintenanceJob.cs b/src/Nellebot/Jobs/RoleMaintenanceJob.cs index f6e3287..b21f8ae 100644 --- a/src/Nellebot/Jobs/RoleMaintenanceJob.cs +++ b/src/Nellebot/Jobs/RoleMaintenanceJob.cs @@ -17,8 +17,8 @@ public class RoleMaintenanceJob : IJob public static readonly JobKey Key = new("role-maintenance", "default"); private readonly DiscordClient _client; - private readonly DiscordLogger _discordLogger; private readonly IDiscordErrorLogger _discordErrorLogger; + private readonly DiscordLogger _discordLogger; private readonly BotOptions _options; public RoleMaintenanceJob( @@ -37,7 +37,7 @@ public async Task Execute(IJobExecutionContext context) { try { - _discordLogger.LogExtendedActivityMessage($"Job started: {Key}"); + _discordLogger.LogOperationMessage($"Job started: {Key}"); CancellationToken cancellationToken = context.CancellationToken; @@ -49,11 +49,11 @@ public async Task Execute(IJobExecutionContext context) DiscordGuild guild = _client.Guilds[guildId]; - _discordLogger.LogExtendedActivityMessage("Downloading guild members."); + _discordLogger.LogOperationMessage("Downloading guild members."); List allMembers = await guild.GetAllMembersAsync(cancellationToken).ToListAsync(); - _discordLogger.LogExtendedActivityMessage($"Downloaded {allMembers.Count} guild members."); + _discordLogger.LogOperationMessage($"Downloaded {allMembers.Count} guild members."); DiscordRole memberRole = guild.Roles[memberRoleId] ?? throw new Exception($"Could not find member role with id {memberRoleId}"); @@ -68,7 +68,7 @@ public async Task Execute(IJobExecutionContext context) await RemoveUnneededGhostRoles(allMembers, ghostRole, cancellationToken); - _discordLogger.LogExtendedActivityMessage($"Job finished: {Key}"); + _discordLogger.LogOperationMessage($"Job finished: {Key}"); } catch (Exception ex) { @@ -92,7 +92,7 @@ private async Task AddMissingMemberRoles( { int totalCount = missingMemberRoleMembers.Count; - _discordLogger.LogExtendedActivityMessage( + _discordLogger.LogOperationMessage( $"Found {missingMemberRoleMembers.Count} users which are missing the Member role."); int successCount = await ExecuteRoleChangeWithRetry( @@ -100,8 +100,7 @@ private async Task AddMissingMemberRoles( m => m.GrantRoleAsync(memberRole), cancellationToken); - _discordLogger.LogExtendedActivityMessage( - $"Done adding Member role for {successCount}/{totalCount} users."); + _discordLogger.LogOperationMessage($"Done adding Member role for {successCount}/{totalCount} users."); } return; @@ -137,16 +136,14 @@ private async Task RemoveUnneededMemberRoles( { int totalCount = memberRoleCandidates.Count; - _discordLogger.LogExtendedActivityMessage( - $"Found {memberRoleCandidates.Count} users with unneeded Member role."); + _discordLogger.LogOperationMessage($"Found {memberRoleCandidates.Count} users with unneeded Member role."); int successCount = await ExecuteRoleChangeWithRetry( memberRoleCandidates, m => m.RevokeRoleAsync(memberRole), cancellationToken); - _discordLogger.LogExtendedActivityMessage( - $"Done removing Member role for {successCount}/{totalCount} users."); + _discordLogger.LogOperationMessage($"Done removing Member role for {successCount}/{totalCount} users."); } return; @@ -180,7 +177,7 @@ private async Task AddMissingGhostRoles( { int totalCount = ghostRoleCandidates.Count; - _discordLogger.LogExtendedActivityMessage( + _discordLogger.LogOperationMessage( $"Found {ghostRoleCandidates.Count} users which are missing the Ghost role."); int successCount = await ExecuteRoleChangeWithRetry( @@ -188,7 +185,7 @@ private async Task AddMissingGhostRoles( m => m.GrantRoleAsync(ghostRole), cancellationToken); - _discordLogger.LogExtendedActivityMessage($"Done adding Ghost role for {successCount}/{totalCount} users."); + _discordLogger.LogOperationMessage($"Done adding Ghost role for {successCount}/{totalCount} users."); } } @@ -205,16 +202,14 @@ private async Task RemoveUnneededGhostRoles( { int totalCount = ghostRoleCandidates.Count; - _discordLogger.LogExtendedActivityMessage( - $"Found {ghostRoleCandidates.Count} users with unneeded Ghost role."); + _discordLogger.LogOperationMessage($"Found {ghostRoleCandidates.Count} users with unneeded Ghost role."); int successCount = await ExecuteRoleChangeWithRetry( ghostRoleCandidates, m => m.RevokeRoleAsync(ghostRole), cancellationToken); - _discordLogger.LogExtendedActivityMessage( - $"Done removing Ghost role for {successCount}/{totalCount} users."); + _discordLogger.LogOperationMessage($"Done removing Ghost role for {successCount}/{totalCount} users."); } } diff --git a/src/Nellebot/NotificationHandlers/ActivityLogHandler.cs b/src/Nellebot/NotificationHandlers/ActivityLogHandler.cs index 01e59bd..4d017f0 100644 --- a/src/Nellebot/NotificationHandlers/ActivityLogHandler.cs +++ b/src/Nellebot/NotificationHandlers/ActivityLogHandler.cs @@ -184,7 +184,7 @@ public async Task Handle(GuildMemberUpdatedNotification notification, Cancellati // Test if there actually are several types of changes in the same event if (typeOfChangeCount > 2) { - _discordLogger.LogExtendedActivityMessage( + _discordLogger.LogOperationMessage( $"{nameof(GuildMemberUpdatedNotification)} contained {typeOfChangeCount} types of changes"); } } @@ -259,23 +259,22 @@ await _discordResolver.TryResolveAuditLogEntry( responsibleName = memberResponsible?.DisplayName ?? responsibleName; } - _discordLogger.LogActivityMessage( - $"{messages.Count} messages written by **{authorName}** were removed by **{responsibleName}**."); - - var sb = new StringBuilder(); - - sb.AppendLine( - $"{messages.Count} messages written by **{authorName}** were removed by **{responsibleName}**."); + var logMessageSb = new StringBuilder( + $"{messages.Count} message(s) written by **{authorName}** were removed by **{responsibleName}**."); - foreach (AppDiscordMessage message in messages.Where(x => x != null)) + foreach (AppDiscordMessage message in messages) { - sb.AppendLine(); - sb.AppendLine($"In {message.Channel.Name} at {message.CreationTimestamp}:"); + logMessageSb.AppendLineLF(); + logMessageSb.AppendLineLF($"In {message.Channel.Name} at {message.CreationTimestamp}."); - if (!string.IsNullOrWhiteSpace(message.Content)) sb.AppendLine($"> {message.Content}"); + if (string.IsNullOrWhiteSpace(message.Content)) continue; + + string escapedOriginalMessage = EscapeSpoilerTags(message.Content); + logMessageSb.AppendLineLF( + $" Original message:{DiscordConstants.NewLineChar}||{escapedOriginalMessage}||"); } - _discordLogger.LogExtendedActivityMessage(sb.ToString()); + _discordLogger.LogActivityMessage(logMessageSb.ToString()); } } @@ -287,8 +286,7 @@ public async Task Handle(MessageDeletedNotification notification, CancellationTo DiscordChannel channel = args.Channel; DiscordMessage deletedMessage = args.Message; - if (channel.IsPrivate || channel.Id == _botOptions.ActivityLogChannelId || - channel.Id == _botOptions.ExtendedActivityLogChannelId) + if (channel.IsPrivate || channel.Id == _botOptions.ActivityLogChannelId) { return; } @@ -303,7 +301,7 @@ public async Task Handle(MessageDeletedNotification notification, CancellationTo $"{nameof(MessageDeletedNotification)}", $"Could not resolve message id {deletedMessage.Id}"); - _discordLogger.LogExtendedActivityMessage($"An unknown message in **{channel.Name}** was removed"); + _discordLogger.LogActivityMessage($"An unknown message in **{channel.Name}** was removed"); return; } @@ -368,10 +366,11 @@ await _discordResolver.TryResolveAuditLogEntry( if (!string.IsNullOrWhiteSpace(message.Content)) { - logMessage += $" Original message:{Environment.NewLine}> {message.Content}"; + string escapedOriginalMessage = EscapeSpoilerTags(message.Content); + logMessage += $" Original message:{DiscordConstants.NewLineChar}||{escapedOriginalMessage}||"; } - _discordLogger.LogExtendedActivityMessage(logMessage); + _discordLogger.LogActivityMessage(logMessage); } public async Task Handle(MemberApprovedNotification notification, CancellationToken cancellationToken) @@ -380,8 +379,7 @@ public async Task Handle(MemberApprovedNotification notification, CancellationTo DiscordMember memberResponsible = notification.MemberResponsible; string memberMention = member.Mention; - _discordLogger.LogExtendedActivityMessage( - $"{memberMention} has been approved by **{memberResponsible.DisplayName}**."); + _discordLogger.LogActivityMessage($"{memberMention} has been approved by **{memberResponsible.DisplayName}**."); await _userLogService.CreateUserLog(member.Id, string.Empty, UserLogType.Approved); } @@ -391,20 +389,20 @@ public async Task Handle(MemberQuarantinedNotification notification, Cancellatio DiscordMember member = notification.Member; string memberIdentifier = member.GetDetailedMemberIdentifier(useMention: true); string memberMention = member.Mention; - DiscordMember memberResponsible = notification.MemberResponsible; + string memberResponsible = notification.MemberResponsible.DisplayName; string reason = notification.Reason; - _discordLogger.LogTrustedChannelMessage( - $"Awoooooo! **{memberIdentifier}** has been quarantined. Reason: {reason}."); + _discordLogger.LogModAlertsMessage( + $"Awoooooo! **{memberIdentifier}** has been quarantined by **{memberResponsible}**. Reason: {reason}."); - _discordLogger.LogExtendedActivityMessage( - $"{memberMention} has been quarantined by **{memberResponsible.DisplayName}**."); + _discordLogger.LogActivityMessage($"{memberMention} has been quarantined by **{memberResponsible}**."); await _userLogService.CreateUserLog(member.Id, reason, UserLogType.Quarantined); } private async Task CheckForUsernameUpdate(GuildMemberUpdatedEventArgs args) { + string memberIdentifier = args.Member.GetDetailedMemberIdentifier(); string? usernameAfter = args.MemberAfter.GetFullUsername(); string? usernameBefore = args.MemberBefore.GetFullUsername(); @@ -416,8 +414,8 @@ private async Task CheckForUsernameUpdate(GuildMemberUpdatedEventArgs args if (usernameBefore == usernameAfter) return false; - _discordLogger.LogExtendedActivityMessage( - $"Username change for {args.Member.Mention}. {usernameBefore ?? "??"} => {usernameAfter ?? "??"}."); + _discordLogger.LogActivityMessage( + $"Username change for {memberIdentifier}: {usernameBefore ?? "??"} => {usernameAfter ?? "??"}."); await _userLogService.CreateUserLog(args.Member.Id, usernameAfter, UserLogType.UsernameChange); @@ -426,6 +424,7 @@ private async Task CheckForUsernameUpdate(GuildMemberUpdatedEventArgs args private async Task CheckForNicknameUpdate(GuildMemberUpdatedEventArgs args) { + string memberIdentifier = args.Member.GetDetailedMemberIdentifier(); string? nicknameAfter = args.NicknameAfter; string? nicknameBefore = args.NicknameBefore; @@ -439,8 +438,8 @@ private async Task CheckForNicknameUpdate(GuildMemberUpdatedEventArgs args if (nicknameBefore == nicknameAfter) return false; const string noNickname = "*no nickname*"; - _discordLogger.LogExtendedActivityMessage( - $"Nickname change for {args.Member.Mention}. {nicknameBefore ?? noNickname} => {nicknameAfter ?? noNickname}."); + _discordLogger.LogActivityMessage( + $"Nickname change for {memberIdentifier}. {nicknameBefore ?? noNickname} => {nicknameAfter ?? noNickname}."); await _userLogService.CreateUserLog(args.Member.Id, nicknameAfter, UserLogType.NicknameChange); @@ -451,7 +450,6 @@ private async Task CheckForRolesUpdate(GuildMemberUpdatedEventArgs args) { var roleChanges = false; DiscordMember member = args.Member; - string memberMention = member.Mention; string memberDisplayName = member.DisplayName; List addedRoles = args.RolesAfter.ExceptBy(args.RolesBefore.Select(r => r.Id), x => x.Id).ToList(); @@ -463,11 +461,6 @@ private async Task CheckForRolesUpdate(GuildMemberUpdatedEventArgs args) roleChanges = true; string addedRolesNames = string.Join(", ", addedRoles.Select(r => r.Name)); _discordLogger.LogActivityMessage($"Added roles to **{memberDisplayName}**: {addedRolesNames}"); - - foreach (DiscordRole addedRole in addedRoles) - { - _discordLogger.LogExtendedActivityMessage($"Role change for {memberMention}: Added {addedRole.Name}."); - } } if (removedRoles.Count > 0) @@ -478,13 +471,10 @@ private async Task CheckForRolesUpdate(GuildMemberUpdatedEventArgs args) ulong quarantineRoleId = _botOptions.QuarantineRoleId; DiscordRole? quarantineRole = _discordResolver.ResolveRole(quarantineRoleId); - - foreach (DiscordRole removedRole in removedRoles) + if (quarantineRole is not null) { - _discordLogger.LogExtendedActivityMessage( - $"Role change for {memberMention}: Removed {removedRole.Name}."); - - if (quarantineRole is not null && removedRole.Id == quarantineRole.Id) + bool quarantineRolesWasRemoved = removedRoles.Contains(quarantineRole); + if (quarantineRolesWasRemoved) { await _userLogService.CreateUserLog(member.Id, string.Empty, UserLogType.Approved); } @@ -550,4 +540,9 @@ private async Task> MapAndEnrichMessages(IEnumerable 0) { _logger.LogDebug("Populated {createdCount} message refs", createdCount); - _discordLogger.LogExtendedActivityMessage($"Populated {createdCount} message refs"); + _discordLogger.LogOperationMessage($"Populated {createdCount} message refs"); } } diff --git a/src/Nellebot/Services/Loggers/DiscordErrorLogger.cs b/src/Nellebot/Services/Loggers/DiscordErrorLogger.cs index 015a316..0bd4558 100644 --- a/src/Nellebot/Services/Loggers/DiscordErrorLogger.cs +++ b/src/Nellebot/Services/Loggers/DiscordErrorLogger.cs @@ -4,7 +4,6 @@ using DSharpPlus.Commands.Processors.TextCommands; using DSharpPlus.Entities; using Microsoft.Extensions.Options; -using Nellebot.CommandHandlers; using Nellebot.Utils; using Nellebot.Workers; @@ -37,29 +36,11 @@ public void LogCommandError(CommandContext ctx, string errorMessage) var contextMessage = $"`{command}` by `{user}` in `{channelName}`(`{guildName}`)"; var escapedErrorMessage = $"`{EscapeTicks(errorMessage)}`"; - var fullErrorMessage = $"{contextMessage}{Environment.NewLine}{escapedErrorMessage}"; + var fullErrorMessage = $"{contextMessage}{DiscordConstants.NewLineChar}{escapedErrorMessage}"; LogError("Failed command", fullErrorMessage); } - public void LogEventError(EventContext ctx, string errorMessage) - { - string user = ctx.User != null ? $"{ctx.User.Username}#{ctx.User.Discriminator}" : "Unknown user"; - string channelName = ctx.Channel?.Name ?? "Unknown channel"; - string eventName = ctx.EventName; - string message = ctx.Message != null ? EscapeTicks(ctx.Message.Content) : string.Empty; - - var contextMessage = $"`{eventName}` by `{user}` in `{channelName}`"; - - if (!string.IsNullOrWhiteSpace(message)) contextMessage += $"{Environment.NewLine}Message: `{message}`"; - - var escapedErrorMesssage = $"`{EscapeTicks(errorMessage)}`"; - - var fullErrorMessage = $"{contextMessage}{Environment.NewLine}{escapedErrorMesssage}"; - - LogError("Failed event", fullErrorMessage); - } - public void LogError(Exception ex, string message) { LogError(message, ex.ToString()); @@ -82,7 +63,7 @@ public void LogWarning(string warning, string warningMessage) private static string EscapeTicks(string value) { - return string.IsNullOrWhiteSpace(value) ? value : value.Replace('`', '\''); + return string.IsNullOrWhiteSpace(value) ? value : value.Replace(oldChar: '`', newChar: '\''); } private void SendErrorLogChannelEmbed(string title, string message, int color) diff --git a/src/Nellebot/Services/Loggers/DiscordLogger.cs b/src/Nellebot/Services/Loggers/DiscordLogger.cs index f3eb53e..a05f447 100644 --- a/src/Nellebot/Services/Loggers/DiscordLogger.cs +++ b/src/Nellebot/Services/Loggers/DiscordLogger.cs @@ -33,19 +33,19 @@ public void LogActivityMessage(string message) LogMessageCore(message, _options.ActivityLogChannelId, suppressNotifications: true); } - public void LogExtendedActivityMessage(string message) + public void LogActivityMessage(DiscordMessageBuilder message) { - LogMessageCore(message, _options.ExtendedActivityLogChannelId, suppressNotifications: true); + LogMessageCore(message, _options.ActivityLogChannelId, suppressNotifications: true); } - public void LogExtendedActivityMessage(DiscordMessageBuilder message) + public void LogOperationMessage(string message) { - LogMessageCore(message, _options.ExtendedActivityLogChannelId, suppressNotifications: true); + LogMessageCore(message, _options.OperationLogChannelId, suppressNotifications: true); } - public void LogTrustedChannelMessage(string message) + public void LogModAlertsMessage(string message) { - LogMessageCore(message, _options.TrustedChannelId); + LogMessageCore(message, _options.ModAlertsChannelId); } private void LogMessageCore(string message, ulong channelId, bool suppressNotifications = false) diff --git a/src/Nellebot/Services/Loggers/IDiscordErrorLogger.cs b/src/Nellebot/Services/Loggers/IDiscordErrorLogger.cs index 47ab32a..0ce539d 100644 --- a/src/Nellebot/Services/Loggers/IDiscordErrorLogger.cs +++ b/src/Nellebot/Services/Loggers/IDiscordErrorLogger.cs @@ -1,6 +1,5 @@ using System; using DSharpPlus.Commands; -using Nellebot.CommandHandlers; namespace Nellebot.Services.Loggers; @@ -8,8 +7,6 @@ public interface IDiscordErrorLogger { void LogCommandError(CommandContext ctx, string errorMessage); - void LogEventError(EventContext ctx, string errorMessage); - void LogError(string error, string errorMessage); void LogError(string errorMessage); diff --git a/src/Nellebot/appsettings.Development.json b/src/Nellebot/appsettings.Development.json index c968eca..5b194d2 100644 --- a/src/Nellebot/appsettings.Development.json +++ b/src/Nellebot/appsettings.Development.json @@ -14,8 +14,8 @@ "ModRoleId": 825149115348287536, "SpammerRoleId": 1201978292996157511, "ActivityLogChannelId": 825149117264822293, - "ExtendedActivityLogChannelId": 825149117264822294, "GreetingsChannelId": 1104496991918116924, + "OperationLogChannelId": 1421567228276510801, "ErrorLogChannelId": 827233312333889576, "SuggestionsChannelId": 1156671261963997275, "MetaChannelIds": [ @@ -46,6 +46,7 @@ 825149115338981400 ], "TrustedChannelId": 1201978118840262706, + "ModAlertsChannelId": 1421563631673540629, "ProtectorCertificatePath": "/certs/dev-protector.pfx" } } diff --git a/src/Nellebot/appsettings.json b/src/Nellebot/appsettings.json index 70c7023..7085533 100644 --- a/src/Nellebot/appsettings.json +++ b/src/Nellebot/appsettings.json @@ -15,8 +15,8 @@ "ModRoleId": 622142742478323727, "SpammerRoleId": 1201981155944173587, "ActivityLogChannelId": 622726263538450444, - "ExtendedActivityLogChannelId": 622349611788533760, "GreetingsChannelId": 622141497332072452, + "OperationLogChannelId": 1421574762357985481, "ErrorLogChannelId": 992129259114078248, "SuggestionsChannelId": 1157715034877726850, "MetaChannelIds": [ @@ -56,6 +56,7 @@ 1076506985706557530 ], "TrustedChannelId": 633394316261195796, + "ModAlertsChannelId": 1421575006856675448, "ValhallKickMaxMemberAgeInHours": 48, "ProtectorKeyDataDir": "/keydata", "ProtectorCertificatePath": "/certs/protector.pfx",