#!/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())