Напоминалки: выбор часового пояса кнопками городов + ручной ввод
При гейте часового пояса теперь показывается клавиатура с частыми российскими городами-поясами (Калининград..Камчатка). Клик по кнопке шлёт 'Город, UTC+N' — _parse_tz_offset распознаёт и это, и обычный ручной ввод вида '+3'/'-5', если своего города в списке нет. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -488,12 +488,16 @@ class VKBotApplication:
|
||||
return f"{name} (vk.com/id{uid})" if name else f"vk.com/id{uid}"
|
||||
|
||||
def _parse_tz_offset(self, raw: str) -> Optional[int]:
|
||||
"""Парсит смещение от UTC вида '+3', '-5', '0'. None, если не число
|
||||
или вне диапазона реальных часовых поясов (-12..+14)."""
|
||||
"""Парсит смещение от UTC: либо чистое число '+3'/'-5'/'0' (ручной ввод),
|
||||
либо 'Город, UTC+N' (клик по кнопке get_timezone_keyboard). None, если
|
||||
не удалось распознать или число вне диапазона реальных поясов (-12..+14)."""
|
||||
raw = raw.strip()
|
||||
if not re.match(r"^[+-]?\d{1,2}$", raw):
|
||||
m = re.search(r"UTC\s*([+-]?\d{1,2})\s*$", raw, re.I)
|
||||
if not m:
|
||||
m = re.match(r"^([+-]?\d{1,2})$", raw)
|
||||
if not m:
|
||||
return None
|
||||
val = int(raw)
|
||||
val = int(m.group(1))
|
||||
return val if -12 <= val <= 14 else None
|
||||
|
||||
def _require_reminder_tz(self, user_id: int) -> bool:
|
||||
@@ -505,9 +509,10 @@ class VKBotApplication:
|
||||
db.update_user_state(user_id, "ADMIN_REMINDER_TZ_SETUP")
|
||||
self.send_message(
|
||||
user_id,
|
||||
"🌐 Прежде чем пользоваться напоминалками, укажите свой часовой пояс "
|
||||
"относительно UTC.\nНапример: +3 (Москва), +5 (Екатеринбург), 0 (UTC).",
|
||||
keyboard=get_cancel_admin_keyboard()
|
||||
"🌐 Прежде чем пользоваться напоминалками, укажите свой часовой пояс.\n"
|
||||
"Выберите город кнопкой ниже, либо введите смещение от UTC вручную "
|
||||
"(например, +3), если своего города в списке нет.",
|
||||
keyboard=get_timezone_keyboard()
|
||||
)
|
||||
return False
|
||||
|
||||
@@ -1784,8 +1789,9 @@ class VKBotApplication:
|
||||
if state == "ADMIN_REMINDER_TZ_SETUP":
|
||||
offset = self._parse_tz_offset(text)
|
||||
if offset is None:
|
||||
self.send_message(user_id, "⚠️ Формат: число от -12 до +14, например +3 или -5.",
|
||||
keyboard=get_cancel_admin_keyboard())
|
||||
self.send_message(user_id, "⚠️ Выберите город кнопкой ниже, либо введите число "
|
||||
"от -12 до +14 вручную, например +3 или -5.",
|
||||
keyboard=get_timezone_keyboard())
|
||||
return
|
||||
db.set_admin_tz_offset(user_id, offset)
|
||||
db.update_user_state(user_id, "FREE_CHAT")
|
||||
|
||||
Reference in New Issue
Block a user