@@ -3,7 +3,6 @@ use crate::{handler, ChatServerHandle};
3
3
use actix_web:: web:: Data ;
4
4
use actix_web:: { error, post, web, Error , HttpRequest , HttpResponse , Scope } ;
5
5
use celery:: Celery ;
6
- use log:: error;
7
6
use serenity:: all:: { ChannelId , CreateEmbed , CreateEmbedAuthor } ;
8
7
use serenity:: builder:: CreateMessage ;
9
8
use serenity:: http:: Http ;
@@ -115,6 +114,10 @@ async fn new_clan_chats(
115
114
return result. map_err ( |err| error:: ErrorBadRequest ( err. message ) ) ;
116
115
} ;
117
116
117
+ let mut clan_chat_queue: Vec < CreateEmbed > = vec ! [ ] ;
118
+ let mut broadcast_queue: Vec < CreateEmbed > = vec ! [ ] ;
119
+ let mut leagues_broadcast_queue: Vec < CreateEmbed > = vec ! [ ] ;
120
+
118
121
for mut chat in new_chat. clone ( ) {
119
122
if chat. sender . clone ( ) == "" && chat. clan_name . clone ( ) == "" {
120
123
continue ;
@@ -164,15 +167,15 @@ async fn new_clan_chats(
164
167
let right_now = serenity:: model:: timestamp:: Timestamp :: now ( ) ;
165
168
166
169
match registered_guild. clan_chat_channel {
167
- Some ( channel_id ) => {
170
+ Some ( _channel_id ) => {
168
171
let author_image = match chat. clan_name . clone ( ) == chat. sender . clone ( ) {
169
172
true => {
170
173
"https://oldschool.runescape.wiki/images/Your_Clan_icon.png" . to_string ( )
171
174
}
172
175
false => get_wiki_clan_rank_image_url ( chat. rank . clone ( ) ) ,
173
176
} ;
174
177
175
- let clan_chat_to_discord = CreateMessage :: new ( ) . embed (
178
+ clan_chat_queue . push (
176
179
CreateEmbed :: new ( )
177
180
. title ( "" )
178
181
. author ( CreateEmbedAuthor :: new ( chat. sender . clone ( ) ) . icon_url ( author_image) )
@@ -181,13 +184,6 @@ async fn new_clan_chats(
181
184
. color ( 0x0000FF )
182
185
. timestamp ( right_now) ,
183
186
) ;
184
-
185
- let new_chat_result = ChannelId :: new ( channel_id)
186
- . send_message ( & * discord_http_client, clan_chat_to_discord)
187
- . await ;
188
- if let Err ( e) = new_chat_result {
189
- error ! ( "Error sending normal cc: {:?}" , e) ;
190
- }
191
187
}
192
188
_ => { }
193
189
}
@@ -260,6 +256,7 @@ async fn new_clan_chats(
260
256
match possible_broadcast {
261
257
None => {
262
258
if league_world {
259
+ //This checks for leagues only broadcasts. Like new area, etc
263
260
let possible_leagues_message = handler. extract_leagues_message ( ) . await ;
264
261
if let Some ( leagues_message) = possible_leagues_message {
265
262
let mut broadcast_embed = CreateEmbed :: new ( )
@@ -273,17 +270,12 @@ async fn new_clan_chats(
273
270
broadcast_embed = broadcast_embed. image ( icon_url) ;
274
271
}
275
272
}
276
- let broadcast_message = CreateMessage :: new ( ) . embed ( broadcast_embed ) ;
273
+
277
274
//Only send if theres a leagues channel
278
- if let Some ( channel_to_send_broadcast ) =
275
+ if let Some ( _channel_to_send_broadcast ) =
279
276
registered_guild. leagues_broadcast_channel
280
277
{
281
- let new_broad_cast = ChannelId :: new ( channel_to_send_broadcast)
282
- . send_message ( & * discord_http_client, broadcast_message)
283
- . await ;
284
- if let Err ( e) = new_broad_cast {
285
- error ! ( "Error sending broadcast: {:?}" , e) ;
286
- }
278
+ leagues_broadcast_queue. push ( broadcast_embed) ;
287
279
}
288
280
}
289
281
}
@@ -304,23 +296,65 @@ async fn new_clan_chats(
304
296
broadcast_embed = broadcast_embed. image ( icon_url) ;
305
297
}
306
298
}
307
- let broadcast_message = CreateMessage :: new ( ) . embed ( broadcast_embed) ;
308
- let possible_channel_to_send_broadcast = match league_world {
309
- true => registered_guild. leagues_broadcast_channel ,
310
- false => registered_guild. broadcast_channel ,
311
- } ;
312
- if let Some ( channel_to_send_broadcast) = possible_channel_to_send_broadcast {
313
- let new_broad_cast = ChannelId :: new ( channel_to_send_broadcast)
314
- . send_message ( & * discord_http_client, broadcast_message)
315
- . await ;
316
- if let Err ( e) = new_broad_cast {
317
- error ! ( "Error sending broadcast: {:?}" , e) ;
299
+
300
+ match league_world {
301
+ true => {
302
+ if registered_guild. leagues_broadcast_channel . is_some ( ) {
303
+ leagues_broadcast_queue. push ( broadcast_embed) ;
304
+ }
318
305
}
319
- }
306
+ false => {
307
+ if registered_guild. broadcast_channel . is_some ( ) {
308
+ broadcast_queue. push ( broadcast_embed) ;
309
+ }
310
+ }
311
+ } ;
320
312
}
321
313
} ;
322
314
}
323
315
316
+ //Send all the messages
317
+ if clan_chat_queue. len ( ) > 0 {
318
+ if let Some ( channel_id) = registered_guild. clan_chat_channel {
319
+ let result = ChannelId :: new ( channel_id)
320
+ . send_message (
321
+ & * discord_http_client,
322
+ CreateMessage :: new ( ) . embeds ( clan_chat_queue) ,
323
+ )
324
+ . await ;
325
+ if let Err ( _e) = result {
326
+ // error!("Error sending clan chat: {:?}", e);
327
+ }
328
+ }
329
+ }
330
+
331
+ if broadcast_queue. len ( ) > 0 {
332
+ if let Some ( channel_id) = registered_guild. broadcast_channel {
333
+ let result = ChannelId :: new ( channel_id)
334
+ . send_message (
335
+ & * discord_http_client,
336
+ CreateMessage :: new ( ) . embeds ( broadcast_queue) ,
337
+ )
338
+ . await ;
339
+ if let Err ( _e) = result {
340
+ // error!("Error sending broadcast: {:?}", e);
341
+ }
342
+ }
343
+ }
344
+
345
+ if leagues_broadcast_queue. len ( ) > 0 {
346
+ if let Some ( channel_id) = registered_guild. leagues_broadcast_channel {
347
+ let result = ChannelId :: new ( channel_id)
348
+ . send_message (
349
+ & * discord_http_client,
350
+ CreateMessage :: new ( ) . embeds ( leagues_broadcast_queue) ,
351
+ )
352
+ . await ;
353
+ if let Err ( _e) = result {
354
+ // error!("Error sending leagues broadcast: {:?}", e);
355
+ }
356
+ }
357
+ }
324
358
return Ok ( "Message processed" . to_string ( ) ) ;
325
359
}
326
360
0 commit comments