#!/usr/bin/env python3
"""
Парсинг сообщений через Bot Token (если бот админ группы)

Использует cloneyou bot token
"""

import asyncio
from telethon import TelegramClient

# Bot Token из проекта miniapp (cloneyou)
BOT_TOKEN = '7261337750:AAFlUoZ3VRMsL8QCZzVYWN7lWVgOIW0V4ho'

# API ключи из проекта miniapp (cloneyou)
API_ID = 27637277
API_HASH = '8d1655ab08162698e7bfce8afe9fc73a'

# ID группы обсуждений канала @applifegame
DISCUSSION_GROUP_ID = -1001592654869

# Количество сообщений
MESSAGES_TO_ANALYZE = 822

# Файл результата
OUTPUT_FILE = '/var/www/wsalesite.ru/avatar/chat_users_list.txt'

async def main():
    print("=" * 70)
    print("🤖 ПАРСИНГ ЧЕРЕЗ BOT TOKEN (cloneyou_bot)")
    print("=" * 70)
    print(f"💬 Группа: {DISCUSSION_GROUP_ID}")
    print(f"📊 Сообщений: {MESSAGES_TO_ANALYZE}")
    print("=" * 70 + "\n")
    
    # Подключаемся как бот
    client = TelegramClient('bot_session', API_ID, API_HASH)
    await client.start(bot_token=BOT_TOKEN)
    
    try:
        me = await client.get_me()
        print(f"✅ Бот подключен: @{me.username}")
        print(f"   ID: {me.id}\n")
        
        # Проверяем доступ к группе
        try:
            chat = await client.get_entity(DISCUSSION_GROUP_ID)
            print(f"✅ Группа найдена: {getattr(chat, 'title', 'N/A')}")
            print(f"   ID: {chat.id}\n")
        except Exception as e:
            print(f"❌ Ошибка доступа к группе: {e}")
            print("\n⚠️  Бот должен быть участником/админом группы!")
            return
        
        # Пробуем получить сообщения
        print(f"🔍 Пробуем получить последние {MESSAGES_TO_ANALYZE} сообщений...\n")
        
        users_dict = {}
        processed = 0
        
        try:
            async for message in client.iter_messages(
                entity=DISCUSSION_GROUP_ID,
                limit=MESSAGES_TO_ANALYZE
            ):
                processed += 1
                
                if processed % 100 == 0:
                    print(f"   Обработано: {processed}/{MESSAGES_TO_ANALYZE}")
                
                if not message.sender:
                    continue
                
                sender = message.sender
                user_id = sender.id
                
                if user_id in users_dict:
                    users_dict[user_id]['message_count'] += 1
                else:
                    users_dict[user_id] = {
                        'username': getattr(sender, 'username', None),
                        'first_name': getattr(sender, 'first_name', ''),
                        'last_name': getattr(sender, 'last_name', ''),
                        'message_count': 1,
                        'is_bot': getattr(sender, 'bot', False)
                    }
            
            print(f"   ✅ Обработано: {processed} сообщений\n")
            
        except Exception as e:
            print(f"❌ Ошибка при парсинге: {e}")
            if "CHAT_ADMIN_REQUIRED" in str(e):
                print("\n⚠️  Бот не имеет прав админа в группе!")
                print("   Решение:")
                print("   1. Добавьте бота @cloneyou_bot в группу")
                print("   2. Сделайте его админом")
                print("   3. Запустите скрипт снова")
            return
        
        if not users_dict:
            print("⚠️  Сообщения не найдены или нет авторов")
            return
        
        # Формируем результат
        print("💾 Сохраняем результаты...\n")
        
        from datetime import datetime
        
        output = f"# Ники пользователей из группы @applifegame\n"
        output += f"# Дата: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
        output += f"# Метод: Bot Token (cloneyou_bot)\n"
        output += f"# Обработано: {processed} сообщений\n"
        output += f"# Уникальных: {len(users_dict)}\n"
        output += "=" * 70 + "\n\n"
        
        # Сортируем по активности
        sorted_users = sorted(
            users_dict.items(),
            key=lambda x: x[1]['message_count'],
            reverse=True
        )
        
        output += "## ПОЛЬЗОВАТЕЛИ ПО АКТИВНОСТИ\n"
        output += "=" * 70 + "\n\n"
        
        for user_id, user_data in sorted_users:
            if user_data['username']:
                identifier = f"@{user_data['username']}"
            else:
                first = user_data['first_name'] or ''
                last = user_data['last_name'] or ''
                identifier = f"{first} {last}".strip() or f"ID:{user_id}"
            
            bot_mark = " [БОТ]" if user_data['is_bot'] else ""
            output += f"{identifier}{bot_mark} - {user_data['message_count']} сообщений\n"
        
        output += "\n" + "=" * 70 + "\n"
        output += f"## СПИСОК ВСЕХ НИКОВ (всего: {len(users_dict)})\n"
        output += "=" * 70 + "\n\n"
        
        simple_list = []
        for user_id, user_data in users_dict.items():
            if user_data['username']:
                simple_list.append(f"@{user_data['username']}")
            else:
                first = user_data['first_name'] or ''
                last = user_data['last_name'] or ''
                full_name = f"{first} {last}".strip()
                simple_list.append(full_name if full_name else f"ID:{user_id}")
        
        for nickname in sorted(simple_list):
            output += f"{nickname}\n"
        
        # Сохраняем
        with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
            f.write(output)
        
        print("=" * 70)
        print("✅ ГОТОВО!")
        print("=" * 70)
        print(f"📊 Статистика:")
        print(f"   - Обработано: {processed} сообщений")
        print(f"   - Уникальных: {len(users_dict)} пользователей")
        print(f"   - Файл: {OUTPUT_FILE}")
        print("=" * 70)
        
        print(f"\n📋 Топ-3 самых активных:")
        for i, (user_id, user_data) in enumerate(sorted_users[:3], 1):
            if user_data['username']:
                identifier = f"@{user_data['username']}"
            else:
                first = user_data['first_name'] or ''
                last = user_data['last_name'] or ''
                identifier = f"{first} {last}".strip() or f"ID:{user_id}"
            print(f"   {i}. {identifier} - {user_data['message_count']} сообщений")
    
    finally:
        await client.disconnect()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

