Skip to content

Commit 1e05c52

Browse files
committed
Added simple message batching
1 parent 9f58eae commit 1e05c52

File tree

1 file changed

+64
-30
lines changed

1 file changed

+64
-30
lines changed

trackscape-discord-api/src/controllers/chat_controller.rs

+64-30
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use crate::{handler, ChatServerHandle};
33
use actix_web::web::Data;
44
use actix_web::{error, post, web, Error, HttpRequest, HttpResponse, Scope};
55
use celery::Celery;
6-
use log::error;
76
use serenity::all::{ChannelId, CreateEmbed, CreateEmbedAuthor};
87
use serenity::builder::CreateMessage;
98
use serenity::http::Http;
@@ -115,6 +114,10 @@ async fn new_clan_chats(
115114
return result.map_err(|err| error::ErrorBadRequest(err.message));
116115
};
117116

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+
118121
for mut chat in new_chat.clone() {
119122
if chat.sender.clone() == "" && chat.clan_name.clone() == "" {
120123
continue;
@@ -164,15 +167,15 @@ async fn new_clan_chats(
164167
let right_now = serenity::model::timestamp::Timestamp::now();
165168

166169
match registered_guild.clan_chat_channel {
167-
Some(channel_id) => {
170+
Some(_channel_id) => {
168171
let author_image = match chat.clan_name.clone() == chat.sender.clone() {
169172
true => {
170173
"https://oldschool.runescape.wiki/images/Your_Clan_icon.png".to_string()
171174
}
172175
false => get_wiki_clan_rank_image_url(chat.rank.clone()),
173176
};
174177

175-
let clan_chat_to_discord = CreateMessage::new().embed(
178+
clan_chat_queue.push(
176179
CreateEmbed::new()
177180
.title("")
178181
.author(CreateEmbedAuthor::new(chat.sender.clone()).icon_url(author_image))
@@ -181,13 +184,6 @@ async fn new_clan_chats(
181184
.color(0x0000FF)
182185
.timestamp(right_now),
183186
);
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-
}
191187
}
192188
_ => {}
193189
}
@@ -260,6 +256,7 @@ async fn new_clan_chats(
260256
match possible_broadcast {
261257
None => {
262258
if league_world {
259+
//This checks for leagues only broadcasts. Like new area, etc
263260
let possible_leagues_message = handler.extract_leagues_message().await;
264261
if let Some(leagues_message) = possible_leagues_message {
265262
let mut broadcast_embed = CreateEmbed::new()
@@ -273,17 +270,12 @@ async fn new_clan_chats(
273270
broadcast_embed = broadcast_embed.image(icon_url);
274271
}
275272
}
276-
let broadcast_message = CreateMessage::new().embed(broadcast_embed);
273+
277274
//Only send if theres a leagues channel
278-
if let Some(channel_to_send_broadcast) =
275+
if let Some(_channel_to_send_broadcast) =
279276
registered_guild.leagues_broadcast_channel
280277
{
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);
287279
}
288280
}
289281
}
@@ -304,23 +296,65 @@ async fn new_clan_chats(
304296
broadcast_embed = broadcast_embed.image(icon_url);
305297
}
306298
}
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+
}
318305
}
319-
}
306+
false => {
307+
if registered_guild.broadcast_channel.is_some() {
308+
broadcast_queue.push(broadcast_embed);
309+
}
310+
}
311+
};
320312
}
321313
};
322314
}
323315

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+
}
324358
return Ok("Message processed".to_string());
325359
}
326360

0 commit comments

Comments
 (0)