Админам: персональное отключение уведомлений от клиентов
В админ-панели кнопка «Уведомления: вкл 🔔 / выкл 🔕» — админ (в т.ч. из ADMIN_IDS/ супер-админ) может лично отключить приём уведомлений о заявках и сообщениях клиентов. Флаг notify_muted хранится в профиле; _notify_operators пропускает замьюченных получателей (у остальных операторов уведомления идут как обычно). pytest 37 passed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -202,8 +202,10 @@ class VKBotApplication:
|
||||
return ids if ids else [config.OPERATOR_PEER_ID]
|
||||
|
||||
def _notify_operators(self, message: str):
|
||||
"""Отправляет сообщение всем операторам из списка."""
|
||||
"""Отправляет сообщение операторам из списка (кроме тех, кто отключил себе уведомления)."""
|
||||
for op_id in self._operator_ids():
|
||||
if db.get_profile(op_id).get("notify_muted"):
|
||||
continue
|
||||
self.send_message(op_id, message)
|
||||
|
||||
def _vk_name(self, user_id: int) -> Optional[str]:
|
||||
@@ -256,6 +258,7 @@ class VKBotApplication:
|
||||
def _send_admin_panel(self, user_id: int):
|
||||
"""Главный экран админ-панели с кнопками разделов."""
|
||||
is_super = self._is_super_admin(user_id)
|
||||
muted = bool(db.get_profile(user_id).get("notify_muted"))
|
||||
extra = "\n• 👑 Администраторы — добавить/удалить (только супер-админ)" if is_super else ""
|
||||
self.send_message(
|
||||
user_id,
|
||||
@@ -264,11 +267,25 @@ class VKBotApplication:
|
||||
"• 📊 Статистика — заявки и диалоги\n"
|
||||
"• 💬 Быстрые ответы — авто-ответы по ключевым словам\n"
|
||||
"• 📣 Рассылка — сообщение подписчикам\n"
|
||||
"• 🔗 Ссылки — куда ведут кнопки записи/оплаты"
|
||||
"• 🔗 Ссылки — куда ведут кнопки записи/оплаты\n"
|
||||
"• 🔔 Уведомления — вкл/выкл уведомления о заявках лично для вас"
|
||||
+ extra,
|
||||
keyboard=get_admin_keyboard(is_super=is_super)
|
||||
keyboard=get_admin_keyboard(is_super=is_super, muted=muted)
|
||||
)
|
||||
|
||||
def _toggle_admin_notifications(self, user_id: int):
|
||||
"""Переключает лично для этого админа приём уведомлений о заявках/клиентах."""
|
||||
muted = not bool(db.get_profile(user_id).get("notify_muted"))
|
||||
db.set_profile_field(user_id, "notify_muted", muted)
|
||||
if muted:
|
||||
txt = ("🔕 Уведомления от клиентов ОТКЛЮЧЕНЫ лично для вас.\n"
|
||||
"Заявки и сообщения от клиентов приходить не будут (у других операторов — как раньше).\n"
|
||||
"Включить обратно — кнопкой «Уведомления» в админке.")
|
||||
else:
|
||||
txt = "🔔 Уведомления от клиентов ВКЛЮЧЕНЫ — заявки снова будут приходить вам."
|
||||
self.send_message(user_id, txt,
|
||||
keyboard=get_admin_keyboard(is_super=self._is_super_admin(user_id), muted=muted))
|
||||
|
||||
def _send_admins_panel(self, user_id: int):
|
||||
"""Раздел управления администраторами (только супер-админ)."""
|
||||
if not self._is_super_admin(user_id):
|
||||
@@ -454,6 +471,9 @@ class VKBotApplication:
|
||||
elif text_lower in ["ссылки 🔗", "ссылки", "ссылка"]:
|
||||
self._send_links_admin(user_id)
|
||||
return
|
||||
elif text_lower in ["уведомления: вкл 🔔", "уведомления: выкл 🔕", "уведомления", "уведомления 🔔", "уведомления 🔕"]:
|
||||
self._toggle_admin_notifications(user_id)
|
||||
return
|
||||
elif text_lower in ["✏️ изменить ссылку", "изменить ссылку"]:
|
||||
items = [(k, config.LINK_LABELS.get(k, k)) for k in config.LINK_LABELS]
|
||||
db.update_user_state(user_id, "ADMIN_LINK_PICK")
|
||||
|
||||
Reference in New Issue
Block a user