From 7fe65bc3973e8bc351540ca015ec7910cbeec785 Mon Sep 17 00:00:00 2001 From: mii Date: Fri, 12 Aug 2022 23:07:20 +0900 Subject: [PATCH] add validator --- Cargo.toml | 1 + src/commands/stop.rs | 2 +- src/events/voice_state_update.rs | 16 ++++++++++++++++ src/implement/message.rs | 9 +++++---- src/implement/voice_move_state.rs | 1 + src/tts/mod.rs | 3 ++- src/tts/validator.rs | 6 ++++++ 7 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 src/tts/validator.rs diff --git a/Cargo.toml b/Cargo.toml index cc9d110..7253fd9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ reqwest = { version = "0.11", features = ["json"] } base64 = "0.13" async-trait = "0.1.57" redis = "*" +regex = "1" [dependencies.uuid] version = "0.8" diff --git a/src/commands/stop.rs b/src/commands/stop.rs index 2a50ffc..35be392 100644 --- a/src/commands/stop.rs +++ b/src/commands/stop.rs @@ -58,7 +58,7 @@ pub async fn stop_command(ctx: &Context, command: &ApplicationCommandInteraction storage.remove(&guild.id); } - let _handler = manager.leave(guild.id.0).await; + let _handler = manager.remove(guild.id.0).await; command.create_interaction_response(&ctx.http, |f| { f.interaction_response_data(|d| { diff --git a/src/events/voice_state_update.rs b/src/events/voice_state_update.rs index 4b06859..c269a13 100644 --- a/src/events/voice_state_update.rs +++ b/src/events/voice_state_update.rs @@ -36,5 +36,21 @@ pub async fn voice_state_update( message }, &ctx).await; } + + let storage_lock = { + let data_read = ctx.data.read().await; + data_read.get::().expect("Cannot get TTSStorage").clone() + }; + + { + let mut storage = storage_lock.write().await; + storage.remove(&guild_id); + } + + let manager = songbird::get(&ctx).await.expect("Cannot get songbird client.").clone(); + + if voice_move_state == VoiceMoveState::LEAVE { + manager.remove(guild_id.0).await.unwrap(); + } } } \ No newline at end of file diff --git a/src/implement/message.rs b/src/implement/message.rs index 7f9f22f..cbe9266 100644 --- a/src/implement/message.rs +++ b/src/implement/message.rs @@ -11,16 +11,17 @@ use crate::{ tts_type::TTSType, gcp_tts::structs::{ audio_config::AudioConfig, synthesis_input::SynthesisInput, synthesize_request::SynthesizeRequest - } + }, validator }, }; #[async_trait] impl TTSMessage for Message { async fn parse(&self, instance: &mut TTSInstance, _: &Context) -> String { + let text = validator::remove_url(self.content.clone()); let res = if let Some(before_message) = &instance.before_message { if before_message.author.id == self.author.id { - self.content.clone() + text.clone() } else { let member = self.member.clone(); let name = if let Some(member) = member { @@ -28,7 +29,7 @@ impl TTSMessage for Message { } else { self.author.name.clone() }; - format!("{} さんの発言{}", name, self.content) + format!("{} さんの発言{}", name, text) } } else { let member = self.member.clone(); @@ -37,7 +38,7 @@ impl TTSMessage for Message { } else { self.author.name.clone() }; - format!("{} さんの発言{}", name, self.content) + format!("{} さんの発言{}", name, text) }; instance.before_message = Some(self.clone()); diff --git a/src/implement/voice_move_state.rs b/src/implement/voice_move_state.rs index 90277ca..87cdb5a 100644 --- a/src/implement/voice_move_state.rs +++ b/src/implement/voice_move_state.rs @@ -4,6 +4,7 @@ pub trait VoiceMoveStateTrait { fn move_state(&self, old: &Option, target_channel: ChannelId) -> VoiceMoveState; } +#[derive(Clone, Copy, Debug, PartialEq)] pub enum VoiceMoveState { JOIN, LEAVE, diff --git a/src/tts/mod.rs b/src/tts/mod.rs index 1c1e135..8199dc4 100644 --- a/src/tts/mod.rs +++ b/src/tts/mod.rs @@ -2,4 +2,5 @@ pub mod gcp_tts; pub mod voicevox; pub mod message; pub mod tts_type; -pub mod instance; \ No newline at end of file +pub mod instance; +pub mod validator; \ No newline at end of file diff --git a/src/tts/validator.rs b/src/tts/validator.rs new file mode 100644 index 0000000..8e78807 --- /dev/null +++ b/src/tts/validator.rs @@ -0,0 +1,6 @@ +use regex::Regex; + +pub fn remove_url(text: String) -> String { + let url_regex = Regex::new(r"(http://|https://){1}[\w\.\-/:\#\?=\&;%\~\+]+").unwrap(); + url_regex.replace_all(&text, " URL ").to_string() +}