From bacab9ee3222776c64741d9f4e2714978ceafb7b Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Mon, 16 Feb 2026 22:20:47 +0100 Subject: [PATCH] Add back button for language settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add LangSettingsBack callback variant and serialization (Display/FromStr). Add a "← Назад" button to the language keyboard and handle its callback to return to the main settings. Make the keyboard vector mutable and adjust match arms to use references and clone/remove as needed. --- .../modules/settings/callback_data.rs | 6 ++++ src/bots/approved_bot/modules/settings/mod.rs | 28 +++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/bots/approved_bot/modules/settings/callback_data.rs b/src/bots/approved_bot/modules/settings/callback_data.rs index dfb5bc4..ce743ed 100644 --- a/src/bots/approved_bot/modules/settings/callback_data.rs +++ b/src/bots/approved_bot/modules/settings/callback_data.rs @@ -20,6 +20,8 @@ pub enum SettingsCallbackData { }, /// Return from default search submenu to main settings DefaultSearchBack, + /// Return from languages submenu to main settings + LangSettingsBack, } impl FromStr for SettingsCallbackData { @@ -35,6 +37,9 @@ impl FromStr for SettingsCallbackData { if s == "defsearch_back" { return Ok(SettingsCallbackData::DefaultSearchBack); } + if s == "lang_settings_back" { + return Ok(SettingsCallbackData::LangSettingsBack); + } if let Some(value) = s.strip_prefix("defsearch_") { return Ok(SettingsCallbackData::DefaultSearch { value: value.to_string().into(), @@ -69,6 +74,7 @@ impl Display for SettingsCallbackData { SettingsCallbackData::DefaultSearchMenu => write!(f, "defsearch"), SettingsCallbackData::DefaultSearch { value } => write!(f, "defsearch_{value}"), SettingsCallbackData::DefaultSearchBack => write!(f, "defsearch_back"), + SettingsCallbackData::LangSettingsBack => write!(f, "lang_settings_back"), } } } diff --git a/src/bots/approved_bot/modules/settings/mod.rs b/src/bots/approved_bot/modules/settings/mod.rs index 5165781..ab58560 100644 --- a/src/bots/approved_bot/modules/settings/mod.rs +++ b/src/bots/approved_bot/modules/settings/mod.rs @@ -57,7 +57,7 @@ fn get_lang_keyboard( all_langs: Vec, allowed_langs: HashSet, ) -> InlineKeyboardMarkup { - let buttons = all_langs + let mut buttons: Vec> = all_langs .into_iter() .map(|lang| { let (emoji, callback_data) = match allowed_langs.contains(&lang.code) { @@ -78,6 +78,13 @@ fn get_lang_keyboard( }) .collect(); + buttons.push(vec![InlineKeyboardButton { + text: "← Назад".to_string(), + kind: teloxide::types::InlineKeyboardButtonKind::CallbackData( + SettingsCallbackData::LangSettingsBack.to_string(), + ), + }]); + InlineKeyboardMarkup { inline_keyboard: buttons, } @@ -180,6 +187,14 @@ async fn settings_callback_handler( bot.answer_callback_query(cq.id).send().await?; return Ok(()); } + SettingsCallbackData::LangSettingsBack => { + bot.edit_message_text(message.chat().id, message.id(), "Настройки") + .reply_markup(get_main_settings_keyboard()) + .send() + .await?; + bot.answer_callback_query(cq.id).send().await?; + return Ok(()); + } SettingsCallbackData::DefaultSearch { value } => { let current = get_user_settings(user.id).await.ok().flatten(); let allowed_langs: SmallVec<[SmartString; 3]> = match current { @@ -233,15 +248,18 @@ async fn settings_callback_handler( allowed_langs_set.insert(v); }); - match callback_data { + match &callback_data { SettingsCallbackData::Settings => (), SettingsCallbackData::On { code } => { - allowed_langs_set.insert(code); + allowed_langs_set.insert(code.clone()); } SettingsCallbackData::Off { code } => { - allowed_langs_set.remove(&code); + allowed_langs_set.remove(code); } - _ => {} + SettingsCallbackData::LangSettingsBack + | SettingsCallbackData::DefaultSearchBack + | SettingsCallbackData::DefaultSearchMenu + | SettingsCallbackData::DefaultSearch { .. } => {} }; if allowed_langs_set.is_empty() {