diff --git a/Cargo.lock b/Cargo.lock index 6482b8c..22f8041 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -211,9 +211,9 @@ dependencies = [ [[package]] name = "command_attr" -version = "0.3.0-rc.1" +version = "0.3.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c538daab2daaf13de61cea91648a62bb11d267ef629f707d5fe3dd080043ab4d" +checksum = "6745770e89e5e4583424362f15f91c8bb0ef54387d209af30e0446d08909ae7d" dependencies = [ "proc-macro2", "quote", @@ -1312,9 +1312,9 @@ dependencies = [ [[package]] name = "serenity" -version = "0.9.0-rc.1" +version = "0.9.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e935a7f3f4752257183ee1f3553b10ea5b514a55de0e536dca7f3742b97d18" +checksum = "d179c8684cccfc95898c4a97ba3cb8787dd8db5e3f8cb645efd129ddb1a7dd7f" dependencies = [ "async-trait", "async-tungstenite", @@ -1325,12 +1325,13 @@ dependencies = [ "command_attr", "flate2", "futures", - "log", "reqwest", "serde", "serde_json", "static_assertions", "tokio", + "tracing", + "tracing-futures", "typemap_rev", "url", "uwl", @@ -1641,9 +1642,21 @@ checksum = "f0aae59226cf195d8e74d4b34beae1859257efb4e5fed3f147d2dc2c7d372178" dependencies = [ "cfg-if", "log", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tracing-core" version = "0.1.12" @@ -1653,6 +1666,16 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "tracing-futures" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" +dependencies = [ + "pin-project", + "tracing", +] + [[package]] name = "try-lock" version = "0.2.3" diff --git a/Cargo.toml b/Cargo.toml index 9293c73..efee83b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ authors = ["jellywx "] edition = "2018" [dependencies] -serenity = { version = "0.9.0-rc.1", features = ["collector"] } +serenity = { version = "0.9.0-rc.2", features = ["collector"] } dotenv = "0.15" tokio = { version = "0.2.19", features = ["process"] } reqwest = "0.10.6" diff --git a/src/commands/moderation_cmds.rs b/src/commands/moderation_cmds.rs index ccdb303..5ef2855 100644 --- a/src/commands/moderation_cmds.rs +++ b/src/commands/moderation_cmds.rs @@ -19,7 +19,6 @@ use regex::Regex; use chrono_tz::Tz; use crate::{ - consts::MAX_MESSAGE_LENGTH, models::{ ChannelData, UserData, @@ -27,6 +26,7 @@ use crate::{ }, SQLPool, FrameworkCtx, + framework::SendIterator, }; use std::iter; @@ -270,23 +270,15 @@ SELECT name, command FROM command_aliases WHERE guild_id = (SELECT id FROM guild .await .unwrap(); - let content = iter::once("Aliases:".to_string()).chain(aliases.iter().map(|row| format!("**{}**: `{}`", row.name, row.command))); + let content = iter::once("Aliases:".to_string()) + .chain( + aliases + .iter() + .map(|row| format!("**{}**: `{}`", row.name, row.command) + ) + ); - let mut current_content = String::new(); - - for line in content { - if current_content.len() + line.len() > MAX_MESSAGE_LENGTH { - let _ = msg.channel_id.say(&ctx, ¤t_content).await; - - current_content = line; - } - else { - current_content = format!("{}\n{}", current_content, line); - } - } - if !current_content.is_empty() { - let _ = msg.channel_id.say(&ctx, ¤t_content).await; - } + let _ = msg.channel_id.say_lines(&ctx, content).await; }, "remove" => { diff --git a/src/framework.rs b/src/framework.rs index b009e61..0bdbb65 100644 --- a/src/framework.rs +++ b/src/framework.rs @@ -1,6 +1,8 @@ use async_trait::async_trait; use serenity::{ + http::Http, + Result as SerenityResult, client::Context, framework::{ Framework, @@ -40,6 +42,8 @@ use crate::{ SQLPool, consts::PREFIX, }; +use serenity::model::id::ChannelId; +use crate::consts::MAX_MESSAGE_LENGTH; type CommandFn = for<'fut> fn(&'fut Context, &'fut Message, String) -> BoxFuture<'fut, CommandResult>; @@ -143,6 +147,34 @@ pub struct RegexFramework { ignore_bots: bool, } +#[async_trait] +pub trait SendIterator { + async fn say_lines(self, http: impl AsRef + Send + Sync + 'async_trait, content: impl Iterator + Send + 'async_trait) -> SerenityResult<()>; +} + +#[async_trait] +impl SendIterator for ChannelId { + async fn say_lines(self, http: impl AsRef + Send + Sync + 'async_trait, content: impl Iterator + Send + 'async_trait) -> SerenityResult<()> { + let mut current_content = String::new(); + + for line in content { + if current_content.len() + line.len() > MAX_MESSAGE_LENGTH { + self.say(&http, ¤t_content).await?; + + current_content = line; + } + else { + current_content = format!("{}\n{}", current_content, line); + } + } + if !current_content.is_empty() { + self.say(&http, ¤t_content).await?; + } + + Ok(()) + } +} + impl RegexFramework { pub fn new(client_id: u64) -> Self { Self {