// Extracted from newOS4 index.html — DuckDuckGoModule class DuckDuckGoModule { constructor() { this.commands = {}; this.terminal = null; } getHelpInfo() { return { 'ddg': 'ddg — Search DuckDuckGo (opens query in new tab)', 'duck': 'duck — Alias for ddg', }; } registerCommands() { this.commands['ddg'] = (args) => this.search(args); this.commands['duck'] = (args) => this.search(args); } async search(args) { if (!args[0]) { this.terminal.print("Usage: ddg ", "warning"); this.terminal.print("Example: ddg javascript tutorials", "info"); this.terminal.print("Note: Due to CORS, results may be limited. Try 'search' command for better results.", "warning"); return; } const query = args.join(' '); this.terminal.print(`šŸ¦† DuckDuckGo Search: ${query}`, "info"); // DuckDuckGo doesn't have a public API, so we provide alternatives this.terminal.print("āš ļø DuckDuckGo doesn't provide a public API for direct access.", "warning"); this.terminal.print("Opening search in new tab...", "info"); // Open in new tab as fallback const ddgUrl = `https://duckduckgo.com/?q=${encodeURIComponent(query)}`; window.open(ddgUrl, '_blank'); this.terminal.print(`\nšŸ’” Alternative: Use 'search ' for SearXNG (privacy-focused)`, "info"); this.terminal.print(`šŸ”— Direct link: ${ddgUrl}`, "info"); } }