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]
name = "ncb-tts-r2"
version = "1.10.1"
version = "1.11.2"
edition = "2021"
# 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:
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:
- NCB_TOKEN=YOUR_BOT_TOKEN
- NCB_APP_ID=YOUR_BOT_ID

View File

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

View File

@ -10,4 +10,6 @@ pub struct DictionaryOnlyServerConfig {
pub struct ServerConfig {
pub dictionary: Dictionary,
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() {
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" => {
let i = usize::from_str_radix(
&match message_component.data.kind {
@ -399,14 +486,51 @@ impl EventHandler for Handler {
CreateInteractionResponse::UpdateMessage(
CreateInteractionResponseMessage::new()
.content("自動参加チャンネル設定")
.components(vec![CreateActionRow::SelectMenu(
.components(vec![
CreateActionRow::SelectMenu(
CreateSelectMenu::new(
"SET_AUTOSTART_CHANNEL",
CreateSelectMenuKind::String { options },
)
.min_values(0)
.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
@ -420,6 +544,37 @@ impl EventHandler for Handler {
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
.unwrap();
}
"TTS_CONFIG_SERVER_DICTIONARY" => {
message_component
.create_response(
&ctx.http,
CreateInteractionResponse::UpdateMessage(
CreateInteractionResponseMessage::new()
.content("辞書管理")
.components(vec![
CreateActionRow::Buttons(vec![
CreateButton::new(
"TTS_CONFIG_SERVER_ADD_DICTIONARY_BUTTON",
)
@ -435,12 +590,13 @@ impl EventHandler for Handler {
)
.label("辞書一覧")
.style(ButtonStyle::Primary),
CreateButton::new(
"TTS_CONFIG_SERVER_SET_AUTOSTART_CHANNEL",
]),
CreateActionRow::Buttons(vec![CreateButton::new(
"TTS_CONFIG_SERVER_BACK",
)
.label("自動参加チャンネル")
.style(ButtonStyle::Primary),
])]),
.label("← サーバー設定に戻る")
.style(ButtonStyle::Secondary)]),
]),
),
)
.await

View File

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

View File

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