#!/usr/bin/env python3 """ CLI entry point for Marcus Scambaiter Bot """ import argparse import asyncio import sys from pathlib import Path import os from .bot import main as bot_main, ScambaiterBot from .conversation import ConversationAnalyzer from .persona import load_persona, get_persona_path def check_env_file(): """Check if .env file exists and has required variables""" if not Path(".env").exists(): print("āŒ No .env file found!") print("šŸ“ Please create a .env file with your credentials.") print("šŸ“– See README.md for setup instructions.") return False required_vars = ['TELEGRAM_API_ID', 'TELEGRAM_API_HASH', 'TELEGRAM_PHONE', 'GROK_API_KEY'] missing_vars = [] # Load .env manually to check try: with open('.env', 'r') as f: env_content = f.read() for var in required_vars: if f"{var}=" not in env_content: missing_vars.append(var) except Exception: pass if missing_vars: print(f"āŒ Missing environment variables: {', '.join(missing_vars)}") print("šŸ“ Please add them to your .env file.") return False return True def show_stats(): """Show conversation statistics""" try: analyzer = ConversationAnalyzer() stats = analyzer.get_conversation_summary() print("šŸ“Š Marcus Scambaiter Statistics") print("=" * 40) print(f"Total scammers engaged: {stats['total_scammers_engaged']}") print(f"Total messages received: {stats['total_messages_received']}") print(f"Time wasted (minutes): {stats['total_time_wasted_minutes']:.1f}") print(f"Average messages per scammer: {stats['average_messages_per_scammer']:.1f}") if stats['scammer_types']: print("\nScammer Types Detected:") for scam_type, count in stats['scammer_types'].items(): print(f" {scam_type}: {count}") except Exception as e: print(f"āŒ Error reading statistics: {e}") def show_persona(): """Show Marcus's persona""" try: persona = load_persona() print("šŸŽ­ Marcus's Persona") print("=" * 40) print(persona) except Exception as e: print(f"āŒ Error loading persona: {e}") def main(): """Main CLI entry point""" parser = argparse.ArgumentParser( description="Marcus - Telegram Scambaiting Bot", epilog="For more information, visit: https://retoor.molodetz.nl/retoor/" ) subparsers = parser.add_subparsers(dest='command', help='Available commands') # Start command start_parser = subparsers.add_parser('start', help='Start the scambaiting bot') start_parser.add_argument('--check-only', action='store_true', help='Only check configuration, don\'t start bot') # Stats command subparsers.add_parser('stats', help='Show conversation statistics') # Persona command subparsers.add_parser('persona', help='Show Marcus\'s personality') # Config command config_parser = subparsers.add_parser('config', help='Configuration utilities') config_parser.add_argument('--check', action='store_true', help='Check configuration') args = parser.parse_args() if not args.command: parser.print_help() return print("šŸŽ­ Marcus Scambaiter Bot v1.0.0") print("By retoor - https://retoor.molodetz.nl/retoor/") print() if args.command == 'start': if not check_env_file(): sys.exit(1) if args.check_only: print("āœ… Configuration looks good!") print("šŸš€ Run 'marcus start' to begin scambaiting!") return print("šŸŽÆ Starting Marcus...") print("šŸ’” Tip: Press Ctrl+C to stop") print("šŸ“Š Run 'marcus stats' to see results") print() try: asyncio.run(bot_main()) except KeyboardInterrupt: print("\nšŸ‘‹ Marcus stopped. Goodbye!") except Exception as e: print(f"āŒ Error: {e}") sys.exit(1) elif args.command == 'stats': show_stats() elif args.command == 'persona': show_persona() elif args.command == 'config': if args.check: if check_env_file(): print("āœ… Configuration is valid!") else: sys.exit(1) if __name__ == "__main__": main()