add join message

This commit is contained in:
mii
2022-08-09 00:25:09 +09:00
parent ecb37b01d8
commit a68a193483
5 changed files with 59 additions and 8 deletions

View File

@ -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 {

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

View File

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

View File

@ -1 +1,2 @@
pub mod message;
pub mod message;
pub mod member_name;

View File

@ -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"),