diff --git a/bot.py b/bot.py index 0ee8fe7..a3887f5 100644 --- a/bot.py +++ b/bot.py @@ -555,7 +555,7 @@ class VKBotApplication: f"{listing}\n" "ℹ️ Чтобы время в списке отображалось верно у всех, каждому нужно один раз " "зайти сюда и указать свой часовой пояс.\n\n" - "Управляйте кнопками ниже: ➕ добавить • 🗑 удалить • ⏸/▶ пауза", + "Управляйте кнопками ниже: ➕ добавить • 🗑 удалить • ⏸/▶ пауза • 🌐 сменить часовой пояс", keyboard=get_reminders_admin_keyboard() ) @@ -749,6 +749,17 @@ class VKBotApplication: self.send_message(user_id, "⏸/▶ Какое напоминание переключить? Выберите:", keyboard=get_pick_keyboard(items)) return + elif text_lower in ["🌐 часовой пояс", "часовой пояс"]: + current = db.get_admin_tz_offset(user_id) + note = f" Сейчас: UTC{current:+d}." if current is not None else "" + db.update_user_state(user_id, "ADMIN_REMINDER_TZ_SETUP") + self.send_message( + user_id, + f"🌐 Выберите новый часовой пояс кнопкой ниже, либо введите смещение " + f"от UTC вручную (например, +3).{note}", + keyboard=get_timezone_keyboard() + ) + return elif text_lower.startswith("часовой пояс"): self._handle_set_timezone(user_id, text_clean) return diff --git a/keyboards.py b/keyboards.py index de07c48..f356443 100644 --- a/keyboards.py +++ b/keyboards.py @@ -209,6 +209,8 @@ def get_reminders_admin_keyboard() -> str: keyboard.add_line() keyboard.add_button("⏸/▶ Пауза", color=VkKeyboardColor.SECONDARY) keyboard.add_line() + keyboard.add_button("🌐 Часовой пояс", color=VkKeyboardColor.SECONDARY) + keyboard.add_line() keyboard.add_button("В админку ↩️", color=VkKeyboardColor.SECONDARY) return keyboard.get_keyboard() diff --git a/tests/test_flow.py b/tests/test_flow.py index 23d9251..8cbad2a 100644 --- a/tests/test_flow.py +++ b/tests/test_flow.py @@ -537,3 +537,20 @@ def test_timezone_change_command(app, monkeypatch): app.handle_message(admin, "часовой пояс много") assert bot.db.get_admin_tz_offset(admin) == -5 # невалидный ввод не поменял значение + + +def test_timezone_change_via_button(app, monkeypatch): + """Кнопка «🌐 Часовой пояс» открывает выбор заново, даже если пояс уже задан.""" + admin = 80011 + monkeypatch.setattr(bot.config, "ADMIN_IDS", [admin]) + bot.db.set_admin_tz_offset(admin, 3) + + app.handle_message(admin, "⏰ Напоминалки") + assert _state(admin) == "FREE_CHAT" # пояс уже есть — гейт не срабатывает + + app.handle_message(admin, "🌐 Часовой пояс") + assert _state(admin) == "ADMIN_REMINDER_TZ_SETUP" + + app.handle_message(admin, "Владивосток, UTC+10") + assert _state(admin) == "FREE_CHAT" + assert bot.db.get_admin_tz_offset(admin) == 10