#!/usr/bin/env python3 """ Discord User Data Collector Main application entry point for collecting Discord user data for research purposes. """ import asyncio import logging import sys from pathlib import Path # Check if we're in the right directory if not Path("src").exists(): print("āŒ Error: 'src' directory not found. Please run from the project root directory.") sys.exit(1) # Add src to Python path sys.path.insert(0, str(Path(__file__).parent)) try: from src.client import DiscordDataClient from src.config import Config from src.database import MongoDatabase from src.logger import setup_logger except ImportError as e: print(f"āŒ Import error: {e}") print("\nšŸ”§ To fix this, try:") print("1. Run: python setup.py") print("2. Or run: python test_imports.py") print("3. Or install dependencies: pip install discord.py-self python-dotenv toml colorlog") sys.exit(1) async def main(): """Main application entry point.""" try: # Setup configuration config = Config() # Setup logging logger = setup_logger(config.log_level, config.log_file) logger.info("Starting Discord Data Collector") # Initialize database database = MongoDatabase() await database.initialize() # Initialize Discord client client = DiscordDataClient(config, database) # Start the client logger.info("Starting Discord client...") await client.start(config.discord_token) except KeyboardInterrupt: logger.info("Received keyboard interrupt, shutting down...") except Exception as e: logger.error(f"Fatal error: {e}", exc_info=True) sys.exit(1) finally: if 'client' in locals(): await client.close() logger.info("Application shutdown complete") if __name__ == "__main__": asyncio.run(main())