bot refactor
This commit is contained in:
108
bot/operations/settings.py
Normal file
108
bot/operations/settings.py
Normal file
@@ -0,0 +1,108 @@
|
||||
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} настраивает время уведомлений.")
|
||||
Reference in New Issue
Block a user