Improved message handling
+ Messages broadcast to all channels are now all started in "parallel" + This should improve message times to all channels, especially when there are many players + Start of the logic needed for having multiple deputy bots and one chief bot + clippy + fmtmsg_refactor
parent
0796f0be21
commit
0baf273237
|
@ -321,6 +321,7 @@ checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
|
|||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-executor",
|
||||
"futures-io",
|
||||
"futures-sink",
|
||||
"futures-task",
|
||||
|
@ -343,12 +344,34 @@ version = "0.3.21"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
|
||||
|
||||
[[package]]
|
||||
name = "futures-executor"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-task",
|
||||
"futures-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-io"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
|
||||
|
||||
[[package]]
|
||||
name = "futures-macro"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-sink"
|
||||
version = "0.3.21"
|
||||
|
@ -370,6 +393,7 @@ dependencies = [
|
|||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"futures-macro",
|
||||
"futures-sink",
|
||||
"futures-task",
|
||||
"memchr",
|
||||
|
@ -1750,6 +1774,7 @@ version = "0.2.0"
|
|||
dependencies = [
|
||||
"chrono",
|
||||
"config",
|
||||
"futures",
|
||||
"rand 0.8.5",
|
||||
"regex",
|
||||
"serde",
|
||||
|
|
|
@ -13,6 +13,7 @@ serde = "1.0.136"
|
|||
rand = "0.8.5"
|
||||
toml = "0.5.8"
|
||||
regex = "1.5.5"
|
||||
futures = "0.3.21"
|
||||
|
||||
[dependencies.serenity]
|
||||
version = "0.10.10"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use serenity::client::Context;
|
||||
use serenity::framework::standard::Args;
|
||||
use serenity::http::AttachmentType;
|
||||
use serenity::model::channel::{PermissionOverwrite, PermissionOverwriteType};
|
||||
use serenity::model::channel::{Message, PermissionOverwrite, PermissionOverwriteType};
|
||||
use serenity::model::guild::{Guild, Member};
|
||||
use serenity::model::id::{ChannelId, UserId};
|
||||
use serenity::model::Permissions;
|
||||
|
@ -13,6 +13,7 @@ use crate::game::global_data::GlobalData;
|
|||
use crate::game::player_data::PlayerData;
|
||||
use crate::game::MessageSource;
|
||||
use crate::{error, game};
|
||||
use serenity::prelude::SerenityError;
|
||||
|
||||
pub async fn send_msg_to_player_channels(
|
||||
ctx: &Context,
|
||||
|
@ -23,20 +24,25 @@ pub async fn send_msg_to_player_channels(
|
|||
attachment: Option<Vec<AttachmentType<'_>>>,
|
||||
pin: bool,
|
||||
) -> error::Result<()> {
|
||||
for player_data in &global_data.game_state_mut()?.player_data {
|
||||
let msg_tasks = global_data
|
||||
.game_state_mut()?
|
||||
.player_data
|
||||
.iter()
|
||||
.filter(|player_data| {
|
||||
if let MessageSource::Player(channel_id) = msg_source {
|
||||
if channel_id == player_data.channel {
|
||||
continue;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
true
|
||||
})
|
||||
.map(|player_data| {
|
||||
let channel = guild
|
||||
.channels
|
||||
.get(&ChannelId::from(player_data.channel))
|
||||
.unwrap();
|
||||
|
||||
let msg = channel
|
||||
.send_message(&ctx.http, |m| {
|
||||
channel.send_message(&ctx.http, |m| {
|
||||
m.content(&msg);
|
||||
|
||||
if let Some(attachment) = attachment.clone() {
|
||||
|
@ -45,12 +51,24 @@ pub async fn send_msg_to_player_channels(
|
|||
|
||||
m
|
||||
})
|
||||
.await?;
|
||||
});
|
||||
|
||||
let msgs: Result<Vec<Message>, SerenityError> = futures::future::join_all(msg_tasks)
|
||||
.await
|
||||
.into_iter()
|
||||
.collect();
|
||||
|
||||
let msgs = msgs?;
|
||||
|
||||
if pin {
|
||||
// pin system messages
|
||||
msg.pin(&ctx.http).await?;
|
||||
}
|
||||
let pin_tasks = msgs.iter().map(|msg| msg.pin(&ctx.http));
|
||||
|
||||
let pins: Result<(), SerenityError> = futures::future::join_all(pin_tasks)
|
||||
.await
|
||||
.into_iter()
|
||||
.collect();
|
||||
|
||||
pins?;
|
||||
}
|
||||
|
||||
let host_channel = guild
|
||||
|
|
Loading…
Reference in New Issue