Skip to content

Commit 20c2ba0

Browse files
committed
[Milky] Support suppressing self-generated message events
1 parent 7c37026 commit 20c2ba0

5 files changed

Lines changed: 17 additions & 1 deletion

File tree

‎Lagrange.Milky/Configurations/MilkyConfiguration.cs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ public class MilkyConfiguration(MilkyHttpServerConfiguration httpServer, string?
1212
public MilkyEventConfiguration Event => Event_;
1313
}
1414

15-
public class MilkyEventConfiguration(MilkyWebSocketEventConfiguration? webSocket = null, MilkySSEEventConfiguration? sse = null, MilkyWebHookEventConfiguration? webHook = null)
15+
public class MilkyEventConfiguration(bool suppressSelfMessageEvents = false, MilkyWebSocketEventConfiguration? webSocket = null, MilkySSEEventConfiguration? sse = null, MilkyWebHookEventConfiguration? webHook = null)
1616
{
17+
public bool SuppressSelfMessageEvents { get; } = suppressSelfMessageEvents;
1718
public MilkyWebSocketEventConfiguration? WebSocket { get; } = webSocket;
1819
public MilkySSEEventConfiguration? SSE { get; } = sse;
1920
public MilkyWebHookEventConfiguration? WebHook { get; } = webHook;

‎Lagrange.Milky/Events/SSEEventHandler.cs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
using System.Threading.Tasks;
99
using Lagrange.Core;
1010
using Lagrange.Core.Events;
11+
using Lagrange.Core.Events.EventArgs;
1112
using Lagrange.Milky.Configurations;
1213
using Lagrange.Milky.Events.Converters;
1314
using Lagrange.Milky.Events.Extensions;
1415
using Lagrange.Milky.Http;
1516
using Lagrange.Milky.Serialization;
1617
using Microsoft.Extensions.DependencyInjection;
1718
using Microsoft.Extensions.Logging;
19+
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
1820

1921
namespace Lagrange.Milky.Events;
2022

@@ -33,6 +35,7 @@ public sealed class SSEEventHandler : IHttpHandler, IGenericEventHandler, IDispo
3335
private readonly string? _token;
3436
private readonly string? _allowCorsOrigins;
3537
private readonly ulong _heartbeatIntervalSeconds;
38+
private readonly bool _suppressSelfMessageEvents;
3639

3740
private readonly ConcurrentDictionary<Guid, (HttpListenerResponse Response, SemaphoreSlim SendLock)> _connections = new();
3841
private readonly CancellationTokenSource _cts = new();
@@ -49,6 +52,7 @@ public SSEEventHandler(IServiceScopeFactory scopeFactory, ILogger<SSEEventHandle
4952
_token = configuration.AccessToken;
5053
_allowCorsOrigins = sseConfiguration.AllowCorsOrigins;
5154
_heartbeatIntervalSeconds = sseConfiguration.HeartbeatIntervalSeconds;
55+
_suppressSelfMessageEvents = configuration.Event.SuppressSelfMessageEvents;
5256

5357
_lagrange.RegisterConvertibleEvents(this);
5458
}
@@ -179,6 +183,8 @@ private async Task SendAllAsync(byte[] payload, CancellationToken ct = default)
179183

180184
public async Task OnEvent<TEvent>(BotContext lagrange, TEvent @event) where TEvent : EventBase
181185
{
186+
if (_suppressSelfMessageEvents && @event is BotMessageEvent message && message.Message.Contact.Uin == _lagrange.BotUin) return;
187+
182188
await using var scope = _scopeFactory.CreateAsyncScope();
183189
var converter = scope.ServiceProvider.GetRequiredService<IEventConverter<TEvent>>();
184190
byte[] bytes = Serializer.JsonSerializeToUtf8Bytes(new MilkyEvent

‎Lagrange.Milky/Events/WebHookEventHandler.cs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading.Tasks;
77
using Lagrange.Core;
88
using Lagrange.Core.Events;
9+
using Lagrange.Core.Events.EventArgs;
910
using Lagrange.Milky.Configurations;
1011
using Lagrange.Milky.Events.Converters;
1112
using Lagrange.Milky.Events.Extensions;
@@ -23,6 +24,7 @@ public class WebHookEventHandler(IServiceScopeFactory scopeFactory, ILogger<WebH
2324
private readonly BotContext _lagrange = lagrange;
2425

2526
private readonly string? _token = configuration.AccessToken;
27+
private readonly bool _suppressSelfMessageEvents = configuration.Event.SuppressSelfMessageEvents;
2628

2729
private readonly string[] _targetUrls = webHookConfiguration.TargetUrls;
2830

@@ -44,6 +46,8 @@ public Task StopAsync(CancellationToken ct)
4446

4547
public async Task OnEvent<TEvent>(BotContext lagrange, TEvent @event) where TEvent : EventBase
4648
{
49+
if (_suppressSelfMessageEvents && @event is BotMessageEvent message && message.Message.Contact.Uin == _lagrange.BotUin) return;
50+
4751
await using var scope = _scopeFactory.CreateAsyncScope();
4852
var converter = scope.ServiceProvider.GetRequiredService<IEventConverter<TEvent>>();
4953
byte[] bytes = Serializer.JsonSerializeToUtf8Bytes(new MilkyEvent

‎Lagrange.Milky/Events/WebSocketEventHandler.cs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Microsoft.Extensions.Logging;
1616
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
1717
using Lagrange.Milky.Serialization;
18+
using Lagrange.Core.Events.EventArgs;
1819

1920
namespace Lagrange.Milky.Events;
2021

@@ -28,6 +29,7 @@ public sealed class WebSocketEventHandler : IHttpHandler, IGenericEventHandler,
2829
private readonly BotContext _lagrange;
2930

3031
private readonly string? _token;
32+
private readonly bool _suppressSelfMessageEvents;
3133

3234
private readonly ConcurrentDictionary<Guid, (WebSocket WS, SemaphoreSlim SendLock)> _wss = new();
3335
private readonly CancellationTokenSource _cts = new();
@@ -162,6 +164,8 @@ private async Task SendAllAsync(byte[] payload, CancellationToken ct = default)
162164

163165
public async Task OnEvent<TEvent>(BotContext lagrange, TEvent @event) where TEvent : EventBase
164166
{
167+
if (_suppressSelfMessageEvents && @event is BotMessageEvent message && message.Message.Contact.Uin == _lagrange.BotUin) return;
168+
165169
await using var scope = _scopeFactory.CreateAsyncScope();
166170
var converter = scope.ServiceProvider.GetRequiredService<IEventConverter<TEvent>>();
167171
byte[] bytes = Serializer.JsonSerializeToUtf8Bytes(new MilkyEvent

‎Lagrange.Milky/Resources/appsettings.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
}
4141
},
4242
"Event": {
43+
// "SuppressSelfMessageEvents": false
4344
"WebSocket": {
4445
"Enabled": true
4546
}

0 commit comments

Comments
 (0)