Напоминалки: кнопка смены часового пояса в разделе

Раньше сменить уже заданный пояс можно было только скрытой командой
'часовой пояс <±N>', нигде не упомянутой в интерфейсе. Добавлена кнопка
«🌐 Часовой пояс» — открывает тот же выбор (кнопки городов + ручной ввод)
заново, показывая текущее значение.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-09-05 15:22:57 +03:00
parent e41db35f13
commit 6ecbd7aa94
3 changed files with 31 additions and 1 deletions
+12 -1
View File
@@ -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
+2
View File
@@ -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()
+17
View File
@@ -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