17
17
using Microsoft . Extensions . Options ;
18
18
using Modix . Bot . Notifications ;
19
19
using Modix . Data . Models . Core ;
20
+ using Modix . Services ;
20
21
21
22
namespace Modix . Bot
22
23
{
@@ -61,6 +62,12 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
61
62
discordSocketClient . MessageDeleted += OnMessageDeleted ;
62
63
discordSocketClient . ReactionAdded += OnReactionAdded ;
63
64
discordSocketClient . ReactionRemoved += OnReactionRemoved ;
65
+ discordSocketClient . UserJoined += OnUserJoined ;
66
+ discordSocketClient . AuditLogCreated += OnAuditLogCreated ;
67
+ discordSocketClient . GuildAvailable += OnGuildAvailable ;
68
+ discordSocketClient . ChannelCreated += OnChannelCreated ;
69
+ discordSocketClient . ChannelUpdated += OnChannelUpdated ;
70
+ discordSocketClient . JoinedGuild += OnJoinedGuild ;
64
71
65
72
discordRestClient . Log += discordSerilogAdapter . HandleLog ;
66
73
commandService . Log += discordSerilogAdapter . HandleLog ;
@@ -77,7 +84,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
77
84
await commandService . AddModulesAsync ( typeof ( ModixBot ) . Assembly , _scope . ServiceProvider ) ;
78
85
79
86
logger . LogInformation ( "{Modules} modules loaded, containing {Commands} commands" ,
80
- commandService . Modules . Count ( ) , commandService . Modules . SelectMany ( d=> d . Commands ) . Count ( ) ) ;
87
+ commandService . Modules . Count ( ) , commandService . Modules . SelectMany ( d => d . Commands ) . Count ( ) ) ;
81
88
82
89
logger . LogInformation ( "Logging into Discord and starting the client" ) ;
83
90
@@ -87,18 +94,24 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
87
94
88
95
logger . LogInformation ( "Loading interaction modules..." ) ;
89
96
90
- var modules = ( await interactionService . AddModulesAsync ( typeof ( ModixBot ) . Assembly , _scope . ServiceProvider ) ) . ToArray ( ) ;
97
+ var modules =
98
+ ( await interactionService . AddModulesAsync ( typeof ( ModixBot ) . Assembly , _scope . ServiceProvider ) )
99
+ . ToArray ( ) ;
91
100
92
101
foreach ( var guild in discordSocketClient . Guilds )
93
102
{
94
103
var commands = await interactionService . AddModulesToGuildAsync ( guild , deleteMissing : true , modules ) ;
95
104
}
96
105
97
106
logger . LogInformation ( "{Modules} interaction modules loaded" , modules . Length ) ;
98
- logger . LogInformation ( "Loaded {SlashCommands} slash commands" , modules . SelectMany ( x => x . SlashCommands ) . Count ( ) ) ;
99
- logger . LogInformation ( "Loaded {ContextCommands} context commands" , modules . SelectMany ( x => x . ContextCommands ) . Count ( ) ) ;
100
- logger . LogInformation ( "Loaded {ModalCommands} modal commands" , modules . SelectMany ( x => x . ModalCommands ) . Count ( ) ) ;
101
- logger . LogInformation ( "Loaded {ComponentCommands} component commands" , modules . SelectMany ( x => x . ComponentCommands ) . Count ( ) ) ;
107
+ logger . LogInformation ( "Loaded {SlashCommands} slash commands" ,
108
+ modules . SelectMany ( x => x . SlashCommands ) . Count ( ) ) ;
109
+ logger . LogInformation ( "Loaded {ContextCommands} context commands" ,
110
+ modules . SelectMany ( x => x . ContextCommands ) . Count ( ) ) ;
111
+ logger . LogInformation ( "Loaded {ModalCommands} modal commands" ,
112
+ modules . SelectMany ( x => x . ModalCommands ) . Count ( ) ) ;
113
+ logger . LogInformation ( "Loaded {ComponentCommands} component commands" ,
114
+ modules . SelectMany ( x => x . ComponentCommands ) . Count ( ) ) ;
102
115
103
116
await Task . Delay ( - 1 , stoppingToken ) ;
104
117
}
@@ -154,7 +167,7 @@ private Task OnDisconnect(Exception ex)
154
167
{
155
168
// Reconnections are handled by Discord.NET, we
156
169
// don't need to worry about handling this ourselves
157
- if ( ex is GatewayReconnectException )
170
+ if ( ex is GatewayReconnectException )
158
171
{
159
172
logger . LogInformation ( "Received gateway reconnect" ) ;
160
173
return Task . CompletedTask ;
@@ -171,7 +184,6 @@ private async Task StartClient(CancellationToken cancellationToken)
171
184
172
185
try
173
186
{
174
-
175
187
cancellationToken . ThrowIfCancellationRequested ( ) ;
176
188
177
189
await discordSocketClient . LoginAsync ( TokenType . Bot , modixConfig . Value . DiscordToken ) ;
@@ -193,14 +205,18 @@ private void UnregisterClientHandlers()
193
205
discordSocketClient . LatencyUpdated -= OnLatencyUpdated ;
194
206
discordSocketClient . Disconnected -= OnDisconnect ;
195
207
discordSocketClient . Log -= discordSerilogAdapter . HandleLog ;
196
-
197
208
discordSocketClient . Ready -= OnClientReady ;
198
-
199
209
discordSocketClient . MessageReceived -= OnMessageReceived ;
200
210
discordSocketClient . MessageUpdated -= OnMessageUpdated ;
201
211
discordSocketClient . MessageDeleted -= OnMessageDeleted ;
202
212
discordSocketClient . ReactionAdded -= OnReactionAdded ;
203
213
discordSocketClient . ReactionRemoved -= OnReactionRemoved ;
214
+ discordSocketClient . UserJoined -= OnUserJoined ;
215
+ discordSocketClient . AuditLogCreated -= OnAuditLogCreated ;
216
+ discordSocketClient . GuildAvailable -= OnGuildAvailable ;
217
+ discordSocketClient . ChannelCreated -= OnChannelCreated ;
218
+ discordSocketClient . ChannelUpdated -= OnChannelUpdated ;
219
+ discordSocketClient . JoinedGuild -= OnJoinedGuild ;
204
220
}
205
221
206
222
private async Task OnClientReady ( )
@@ -209,40 +225,53 @@ private async Task OnClientReady()
209
225
_whenReadySource . SetResult ( null ) ;
210
226
}
211
227
212
- private async Task OnMessageReceived ( SocketMessage arg )
228
+ private async Task PublishMessage < T > ( T message ) where T : INotification
213
229
{
214
230
using var scope = serviceProvider . CreateScope ( ) ;
215
- var mediator = scope . ServiceProvider . GetRequiredService < IMediator > ( ) ;
216
- await mediator . Publish ( new MessageReceivedNotificationV3 ( arg ) ) ;
231
+ await PublishMessage ( scope , message ) ;
217
232
}
218
233
219
- private async Task OnMessageUpdated ( Cacheable < IMessage , ulong > cachedMessage , SocketMessage newMessage , ISocketMessageChannel channel )
234
+ private async Task PublishMessage < T > ( IServiceScope scope , T message ) where T : INotification
220
235
{
221
- using var scope = serviceProvider . CreateScope ( ) ;
222
236
var mediator = scope . ServiceProvider . GetRequiredService < IMediator > ( ) ;
223
- await mediator . Publish ( new MessageUpdatedNotificationV3 ( cachedMessage , newMessage , channel ) ) ;
237
+ await mediator . Publish ( message ) ;
224
238
}
225
239
226
- private async Task OnMessageDeleted ( Cacheable < IMessage , ulong > message , Cacheable < IMessageChannel , ulong > channel )
227
- {
228
- using var scope = serviceProvider . CreateScope ( ) ;
229
- var mediator = scope . ServiceProvider . GetRequiredService < IMediator > ( ) ;
230
- await mediator . Publish ( new MessageDeletedNotificationV3 ( message , channel ) ) ;
231
- }
240
+ private Task OnMessageReceived ( SocketMessage message ) =>
241
+ PublishMessage ( new MessageReceivedNotificationV3 ( message ) ) ;
232
242
233
- private async Task OnReactionAdded ( Cacheable < IUserMessage , ulong > message , Cacheable < IMessageChannel , ulong > channel , SocketReaction reaction )
234
- {
235
- using var scope = serviceProvider . CreateScope ( ) ;
236
- var mediator = scope . ServiceProvider . GetRequiredService < IMediator > ( ) ;
237
- await mediator . Publish ( new ReactionAddedNotificationV3 ( message , channel , reaction ) ) ;
238
- }
243
+ private Task OnMessageUpdated ( Cacheable < IMessage , ulong > cachedMessage , SocketMessage newMessage ,
244
+ ISocketMessageChannel channel ) =>
245
+ PublishMessage ( new MessageUpdatedNotificationV3 ( cachedMessage , newMessage , channel ) ) ;
239
246
240
- private async Task OnReactionRemoved ( Cacheable < IUserMessage , ulong > message , Cacheable < IMessageChannel , ulong > channel , SocketReaction reaction )
241
- {
242
- using var scope = serviceProvider . CreateScope ( ) ;
243
- var mediator = scope . ServiceProvider . GetRequiredService < IMediator > ( ) ;
244
- await mediator . Publish ( new ReactionRemovedNotificationV3 ( message , channel , reaction ) ) ;
245
- }
247
+ private Task OnMessageDeleted ( Cacheable < IMessage , ulong > message ,
248
+ Cacheable < IMessageChannel , ulong > channel ) =>
249
+ PublishMessage ( new MessageDeletedNotificationV3 ( message , channel ) ) ;
250
+
251
+ private Task OnReactionAdded ( Cacheable < IUserMessage , ulong > message ,
252
+ Cacheable < IMessageChannel , ulong > channel , SocketReaction reaction ) =>
253
+ PublishMessage ( new ReactionAddedNotificationV3 ( message , channel , reaction ) ) ;
254
+
255
+ private Task OnReactionRemoved ( Cacheable < IUserMessage , ulong > message ,
256
+ Cacheable < IMessageChannel , ulong > channel , SocketReaction reaction ) =>
257
+ PublishMessage ( new ReactionRemovedNotificationV3 ( message , channel , reaction ) ) ;
258
+
259
+ private Task OnUserJoined ( SocketGuildUser guildUser ) =>
260
+ PublishMessage ( new UserJoinedNotificationV3 ( guildUser ) ) ;
261
+
262
+ private Task OnAuditLogCreated ( SocketAuditLogEntry entry , SocketGuild guild ) =>
263
+ PublishMessage ( new AuditLogCreatedNotificationV3 ( entry , guild ) ) ;
264
+
265
+ private Task OnGuildAvailable ( SocketGuild guild )
266
+ => PublishMessage ( new GuildAvailableNotificationV3 ( guild ) ) ;
267
+
268
+ private Task OnChannelCreated ( SocketChannel channel ) =>
269
+ PublishMessage ( new ChannelCreatedNotificationV3 ( channel ) ) ;
270
+
271
+ private Task OnChannelUpdated ( SocketChannel oldChannel , SocketChannel newChannel ) =>
272
+ PublishMessage ( new ChannelUpdatedNotificationV3 ( oldChannel , newChannel ) ) ;
273
+
274
+ private Task OnJoinedGuild ( SocketGuild guild ) => PublishMessage ( new JoinedGuildNotificationV3 ( guild ) ) ;
246
275
247
276
public override void Dispose ( )
248
277
{
0 commit comments