#!/usr/bin/env python3 """ Quick setup script for testing Discord Fishbowl """ import os import sys import subprocess import json from pathlib import Path def run_command(command, check=True): """Run a command and return the result""" print(f"Running: {command}") result = subprocess.run(command, shell=True, capture_output=True, text=True) if check and result.returncode != 0: print(f"Error: {result.stderr}") return False return True def main(): print("🐠 Discord Fishbowl Quick Test Setup") print("=" * 50) # Install dependencies print("\nšŸ“¦ Installing dependencies...") if not run_command("pip install -r requirements.txt"): print("āŒ Failed to install dependencies") return False print("āœ… Dependencies installed") # Create config directory config_dir = Path("config") config_dir.mkdir(exist_ok=True) # Create basic config for testing config = { "database": { "url": "sqlite+aiosqlite:///fishbowl_test.db", "echo": False }, "llm": { "provider": "ollama", "base_url": "http://localhost:11434", "model": "llama2", "max_tokens": 300, "temperature": 0.8, "timeout": 30 }, "discord": { "token": "your_discord_token_here", "application_id": "your_app_id_here", "guild_id": "your_guild_id_here" }, "conversation": { "min_delay_seconds": 30, "max_delay_seconds": 180, "max_conversation_length": 20, "quiet_hours_start": 23, "quiet_hours_end": 7 }, "admin": { "host": "localhost", "port": 8000, "secret_key": "test-secret-key", "cors_origins": ["http://localhost:3000"] }, "vector_store": { "storage_path": "./data/vector_stores", "collection_name": "fishbowl_memories" } } config_file = config_dir / "fishbowl_config.json" with open(config_file, 'w') as f: json.dump(config, f, indent=2) print(f"āœ… Config created at {config_file}") # Create .env file env_content = """# Discord Fishbowl Environment Variables ENVIRONMENT=development LOG_LEVEL=INFO DATABASE_URL=sqlite+aiosqlite:///fishbowl_test.db SECRET_KEY=test-secret-key # LLM Configuration LLM_PROVIDER=ollama LLM_BASE_URL=http://localhost:11434 LLM_MODEL=llama2 # Discord (replace with your actual tokens) DISCORD_TOKEN=your_discord_token_here DISCORD_APPLICATION_ID=your_app_id_here DISCORD_GUILD_ID=your_guild_id_here """ with open(".env", 'w') as f: f.write(env_content) print("āœ… .env file created") # Create data directories Path("data/vector_stores").mkdir(parents=True, exist_ok=True) Path("logs").mkdir(exist_ok=True) print("āœ… Data directories created") # Run database migrations print("\nšŸ—„ļø Setting up database...") if run_command("alembic upgrade head", check=False): print("āœ… Database migrations completed") else: print("āš ļø Database migrations failed (this is normal for first setup)") print("\nšŸŽ‰ Setup complete!") print("\nNext steps:") print("1. Install Ollama and pull a model: ollama pull llama2") print("2. Update Discord tokens in .env file") print("3. Run: python src/main.py") print("\nFor admin interface:") print("4. cd admin-frontend && npm install && npm start") if __name__ == "__main__": main()