domovoy_bot/utils/ui_styles.py
Admin cef2ac3714 v1.19 ИГ рассылка + объявления 14 дней + настройки
🔥 ОБЪЯВЛЕНИЯ:
• Срок действия: 7 → 14 дней

🎯 ИНИЦИАТИВНАЯ ГРУППА:
• Добавлена кнопка 'Рассылка ИГ' в меню
• Команда /ig_broadcast для членов ИГ
• Поддержка текста + фото + файлов
• Настройка лимита в веб-панели

⚙️ ВЕБ-ПАНЕЛЬ:
• Новая страница /settings
• Настройка лимита рассылки ИГ (секунды)
• Кнопки статистики фильтруют пользователей
• Индикатор активного фильтра

🎨 UI:
• Исправлен <font> → emoji (Telegram не поддерживает)
• Цветные заголовки через emoji

📁 ФАЙЛЫ:
• handlers/ads.py: 14 дней
• handlers/initiative_group.py: рассылка ИГ
• web/app.py: API настроек
• web/templates/settings.html: страница настроек
• utils/ui_styles.py: без <font> тегов
• database: settings table

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-10 17:01:30 +00:00

137 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
UI Styles — стили оформления для разных уровней пользователей
"""
# =============================================================================
# ЦВЕТА И EMOJI ДЛЯ УРОВНЕЙ
# =============================================================================
LEVEL_COLORS = {
'unverified': 'red', # Неверифицированные
'verified': 'green', # Верифицированные
'ig': 'blue', # Инициативная группа
'admin': 'orange', # Админ
'superadmin': 'purple', # Супер-админ (владелец)
}
LEVEL_EMOJI = {
'unverified': '🔴',
'verified': '🟢',
'ig': '🔵',
'admin': '🟡',
'superadmin': '🟣',
}
LEVEL_NAMES = {
'unverified': 'НОВИЧОК',
'verified': 'ЖИЛЕЦ',
'ig': 'АКТИВ',
'admin': 'АДМИН',
'superadmin': 'ВЛАДЕЛЕЦ',
}
# =============================================================================
# ФОРМАТИРОВАНИЕ ТЕКСТА
# =============================================================================
def get_colored_header(text: str, level: str) -> str:
"""
Создать заголовок с emoji (без <font> тегов!)
Args:
text: текст заголовка
level: уровень пользователя
Returns:
строка с emoji и жирным текстом
"""
emoji = LEVEL_EMOJI.get(level, '')
return f'{emoji} <b>{text}</b>'
def get_level_badge(level: str) -> str:
"""
Получить бейдж уровня (без HTML тегов!)
Args:
level: уровень пользователя
Returns:
строка с emoji и названием
"""
emoji = LEVEL_EMOJI.get(level, '')
name = LEVEL_NAMES.get(level, 'НЕИЗВЕСТНО')
return f'<b>{emoji} {name}</b>'
def get_user_level(user) -> str:
"""
Определить уровень пользователя
Args:
user: объект User
Returns:
строка уровня (unverified, verified, ig, admin, superadmin)
"""
from config import ADMIN_USER_ID
if not user:
return 'unverified'
# Супер-админ (владелец)
if user.user_id == ADMIN_USER_ID:
return 'superadmin'
# Админ
if user.is_admin:
return 'admin'
# Инициативная группа
# Проверяется через InitiativeGroup.is_member()
# Но для простоты вернём verified если не ИГ
# Верифицированный
if user.verified:
return 'verified'
# Неверифицированный
return 'unverified'
def get_user_level_with_ig(user, is_ig_member: bool = False) -> str:
"""
Определить уровень пользователя с учётом ИГ
Args:
user: объект User
is_ig_member: член ИГ
Returns:
строка уровня
"""
from config import ADMIN_USER_ID
if not user:
return 'unverified'
# Супер-админ (владелец)
if user.user_id == ADMIN_USER_ID:
return 'superadmin'
# Админ
if user.is_admin:
return 'admin'
# Инициативная группа
if is_ig_member and user.verified:
return 'ig'
# Верифицированный
if user.verified:
return 'verified'
# Неверифицированный
return 'unverified'