mirror of
https://github.com/mii443/ncb-tts-r2.git
synced 2025-08-22 16:15:29 +00:00
add join message
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
use serenity::{client::{EventHandler, Context}, async_trait, model::{gateway::Ready, interactions::{Interaction, application_command::ApplicationCommandInteraction, InteractionApplicationCommandCallbackDataFlags}, id::{GuildId, UserId}, channel::Message, prelude::Member, voice::VoiceState}, framework::standard::macros::group};
|
||||
use crate::{data::TTSData, tts::instance::TTSInstance};
|
||||
use crate::{data::TTSData, tts::{instance::TTSInstance, message::AnnounceMessage}, implement::member_name::ReadName};
|
||||
|
||||
#[group]
|
||||
struct Test;
|
||||
@ -125,17 +125,39 @@ impl EventHandler for Handler {
|
||||
}
|
||||
if old_channel_id != new_channel_id {
|
||||
if instance.voice_channel == new_channel_id {
|
||||
message = Some(String::from(""));
|
||||
message = Some(format!("{} さんが通話に参加しました", new.member.unwrap().read_name()));
|
||||
}
|
||||
} else if old_channel_id == instance.voice_channel && new_channel_id != instance.voice_channel {
|
||||
message = Some(format!("{} さんが通話から退出しました", new.member.unwrap().read_name()));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
(Some(old_channel_id), None) => {
|
||||
if old_channel_id == instance.voice_channel {
|
||||
message = Some(format!("{} さんが通話から退出しました", new.member.unwrap().read_name()));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
(None, Some(new_channel_id)) => {
|
||||
if new_channel_id == instance.voice_channel {
|
||||
message = Some(format!("{} さんが通話に参加しました", new.member.unwrap().read_name()));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
None => {
|
||||
match new.channel_id {
|
||||
Some(channel_id) => {
|
||||
|
||||
if instance.voice_channel == channel_id {
|
||||
message = Some(format!("{} さんが通話に参加しました", new.member.unwrap().read_name()));
|
||||
}
|
||||
}
|
||||
None => {
|
||||
return;
|
||||
@ -144,10 +166,20 @@ impl EventHandler for Handler {
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(message) = message {
|
||||
instance.read(AnnounceMessage {
|
||||
message
|
||||
}, &ctx).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn message(&self, ctx: Context, message: Message) {
|
||||
|
||||
if message.author.bot {
|
||||
return;
|
||||
}
|
||||
|
||||
let guild_id = message.guild(&ctx.cache).await;
|
||||
|
||||
if let None = guild_id {
|
||||
|
11
src/implement/member_name.rs
Normal file
11
src/implement/member_name.rs
Normal file
@ -0,0 +1,11 @@
|
||||
use serenity::model::guild::Member;
|
||||
|
||||
pub trait ReadName {
|
||||
fn read_name(&self) -> String;
|
||||
}
|
||||
|
||||
impl ReadName for Member {
|
||||
fn read_name(&self) -> String {
|
||||
self.nick.clone().unwrap_or(self.user.name.clone())
|
||||
}
|
||||
}
|
@ -30,7 +30,13 @@ impl TTSMessage for Message {
|
||||
format!("<speak>{} さんの発言<break time=\"200ms\"/>{}</speak>", name, self.content)
|
||||
}
|
||||
} else {
|
||||
self.content.clone()
|
||||
let member = self.member.clone();
|
||||
let name = if let Some(member) = member {
|
||||
member.nick.unwrap_or(self.author.name.clone())
|
||||
} else {
|
||||
self.author.name.clone()
|
||||
};
|
||||
format!("<speak>{} さんの発言<break time=\"200ms\"/>{}</speak>", name, self.content)
|
||||
};
|
||||
|
||||
instance.before_message = Some(self.clone());
|
||||
|
@ -1 +1,2 @@
|
||||
pub mod message;
|
||||
pub mod message;
|
||||
pub mod member_name;
|
@ -36,10 +36,11 @@ pub struct AnnounceMessage {
|
||||
impl TTSMessage for AnnounceMessage {
|
||||
async fn parse(&self, instance: &mut TTSInstance, ctx: &Context) -> String {
|
||||
instance.before_message = None;
|
||||
self.message.clone()
|
||||
format!(r#"<speak>アナウンス<break time="200ms"/>{}</speak>"#, self.message)
|
||||
}
|
||||
|
||||
async fn synthesize(&self, instance: &mut TTSInstance, ctx: &Context) -> String {
|
||||
let text = self.parse(instance, ctx).await;
|
||||
let data_read = ctx.data.read().await;
|
||||
let storage = data_read.get::<TTSClientData>().expect("Cannot get TTSClientStorage").clone();
|
||||
let mut storage = storage.lock().await;
|
||||
@ -47,7 +48,7 @@ impl TTSMessage for AnnounceMessage {
|
||||
let audio = storage.synthesize(SynthesizeRequest {
|
||||
input: SynthesisInput {
|
||||
text: None,
|
||||
ssml: Some(self.message.clone())
|
||||
ssml: Some(text)
|
||||
},
|
||||
voice: VoiceSelectionParams {
|
||||
languageCode: String::from("ja-JP"),
|
||||
|
Reference in New Issue
Block a user