update t v1.11.2

This commit is contained in:
mii443
2025-05-25 22:27:42 +09:00
parent 65db668e2a
commit 248c88a7a2
7 changed files with 199 additions and 26 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "ncb-tts-r2" name = "ncb-tts-r2"
version = "1.10.1" version = "1.11.2"
edition = "2021" edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View File

@ -3,7 +3,7 @@ version: '3'
services: services:
ncb-tts-r2: ncb-tts-r2:
container_name: ncb-tts-r2 container_name: ncb-tts-r2
image: ghcr.io/mii443/ncb-tts-r2:1.10.1 image: ghcr.io/mii443/ncb-tts-r2:1.11.2
environment: environment:
- NCB_TOKEN=YOUR_BOT_TOKEN - NCB_TOKEN=YOUR_BOT_TOKEN
- NCB_APP_ID=YOUR_BOT_ID - NCB_APP_ID=YOUR_BOT_ID

View File

@ -98,6 +98,8 @@ impl Database {
let config = ServerConfig { let config = ServerConfig {
dictionary: Dictionary::new(), dictionary: Dictionary::new(),
autostart_channel_id: None, autostart_channel_id: None,
voice_state_announce: Some(true),
read_username: Some(true),
}; };
self.set_server_config(server_id, config).await self.set_server_config(server_id, config).await

View File

@ -10,4 +10,6 @@ pub struct DictionaryOnlyServerConfig {
pub struct ServerConfig { pub struct ServerConfig {
pub dictionary: Dictionary, pub dictionary: Dictionary,
pub autostart_channel_id: Option<u64>, pub autostart_channel_id: Option<u64>,
pub voice_state_announce: Option<bool>,
pub read_username: Option<bool>,
} }

View File

@ -122,6 +122,93 @@ impl EventHandler for Handler {
} }
if let Some(message_component) = interaction.message_component() { if let Some(message_component) = interaction.message_component() {
match &*message_component.data.custom_id { match &*message_component.data.custom_id {
"TTS_CONFIG_SERVER_SET_VOICE_STATE_ANNOUNCE" => {
let data_read = ctx.data.read().await;
let mut config = {
let database = data_read
.get::<DatabaseClientData>()
.expect("Cannot get DatabaseClientData")
.clone();
database
.get_server_config_or_default(message_component.guild_id.unwrap().get())
.await
.unwrap()
.unwrap()
};
config.voice_state_announce =
Some(!config.voice_state_announce.unwrap_or(true));
let state = config.voice_state_announce.unwrap_or(true);
{
let database = data_read
.get::<DatabaseClientData>()
.expect("Cannot get DatabaseClientData")
.clone();
database
.set_server_config(message_component.guild_id.unwrap().get(), config)
.await
.unwrap();
}
message_component
.create_response(
&ctx.http,
CreateInteractionResponse::UpdateMessage(
CreateInteractionResponseMessage::new().content(format!(
"入退出アナウンス通知を{}へ切り替えました。",
if state { "`有効`" } else { "`無効`" }
)),
),
)
.await
.unwrap();
}
"TTS_CONFIG_SERVER_SET_READ_USERNAME" => {
let data_read = ctx.data.read().await;
let mut config = {
let database = data_read
.get::<DatabaseClientData>()
.expect("Cannot get DatabaseClientData")
.clone();
database
.get_server_config_or_default(message_component.guild_id.unwrap().get())
.await
.unwrap()
.unwrap()
};
config.read_username = Some(!config.read_username.unwrap_or(true));
let state = config.read_username.unwrap_or(true);
{
let database = data_read
.get::<DatabaseClientData>()
.expect("Cannot get DatabaseClientData")
.clone();
database
.set_server_config(message_component.guild_id.unwrap().get(), config)
.await
.unwrap();
}
message_component
.create_response(
&ctx.http,
CreateInteractionResponse::UpdateMessage(
CreateInteractionResponseMessage::new().content(format!(
"ユーザー名読み上げを{}へ切り替えました。",
if state { "`有効`" } else { "`無効`" }
)),
),
)
.await
.unwrap();
}
"TTS_CONFIG_SERVER_REMOVE_DICTIONARY_MENU" => { "TTS_CONFIG_SERVER_REMOVE_DICTIONARY_MENU" => {
let i = usize::from_str_radix( let i = usize::from_str_radix(
&match message_component.data.kind { &match message_component.data.kind {
@ -399,14 +486,51 @@ impl EventHandler for Handler {
CreateInteractionResponse::UpdateMessage( CreateInteractionResponse::UpdateMessage(
CreateInteractionResponseMessage::new() CreateInteractionResponseMessage::new()
.content("自動参加チャンネル設定") .content("自動参加チャンネル設定")
.components(vec![CreateActionRow::SelectMenu( .components(vec![
CreateActionRow::SelectMenu(
CreateSelectMenu::new( CreateSelectMenu::new(
"SET_AUTOSTART_CHANNEL", "SET_AUTOSTART_CHANNEL",
CreateSelectMenuKind::String { options }, CreateSelectMenuKind::String { options },
) )
.min_values(0) .min_values(0)
.max_values(1), .max_values(1),
)]), ),
CreateActionRow::Buttons(vec![CreateButton::new(
"TTS_CONFIG_SERVER_BACK",
)
.label("← サーバー設定に戻る")
.style(ButtonStyle::Secondary)]),
]),
),
)
.await
.unwrap();
}
"TTS_CONFIG_SERVER_BACK" => {
message_component
.create_response(
&ctx.http,
CreateInteractionResponse::UpdateMessage(
CreateInteractionResponseMessage::new()
.content("サーバー設定")
.components(vec![CreateActionRow::Buttons(vec![
CreateButton::new("TTS_CONFIG_SERVER_DICTIONARY")
.label("辞書管理")
.style(ButtonStyle::Primary),
CreateButton::new(
"TTS_CONFIG_SERVER_SET_AUTOSTART_CHANNEL",
)
.label("自動参加チャンネル")
.style(ButtonStyle::Primary),
CreateButton::new(
"TTS_CONFIG_SERVER_SET_VOICE_STATE_ANNOUNCE",
)
.label("入退出アナウンス通知切り替え")
.style(ButtonStyle::Primary),
CreateButton::new("TTS_CONFIG_SERVER_SET_READ_USERNAME")
.label("ユーザー名読み上げ切り替え")
.style(ButtonStyle::Primary),
])]),
), ),
) )
.await .await
@ -420,6 +544,37 @@ impl EventHandler for Handler {
CreateInteractionResponseMessage::new() CreateInteractionResponseMessage::new()
.content("サーバー設定") .content("サーバー設定")
.components(vec![CreateActionRow::Buttons(vec![ .components(vec![CreateActionRow::Buttons(vec![
CreateButton::new("TTS_CONFIG_SERVER_DICTIONARY")
.label("辞書管理")
.style(ButtonStyle::Primary),
CreateButton::new(
"TTS_CONFIG_SERVER_SET_AUTOSTART_CHANNEL",
)
.label("自動参加チャンネル")
.style(ButtonStyle::Primary),
CreateButton::new(
"TTS_CONFIG_SERVER_SET_VOICE_STATE_ANNOUNCE",
)
.label("入退出アナウンス通知切り替え")
.style(ButtonStyle::Primary),
CreateButton::new("TTS_CONFIG_SERVER_SET_READ_USERNAME")
.label("ユーザー名読み上げ切り替え")
.style(ButtonStyle::Primary),
])]),
),
)
.await
.unwrap();
}
"TTS_CONFIG_SERVER_DICTIONARY" => {
message_component
.create_response(
&ctx.http,
CreateInteractionResponse::UpdateMessage(
CreateInteractionResponseMessage::new()
.content("辞書管理")
.components(vec![
CreateActionRow::Buttons(vec![
CreateButton::new( CreateButton::new(
"TTS_CONFIG_SERVER_ADD_DICTIONARY_BUTTON", "TTS_CONFIG_SERVER_ADD_DICTIONARY_BUTTON",
) )
@ -435,12 +590,13 @@ impl EventHandler for Handler {
) )
.label("辞書一覧") .label("辞書一覧")
.style(ButtonStyle::Primary), .style(ButtonStyle::Primary),
CreateButton::new( ]),
"TTS_CONFIG_SERVER_SET_AUTOSTART_CHANNEL", CreateActionRow::Buttons(vec![CreateButton::new(
"TTS_CONFIG_SERVER_BACK",
) )
.label("自動参加チャンネル") .label("← サーバー設定に戻る")
.style(ButtonStyle::Primary), .style(ButtonStyle::Secondary)]),
])]), ]),
), ),
) )
.await .await

View File

@ -48,6 +48,10 @@ pub async fn voice_state_update(ctx: Context, old: Option<VoiceState>, new: Voic
.unwrap() .unwrap()
}; };
if !config.voice_state_announce.unwrap_or(true) {
return;
}
{ {
let mut storage = storage_lock.write().await; let mut storage = storage_lock.write().await;
if !storage.contains_key(&guild_id) { if !storage.contains_key(&guild_id) {

View File

@ -57,7 +57,11 @@ impl TTSMessage for Message {
} else { } else {
self.author.read_name() self.author.read_name()
}; };
if config.read_username.unwrap_or(true) {
format!("{}さんの発言<break time=\"200ms\"/>{}", name, text) format!("{}さんの発言<break time=\"200ms\"/>{}", name, text)
} else {
format!("{}", text)
}
} }
} else { } else {
let member = self.member.clone(); let member = self.member.clone();
@ -71,7 +75,12 @@ impl TTSMessage for Message {
} else { } else {
self.author.read_name() self.author.read_name()
}; };
if config.read_username.unwrap_or(true) {
format!("{}さんの発言<break time=\"200ms\"/>{}", name, text) format!("{}さんの発言<break time=\"200ms\"/>{}", name, text)
} else {
format!("{}", text)
}
}; };
if self.attachments.len() > 0 { if self.attachments.len() > 0 {