add validator

This commit is contained in:
mii
2022-08-12 23:07:20 +09:00
parent 51c39036c6
commit 7fe65bc397
7 changed files with 32 additions and 6 deletions

View File

@ -14,6 +14,7 @@ reqwest = { version = "0.11", features = ["json"] }
base64 = "0.13" base64 = "0.13"
async-trait = "0.1.57" async-trait = "0.1.57"
redis = "*" redis = "*"
regex = "1"
[dependencies.uuid] [dependencies.uuid]
version = "0.8" version = "0.8"

View File

@ -58,7 +58,7 @@ pub async fn stop_command(ctx: &Context, command: &ApplicationCommandInteraction
storage.remove(&guild.id); 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| { command.create_interaction_response(&ctx.http, |f| {
f.interaction_response_data(|d| { f.interaction_response_data(|d| {

View File

@ -36,5 +36,21 @@ pub async fn voice_state_update(
message message
}, &ctx).await; }, &ctx).await;
} }
let storage_lock = {
let data_read = ctx.data.read().await;
data_read.get::<TTSData>().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();
}
} }
} }

View File

@ -11,16 +11,17 @@ use crate::{
tts_type::TTSType, tts_type::TTSType,
gcp_tts::structs::{ gcp_tts::structs::{
audio_config::AudioConfig, synthesis_input::SynthesisInput, synthesize_request::SynthesizeRequest audio_config::AudioConfig, synthesis_input::SynthesisInput, synthesize_request::SynthesizeRequest
} }, validator
}, },
}; };
#[async_trait] #[async_trait]
impl TTSMessage for Message { impl TTSMessage for Message {
async fn parse(&self, instance: &mut TTSInstance, _: &Context) -> String { 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 { let res = if let Some(before_message) = &instance.before_message {
if before_message.author.id == self.author.id { if before_message.author.id == self.author.id {
self.content.clone() text.clone()
} else { } else {
let member = self.member.clone(); let member = self.member.clone();
let name = if let Some(member) = member { let name = if let Some(member) = member {
@ -28,7 +29,7 @@ impl TTSMessage for Message {
} else { } else {
self.author.name.clone() self.author.name.clone()
}; };
format!("{} さんの発言<break time=\"200ms\"/>{}", name, self.content) format!("{} さんの発言<break time=\"200ms\"/>{}", name, text)
} }
} else { } else {
let member = self.member.clone(); let member = self.member.clone();
@ -37,7 +38,7 @@ impl TTSMessage for Message {
} else { } else {
self.author.name.clone() self.author.name.clone()
}; };
format!("{} さんの発言<break time=\"200ms\"/>{}", name, self.content) format!("{} さんの発言<break time=\"200ms\"/>{}", name, text)
}; };
instance.before_message = Some(self.clone()); instance.before_message = Some(self.clone());

View File

@ -4,6 +4,7 @@ pub trait VoiceMoveStateTrait {
fn move_state(&self, old: &Option<VoiceState>, target_channel: ChannelId) -> VoiceMoveState; fn move_state(&self, old: &Option<VoiceState>, target_channel: ChannelId) -> VoiceMoveState;
} }
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum VoiceMoveState { pub enum VoiceMoveState {
JOIN, JOIN,
LEAVE, LEAVE,

View File

@ -2,4 +2,5 @@ pub mod gcp_tts;
pub mod voicevox; pub mod voicevox;
pub mod message; pub mod message;
pub mod tts_type; pub mod tts_type;
pub mod instance; pub mod instance;
pub mod validator;

6
src/tts/validator.rs Normal file
View File

@ -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()
}