add server configs

This commit is contained in:
mii443
2025-05-24 23:44:59 +09:00
parent 599b7fb0d1
commit e606b29f81
5 changed files with 197 additions and 24 deletions

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![
CreateSelectMenu::new( CreateActionRow::SelectMenu(
"SET_AUTOSTART_CHANNEL", CreateSelectMenu::new(
CreateSelectMenuKind::String { options }, "SET_AUTOSTART_CHANNEL",
CreateSelectMenuKind::String { options },
)
.min_values(0)
.max_values(1),
),
CreateActionRow::Buttons(vec![CreateButton::new(
"TTS_CONFIG_SERVER_BACK",
) )
.min_values(0) .label("← サーバー設定に戻る")
.max_values(1), .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,32 +544,64 @@ impl EventHandler for Handler {
CreateInteractionResponseMessage::new() CreateInteractionResponseMessage::new()
.content("サーバー設定") .content("サーバー設定")
.components(vec![CreateActionRow::Buttons(vec![ .components(vec![CreateActionRow::Buttons(vec![
CreateButton::new( CreateButton::new("TTS_CONFIG_SERVER_DICTIONARY")
"TTS_CONFIG_SERVER_ADD_DICTIONARY_BUTTON", .label("辞書管理")
) .style(ButtonStyle::Primary),
.label("辞書を追加")
.style(ButtonStyle::Primary),
CreateButton::new(
"TTS_CONFIG_SERVER_REMOVE_DICTIONARY_BUTTON",
)
.label("辞書を削除")
.style(ButtonStyle::Danger),
CreateButton::new(
"TTS_CONFIG_SERVER_SHOW_DICTIONARY_BUTTON",
)
.label("辞書一覧")
.style(ButtonStyle::Primary),
CreateButton::new( CreateButton::new(
"TTS_CONFIG_SERVER_SET_AUTOSTART_CHANNEL", "TTS_CONFIG_SERVER_SET_AUTOSTART_CHANNEL",
) )
.label("自動参加チャンネル") .label("自動参加チャンネル")
.style(ButtonStyle::Primary), .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
.unwrap(); .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",
)
.label("辞書を追加")
.style(ButtonStyle::Primary),
CreateButton::new(
"TTS_CONFIG_SERVER_REMOVE_DICTIONARY_BUTTON",
)
.label("辞書を削除")
.style(ButtonStyle::Danger),
CreateButton::new(
"TTS_CONFIG_SERVER_SHOW_DICTIONARY_BUTTON",
)
.label("辞書一覧")
.style(ButtonStyle::Primary),
]),
CreateActionRow::Buttons(vec![CreateButton::new(
"TTS_CONFIG_SERVER_BACK",
)
.label("← サーバー設定に戻る")
.style(ButtonStyle::Secondary)]),
]),
),
)
.await
.unwrap();
}
_ => {} _ => {}
} }
match message_component.data.kind { match message_component.data.kind {

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()
}; };
format!("{}さんの発言<break time=\"200ms\"/>{}", name, text) if config.read_username.unwrap_or(true) {
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()
}; };
format!("{}さんの発言<break time=\"200ms\"/>{}", name, text)
if config.read_username.unwrap_or(true) {
format!("{}さんの発言<break time=\"200ms\"/>{}", name, text)
} else {
format!("{}", text)
}
}; };
if self.attachments.len() > 0 { if self.attachments.len() > 0 {