domovoy_bot/import_members.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

100 lines
4 KiB
Python
Raw Permalink 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.

#!/usr/bin/env python3
"""
Импорт всех участников группы в базу данных
Прямой запрос к Telegram API
"""
import asyncio
import logging
import aiohttp
from datetime import datetime
from sqlalchemy import select
from database.db import AsyncSessionLocal, init_db
from database.models import User
from config import BOT_TOKEN, ADMIN_CHAT_ID, get_proxy_url
from aiohttp_socks import ProxyConnector
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
async def import_group_members():
"""Импортировать всех участников группы"""
await init_db()
proxy_url = get_proxy_url()
logger.info(f'🔒 Прокси: {proxy_url}')
# Создаём коннектор с прокси
connector = ProxyConnector.from_url(proxy_url)
async with aiohttp.ClientSession(connector=connector) as session:
# Получаем список администраторов (это все кто есть в чате)
async with session.get(
f"https://api.telegram.org/bot{BOT_TOKEN}/getChatAdministrators",
params={"chat_id": ADMIN_CHAT_ID}
) as resp:
result = await resp.json()
if not result.get('ok'):
logger.error(f'Ошибка API: {result}')
return
members = result.get('result', [])
logger.info(f'📊 Найдено участников: {len(members)}')
async with AsyncSessionLocal() as db_session:
added = 0
updated = 0
for member in members:
# member это dict с ключом 'user'
user_data = member.get('user', {})
user_id = user_data.get('id')
if not user_id:
continue
# Проверяем есть ли в базе
existing = await db_session.get(User, user_id)
if existing:
# Обновляем данные
username = user_data.get('username')
first_name = user_data.get('first_name')
last_name = user_data.get('last_name')
if username:
existing.username = username
if first_name:
existing.first_name = first_name
if last_name:
existing.last_name = last_name
# Верифицируем!
if not existing.verified:
existing.verified = True
existing.verification_date = datetime.utcnow()
updated += 1
else:
# Добавляем нового
new_user = User(
user_id=user_id,
username=user_data.get('username'),
first_name=user_data.get('first_name'),
last_name=user_data.get('last_name'),
verified=True, # Сразу верифицируем!
verification_date=datetime.utcnow(),
message_count=0,
)
db_session.add(new_user)
added += 1
await db_session.commit()
logger.info(f'✅ Добавлено: {added}')
logger.info(f'🔄 Обновлено: {updated}')
logger.info(f'💾 Итого в базе: {added + updated}')
if __name__ == '__main__':
asyncio.run(import_group_members())