108 lines
5.0 KiB
Python
108 lines
5.0 KiB
Python
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
|
||
from telegram.ext import ContextTypes
|
||
from asgiref.sync import sync_to_async
|
||
from users.models import User, NotificationSettings
|
||
|
||
async def settings_menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
"""Меню настроек уведомлений."""
|
||
query = update.callback_query
|
||
await query.answer()
|
||
|
||
user_id = query.from_user.id
|
||
user = await sync_to_async(User.objects.filter(chat_id=user_id).first)()
|
||
if not user:
|
||
await query.edit_message_text("Вы не зарегистрированы.")
|
||
return
|
||
|
||
settings, _ = await sync_to_async(NotificationSettings.objects.get_or_create)(user=user)
|
||
|
||
telegram_status = "✅" if settings.telegram_enabled else "❌"
|
||
email_status = "✅" if settings.email_enabled else "❌"
|
||
|
||
keyboard = [
|
||
[InlineKeyboardButton(f"{telegram_status} Уведомления в Telegram", callback_data="toggle_telegram")],
|
||
[InlineKeyboardButton(f"{email_status} Уведомления по Email", callback_data="toggle_email")],
|
||
[InlineKeyboardButton("🕒 Настроить время уведомлений", callback_data="set_notification_time")],
|
||
[InlineKeyboardButton("📋 Показать текущие настройки", callback_data="current_settings")],
|
||
[InlineKeyboardButton("🏠 Главная", callback_data="main_menu")],
|
||
[InlineKeyboardButton("🔙 Назад", callback_data="back")],
|
||
]
|
||
reply_markup = InlineKeyboardMarkup(keyboard)
|
||
await query.edit_message_text("Настройки уведомлений:", reply_markup=reply_markup)
|
||
|
||
async def toggle_telegram(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
"""Переключение состояния Telegram-уведомлений."""
|
||
query = update.callback_query
|
||
await query.answer()
|
||
|
||
user_id = query.from_user.id
|
||
user = await sync_to_async(User.objects.filter(chat_id=user_id).first)()
|
||
if not user:
|
||
await query.edit_message_text("Вы не зарегистрированы.")
|
||
return
|
||
|
||
settings, _ = await sync_to_async(NotificationSettings.objects.get_or_create)(user=user)
|
||
settings.telegram_enabled = not settings.telegram_enabled
|
||
await sync_to_async(settings.save)()
|
||
|
||
print(f"Пользователь {user_id} переключил Telegram-уведомления: {settings.telegram_enabled}")
|
||
await settings_menu(update, context)
|
||
|
||
|
||
async def toggle_email(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
"""Переключение состояния Email-уведомлений."""
|
||
query = update.callback_query
|
||
await query.answer()
|
||
|
||
user_id = query.from_user.id
|
||
user = await sync_to_async(User.objects.filter(chat_id=user_id).first)()
|
||
if not user:
|
||
await query.edit_message_text("Вы не зарегистрированы.")
|
||
return
|
||
|
||
settings, _ = await sync_to_async(NotificationSettings.objects.get_or_create)(user=user)
|
||
settings.email_enabled = not settings.email_enabled
|
||
await sync_to_async(settings.save)()
|
||
|
||
print(f"Пользователь {user_id} переключил Email-уведомления: {settings.email_enabled}")
|
||
await settings_menu(update, context)
|
||
|
||
|
||
async def show_current_settings(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
"""Отображение текущих настроек уведомлений."""
|
||
query = update.callback_query
|
||
await query.answer()
|
||
|
||
user_id = query.from_user.id
|
||
user = await sync_to_async(User.objects.filter(chat_id=user_id).first)()
|
||
if not user:
|
||
await query.edit_message_text("Вы не зарегистрированы.")
|
||
return
|
||
|
||
settings, _ = await sync_to_async(NotificationSettings.objects.get_or_create)(user=user)
|
||
telegram_status = "✅ Включены" if settings.telegram_enabled else "❌ Выключены"
|
||
email_status = "✅ Включены" if settings.email_enabled else "❌ Выключены"
|
||
notification_time = settings.notification_time or "Не установлено"
|
||
|
||
message = (
|
||
f"📋 Ваши настройки уведомлений:\n"
|
||
f"🔔 Telegram: {telegram_status}\n"
|
||
f"📧 Email: {email_status}\n"
|
||
f"🕒 Время: {notification_time}"
|
||
)
|
||
await query.edit_message_text(message)
|
||
|
||
async def set_notification_time(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
"""Настройка времени уведомлений."""
|
||
query = update.callback_query
|
||
await query.answer()
|
||
|
||
user_id = query.from_user.id
|
||
user = await sync_to_async(User.objects.filter(chat_id=user_id).first)()
|
||
if not user:
|
||
await query.edit_message_text("Вы не зарегистрированы.")
|
||
return
|
||
|
||
await query.edit_message_text("Введите новое время для уведомлений в формате HH:MM (например, 08:30):")
|
||
context.user_data["set_time"] = True
|
||
print(f"Пользователь {user_id} настраивает время уведомлений.") |