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",