diff --git a/.editorconfig b/.editorconfig index 44bd9862..f744ff8b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,6 +3,10 @@ root = true [*.{cs,csx}] insert_final_newline = true +# Allow one-liner if-returns +dotnet_diagnostic.SA1503.severity = none +dotnet_diagnostic.SA1137.severity = error + # Namespace must match folder structure dotnet_diagnostic.IDE0130.severity = none diff --git a/cicd/template.yml b/cicd/template.yml index 465511d9..62abd030 100644 --- a/cicd/template.yml +++ b/cicd/template.yml @@ -231,8 +231,8 @@ Resources: TaskDefinition: Type: AWS::ECS::TaskDefinition Properties: - Cpu: "512" - Memory: "1024" + Cpu: "256" + Memory: "512" Family: !Ref AWS::StackName NetworkMode: awsvpc ExecutionRoleArn: !GetAtt TaskRole.Arn diff --git a/src/Adapter/Events/Controllers/MessageCreateEventController.cs b/src/Adapter/Events/Controllers/MessageCreateEventController.cs index 2463dedb..10429012 100644 --- a/src/Adapter/Events/Controllers/MessageCreateEventController.cs +++ b/src/Adapter/Events/Controllers/MessageCreateEventController.cs @@ -16,6 +16,8 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +#pragma warning disable IDE0011 // Relax required braces + namespace Brighid.Discord.Adapter.Events { /// @@ -78,6 +80,7 @@ public async Task Handle(MessageCreateEvent @event, CancellationToken cancellati { cancellationToken.ThrowIfCancellationRequested(); gateway.ThrowIfNotReady(); + if (@event.IsBotMessage) return; using var trace = tracingService.StartTrace(); using var scope = logger.BeginScope("{@Event} {@TraceId}", nameof(MessageCreateEvent), trace.Id); diff --git a/src/Adapter/Events/Events/MessageCreateEvent.cs b/src/Adapter/Events/Events/MessageCreateEvent.cs index e4fc7298..a38102d4 100644 --- a/src/Adapter/Events/Events/MessageCreateEvent.cs +++ b/src/Adapter/Events/Events/MessageCreateEvent.cs @@ -15,5 +15,10 @@ public struct MessageCreateEvent : IGatewayEvent, IMessageEvent /// Gets or sets the event message. /// public Message Message { get; set; } + + /// + /// Gets a value indicating whether the message originates from a bot user or not. + /// + public bool IsBotMessage => Message.Author.IsBot ?? false; } } diff --git a/tests/Adapter/Events/Controllers/MessageCreateEventControllerTests.cs b/tests/Adapter/Events/Controllers/MessageCreateEventControllerTests.cs index f45e60a5..eb715347 100644 --- a/tests/Adapter/Events/Controllers/MessageCreateEventControllerTests.cs +++ b/tests/Adapter/Events/Controllers/MessageCreateEventControllerTests.cs @@ -69,6 +69,27 @@ public class HandleTests gateway.Received().ThrowIfNotReady(); } + [Test, Auto] + public async Task ShouldDoNothingIfMessageWasFromABot( + string content, + [Frozen, Substitute] IGatewayService gateway, + [Frozen, Substitute] ITracingService tracing, + [Frozen, Substitute] IMessageEmitter emitter, + [Frozen, Substitute] IUserService userService, + [Target] MessageCreateEventController controller + ) + { + var cancellationToken = new CancellationToken(false); + var message = new Message { Content = content, Author = new User { IsBot = true } }; + var @event = new MessageCreateEvent { Message = message }; + + await controller.Handle(@event, cancellationToken); + + tracing.DidNotReceive().StartTrace(); + await emitter.DidNotReceive().Emit(Any(), Any(), Any()); + await userService.DidNotReceive().IsUserRegistered(Any(), Any()); + } + [Test, Auto] public async Task ShouldStartAndStopATraceWithMessageAndEventAnnotations( string content,