diff --git a/bot/callbacks/settings.py b/bot/callbacks/settings.py index 79004ed..97a4b67 100644 --- a/bot/callbacks/settings.py +++ b/bot/callbacks/settings.py @@ -3,10 +3,10 @@ from aiogram.types import ( CallbackQuery ) -from bot.factories.open_setting import OpenSettingCallback +from bot.factories.open_setting import OpenSettingCallback, SettingChoiceCallback from bot.keyboards.inline.setting import get_setting_kb -from bot.modules.settings import settings_strings +from bot.modules.settings import settings_strings, UserSettings router = Router() @@ -25,3 +25,20 @@ async def on_settings( str(callback_query.from_user.id) ) ) + + +@router.callback_query(SettingChoiceCallback.filter()) +async def on_change_setting( + callback_query: CallbackQuery, + callback_data: SettingChoiceCallback, + bot: Bot +): + UserSettings(callback_query.from_user.id)[callback_data.s_id] = callback_data.choice + await bot.edit_message_text( + inline_message_id=callback_query.inline_message_id, + text=settings_strings[callback_data.s_id].description, + reply_markup=get_setting_kb( + callback_data.s_id, + str(callback_query.from_user.id) + ) + ) diff --git a/bot/factories/open_setting.py b/bot/factories/open_setting.py index 0b3f8d6..9793c93 100644 --- a/bot/factories/open_setting.py +++ b/bot/factories/open_setting.py @@ -6,4 +6,5 @@ class OpenSettingCallback(CallbackData, prefix='setting'): class SettingChoiceCallback(CallbackData, prefix='s_choice'): + s_id: str choice: str diff --git a/bot/keyboards/inline/setting.py b/bot/keyboards/inline/setting.py index bf57b54..fc5a729 100644 --- a/bot/keyboards/inline/setting.py +++ b/bot/keyboards/inline/setting.py @@ -15,6 +15,7 @@ def get_setting_kb(s_id: str, user_id: str) -> InlineKeyboardMarkup: '✅ ' if setting.value == choice else '' ) + setting.choices[choice], callback_data=SettingChoiceCallback( + s_id=s_id, choice=choice, ).pack() ) diff --git a/bot/modules/settings/model.py b/bot/modules/settings/model.py index aa4c915..4fb09eb 100644 --- a/bot/modules/settings/model.py +++ b/bot/modules/settings/model.py @@ -34,9 +34,12 @@ settings_strings: dict[str, Setting] = { @dataclass class UserSettings: - user_id: str + user_id: str | int def __post_init__(self): + if type(self.user_id) is int: + self.user_id = str(self.user_id) + if db.settings.get(self.user_id) is None: db.settings[self.user_id] = dict( (setting, list(settings_strings[setting].choices)[0]) for setting in @@ -51,4 +54,6 @@ class UserSettings: return s def __setitem__(self, key, value): - db.settings[self.user_id][key] = value + h = db.settings[self.user_id] + h[key] = value + db.settings[self.user_id] = h