From 6ecbd7aa946db149642562567d44d0a32829de0c Mon Sep 17 00:00:00 2001 From: Kenik Date: Sat, 5 Sep 2026 15:22:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=BE=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=BA=D0=B8:=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BC=D0=B5=D0=BD=D1=8B=20=D1=87=D0=B0=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D1=8F=D1=81=D0=B0?= =?UTF-8?q?=20=D0=B2=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раньше сменить уже заданный пояс можно было только скрытой командой 'часовой пояс <±N>', нигде не упомянутой в интерфейсе. Добавлена кнопка «🌐 Часовой пояс» — открывает тот же выбор (кнопки городов + ручной ввод) заново, показывая текущее значение. Co-Authored-By: Claude Sonnet 5 --- bot.py | 13 ++++++++++++- keyboards.py | 2 ++ tests/test_flow.py | 17 +++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) 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