🔥 ОБЪЯВЛЕНИЯ: • Срок действия: 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>
137 lines
3.7 KiB
Python
137 lines
3.7 KiB
Python
"""
|
||
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'
|