{ "version": 1, "acciones": [ { "id": "disco_libre", "grupo": "sistema", "frases": [ "cuanto espacio queda", "espacio en disco", "espacio libre en disco", "cuanto disco queda", "cuando espacio queda", "cuanto espacio quedan" ], "acuse": "Un momento, lo miro, señor.", "comando": "df -h / | tail -1", "host": true, "respuesta": "Quedan {campo4} libres de {campo2}, al {campo5} de uso, señor.", "confirmar": false, "captura": false }, { "id": "disco_home", "grupo": "sistema", "frases": [ "como esta mi disco", "cuanto ocupa mi disco", "espacio de mi disco" ], "acuse": "Un momento, señor.", "comando": "df -h ~ | tail -1", "host": true, "respuesta": "Su disco esta al {campo5}, con {campo4} libres de {campo2}, señor.", "confirmar": false, "captura": false }, { "id": "disco_todos", "grupo": "sistema", "frases": [ "discos montados", "particiones", "unidades montadas" ], "acuse": "Enseguida, señor.", "comando": "df -h --output=target,size,pcent -x tmpfs -x devtmpfs | tail -n +2", "host": true, "respuesta": "Hay {lineas} unidades montadas. {salida}, señor", "confirmar": false, "captura": false }, { "id": "memoria", "grupo": "sistema", "frases": [ "cuanta memoria", "memoria libre", "cuanta ram", "ram libre" ], "acuse": "Voy, señor.", "comando": "free -g | awk '/Mem:/{print $2, $3, $7}'", "host": true, "respuesta": "De {campo1} gigas hay {campo2} en uso y {campo3} disponibles, señor.", "confirmar": false, "captura": false }, { "id": "swap", "grupo": "sistema", "frases": [ "como esta la swap", "memoria de intercambio" ], "acuse": "Voy, señor.", "comando": "free -g | awk '/Swap:/{print $2, $3}'", "host": true, "respuesta": "Swap: {campo2} gigas usados de {campo1}, señor.", "confirmar": false, "captura": false }, { "id": "cpu_carga", "grupo": "sistema", "frases": [ "carga del sistema", "como va el procesador", "carga de cpu" ], "acuse": "Un segundo, señor.", "comando": "uptime | sed 's/.*average: //'", "host": true, "respuesta": "La carga media es {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "cpu_modelo", "grupo": "sistema", "frases": [ "que procesador tengo", "modelo de procesador", "que cpu tengo" ], "acuse": "Enseguida, señor.", "comando": "lscpu | grep 'Model name' | cut -d: -f2 | xargs", "host": true, "respuesta": "Lleva un {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "cpu_nucleos", "grupo": "sistema", "frases": [ "cuantos nucleos tengo", "cuantos hilos tengo" ], "acuse": "Voy, señor.", "comando": "nproc", "host": true, "respuesta": "Tiene {ultima} hilos disponibles, señor.", "confirmar": false, "captura": false }, { "id": "temperatura", "grupo": "sistema", "frases": [ "que temperatura hay", "como esta de temperatura", "se esta calentando", "que temperatura tiene", "como esta la temperatura" ], "acuse": "Lo compruebo, señor.", "comando": "for z in /sys/class/thermal/thermal_zone*/temp; do cat $z; done | sort -rn | head -1 | awk '{printf \"%.0f\", $1/1000}'", "host": true, "respuesta": "El punto mas caliente esta a {ultima} grados, señor.", "confirmar": false, "captura": false }, { "id": "gpu_estado", "grupo": "sistema", "frases": [ "como esta la grafica", "estado de la gpu", "uso de la grafica" ], "acuse": "Un momento, señor.", "comando": "nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv,noheader", "host": true, "respuesta": "La grafica esta asi: {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "uptime", "grupo": "sistema", "frases": [ "cuanto lleva encendido", "desde cuando esta encendido", "tiempo encendido" ], "acuse": "Voy, señor.", "comando": "uptime -p | sed 's/^up //; s/ days\\?/ dias/; s/ hours\\?/ horas/; s/ minutes\\?/ minutos/; s/,\\([^,]*\\)$/ y\\1/'", "host": true, "respuesta": "Lleva encendido {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "bateria", "grupo": "sistema", "frases": [ "cuanta bateria queda", "como esta la bateria", "nivel de bateria", "cuanta bateria tengo", "como va la bateria" ], "acuse": "Lo miro, señor.", "comando": "cat /sys/class/power_supply/BAT*/capacity 2>/dev/null | head -1", "host": true, "respuesta": "La bateria esta al {ultima} por ciento, señor.", "confirmar": false, "captura": false }, { "id": "kernel", "grupo": "sistema", "frases": [ "que kernel tengo", "version del kernel", "que nucleo tengo" ], "acuse": "Enseguida, señor.", "comando": "uname -r", "host": true, "respuesta": "Kernel {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "distro", "grupo": "sistema", "frases": [ "que distribucion tengo", "que sistema tengo", "que linux tengo" ], "acuse": "Voy, señor.", "comando": "grep PRETTY_NAME /etc/os-release | cut -d'\"' -f2", "host": true, "respuesta": "Esta usando {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "fecha", "grupo": "sistema", "frases": [ "que hora es", "que dia es", "dime la fecha" ], "acuse": "Voy, señor.", "comando": "date '+%H:%M del %A %d de %B'", "host": true, "respuesta": "Son las {salida}, señor.", "confirmar": false, "captura": false }, { "id": "procesos_top", "grupo": "sistema", "frases": [ "que esta consumiendo", "que consume mas", "procesos que mas gastan", "quien se come la cpu", "que esta consumiendo mas", "quien consume" ], "acuse": "Lo compruebo, señor.", "comando": "ps -eo pcpu,comm --sort=-pcpu --no-headers | head -5 | awk '{c=$1; $1=\"\"; sub(/^ +/,\"\"); printf \"%s al %s por ciento\\n\", $0, c}'", "host": true, "respuesta": "Lo que mas consume es {primera}, señor.", "confirmar": false, "captura": false }, { "id": "procesos_memoria", "grupo": "sistema", "frases": [ "que consume mas memoria", "quien se come la ram" ], "acuse": "Lo compruebo, señor.", "comando": "ps -eo comm,pmem --sort=-pmem --no-headers | head -5", "host": true, "respuesta": "Por memoria: {salida}, señor", "confirmar": false, "captura": false }, { "id": "procesos_cuantos", "grupo": "sistema", "frases": [ "cuantos procesos hay", "cuantos procesos corren" ], "acuse": "Voy, señor.", "comando": "ps -e --no-headers | wc -l", "host": true, "respuesta": "Hay {ultima} procesos en marcha, señor.", "confirmar": false, "captura": false }, { "id": "red_ip", "grupo": "sistema", "frases": [ "cual es mi ip", "mi ip local", "que ip tengo" ], "acuse": "Un momento, señor.", "comando": "hostname -I | awk '{print $1}'", "host": true, "respuesta": "Su IP local es {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "red_ip_publica", "grupo": "sistema", "frases": [ "cual es mi ip publica", "ip externa" ], "acuse": "Salgo a mirarlo, señor.", "comando": "curl -s --max-time 6 ifconfig.me", "host": true, "respuesta": "Su IP publica es {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "red_wifi", "grupo": "sistema", "frases": [ "a que wifi estoy conectado", "red wifi", "como se llama la wifi" ], "acuse": "Voy, señor.", "comando": "nmcli -t -f NAME,TYPE connection show --active | grep wireless | cut -d: -f1", "host": true, "respuesta": "Conectado a {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "red_velocidad", "grupo": "sistema", "frases": [ "cuanto trafico de red", "trafico de red" ], "acuse": "Lo miro, señor.", "comando": "cat /proc/net/dev | awk '/wlp|enp/{rx+=$2; tx+=$10} END{printf \"%.1f %.1f\", rx/1e9, tx/1e9}'", "host": true, "respuesta": "Desde el arranque: {campo1} gigas bajados y {campo2} subidos, señor.", "confirmar": false, "captura": false }, { "id": "red_ping", "grupo": "sistema", "frases": [ "hay internet", "tengo conexion", "funciona internet" ], "acuse": "Lo compruebo, señor.", "comando": "ping -c1 -W2 1.1.1.1 >/dev/null 2>&1 && echo si || echo no", "host": true, "respuesta": "Conexion: {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "puertos", "grupo": "sistema", "frases": [ "que puertos hay abiertos", "puertos a la escucha", "quien esta escuchando" ], "acuse": "Un momento, señor.", "comando": "ss -ltnp 2>/dev/null | awk 'NR>1{print $4}' | sort -u | head -8", "host": true, "respuesta": "A la escucha: {salida}, señor", "confirmar": false, "captura": false }, { "id": "servicios_fallidos", "grupo": "sistema", "frases": [ "hay servicios caidos", "servicios con fallos", "algo ha fallado" ], "acuse": "Lo reviso, señor.", "comando": "systemctl --failed --no-legend | wc -l", "host": true, "respuesta": "Servicios en fallo: {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "actualizaciones", "grupo": "sistema", "frases": [ "hay actualizaciones", "paquetes por actualizar" ], "acuse": "Lo compruebo, tarda un poco, señor.", "comando": "apt list --upgradable 2>/dev/null | tail -n +2 | wc -l", "host": true, "respuesta": "Hay {ultima} paquetes por actualizar, señor.", "confirmar": false, "captura": false }, { "id": "usuarios", "grupo": "sistema", "frases": [ "quien esta conectado", "hay alguien conectado" ], "acuse": "Voy, señor.", "comando": "who | wc -l", "host": true, "respuesta": "Hay {ultima} sesiones abiertas, señor.", "confirmar": false, "captura": false }, { "id": "gpu_procesos", "grupo": "sistema", "frases": [ "que usa la grafica", "quien usa la gpu" ], "acuse": "Lo miro, señor.", "comando": "O=$(nvidia-smi --query-compute-apps=process_name,used_gpu_memory --format=csv,noheader | awk -F, '{n=split($1,p,\"/\"); printf \"%s%s\\n\", p[n], $2}'); echo \"${O:-nada, la grafica esta libre}\"", "host": true, "respuesta": "En la grafica: {primera}, señor", "confirmar": false, "captura": false }, { "id": "audio_salida", "grupo": "sistema", "frases": [ "por donde suena", "salida de audio", "que altavoz esta puesto" ], "acuse": "Voy, señor.", "comando": "pactl get-default-sink 2>/dev/null", "host": true, "respuesta": "La salida es {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "audio_micro", "grupo": "sistema", "frases": [ "que microfono hay puesto", "entrada de audio" ], "acuse": "Voy, señor.", "comando": "pactl get-default-source 2>/dev/null", "host": true, "respuesta": "La entrada es {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "pantallas", "grupo": "sistema", "frases": [ "cuantas pantallas hay", "monitores conectados" ], "acuse": "Voy, señor.", "comando": "n=$(xrandr --listmonitors 2>/dev/null | head -1 | awk '{print $2}'); xrandr --listmonitors 2>/dev/null | tail -n +2 | awk '{print $NF}' | paste -sd', '; echo \"Tiene $n pantalla$([ \"$n\" = 1 ] || echo s) conectada$([ \"$n\" = 1 ] || echo s)\"", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "dispositivos_usb", "grupo": "sistema", "frases": [ "que hay conectado por usb", "dispositivos usb" ], "acuse": "Un momento, señor.", "comando": "lsusb | cut -d' ' -f7- | head -6", "host": true, "respuesta": "Por USB: {salida}, señor", "confirmar": false, "captura": false }, { "id": "bluetooth", "grupo": "sistema", "frases": [ "que hay emparejado por bluetooth", "dispositivos bluetooth" ], "acuse": "Voy, señor.", "comando": "bluetoothctl devices 2>/dev/null | cut -d' ' -f3- | head -5", "host": true, "respuesta": "Emparejados: {salida}, señor", "confirmar": false, "captura": false }, { "id": "flatpaks", "grupo": "sistema", "frases": [ "que flatpaks tengo", "aplicaciones flatpak" ], "acuse": "Voy, señor.", "comando": "flatpak list --app --columns=name | head -10", "host": true, "respuesta": "Instalados: {salida}, señor", "confirmar": false, "captura": false }, { "id": "docker", "grupo": "sistema", "frases": [ "hay contenedores corriendo", "contenedores docker" ], "acuse": "Lo miro, señor.", "comando": "O=$(docker ps --format '{{.Names}}' 2>/dev/null | head -5); echo \"${O:-ninguno en marcha}\"", "host": true, "respuesta": "Contenedores: {salida}, señor", "confirmar": false, "captura": false }, { "id": "git_estado", "grupo": "sistema", "frases": [ "como esta el repositorio", "estado de git" ], "acuse": "Voy, señor.", "comando": "cd ~/COFRE/CODERS/JARVIS && git status --short | wc -l", "host": true, "respuesta": "Hay {ultima} ficheros con cambios sin guardar, señor.", "confirmar": false, "captura": false }, { "id": "ollama_estado", "grupo": "sistema", "frases": [ "esta ollama funcionando", "como esta el modelo", "que modelo hay cargado" ], "acuse": "Lo compruebo, señor.", "comando": "M=$(curl -s --max-time 3 http://localhost:11434/api/ps | grep -o '\"name\":\"[^\"]*' | cut -d'\"' -f4 | head -1); echo \"${M:-ninguno ahora mismo}\"", "host": true, "respuesta": "Modelo cargado: {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "apagar_pantalla", "grupo": "sistema", "frases": [ "apaga la pantalla", "apagar pantalla" ], "acuse": "Enseguida, señor.", "comando": "xset dpms force off", "host": true, "respuesta": "Pantalla apagada, señor.", "confirmar": false, "captura": false }, { "id": "actualizar_lista", "grupo": "sistema", "frases": [ "actualiza los repositorios", "refresca los paquetes", "actualiza la lista de paquetes" ], "acuse": "Voy, necesito permiso de administrador, señor.", "comando": "sudo apt update", "host": true, "respuesta": "Repositorios actualizados, señor.", "confirmar": true, "captura": false }, { "id": "espacio_liberar", "grupo": "sistema", "frases": [ "limpia los paquetes viejos", "libera espacio de apt", "limpia el cache de paquetes" ], "acuse": "Necesito permiso para esto, señor.", "comando": "sudo apt autoclean", "host": true, "respuesta": "Cache de paquetes limpiada, señor.", "confirmar": true, "captura": false }, { "id": "servicio_reiniciar", "grupo": "sistema", "frases": [ "reinicia el servicio de red", "reinicia la red" ], "acuse": "Necesito permiso de administrador, señor.", "comando": "sudo systemctl restart NetworkManager", "host": true, "respuesta": "Red reiniciada, señor.", "confirmar": true, "captura": false }, { "id": "fecha_sincronizar", "grupo": "sistema", "frases": [ "sincroniza la hora", "pon la hora en hora" ], "acuse": "Un momento, con permiso, señor.", "comando": "sudo systemctl restart systemd-timesyncd", "host": true, "respuesta": "Hora sincronizada, señor.", "confirmar": true, "captura": false }, { "id": "bloquear", "grupo": "sistema", "frases": [ "bloquea la sesion", "bloquear pantalla", "echa el cerrojo" ], "acuse": "Ahora mismo, señor.", "comando": "loginctl lock-session", "host": true, "respuesta": "Sesion bloqueada, señor.", "confirmar": false, "captura": false }, { "id": "volumen_subir", "grupo": "sistema", "frases": [ "sube el volumen", "mas volumen" ], "acuse": "Voy, señor.", "comando": "pactl set-sink-volume @DEFAULT_SINK@ +10%", "host": true, "respuesta": "Volumen subido, señor.", "confirmar": false, "captura": false }, { "id": "volumen_bajar", "grupo": "sistema", "frases": [ "baja el volumen", "menos volumen" ], "acuse": "Voy, señor.", "comando": "pactl set-sink-volume @DEFAULT_SINK@ -10%", "host": true, "respuesta": "Volumen bajado, señor.", "confirmar": false, "captura": false }, { "id": "volumen_silencio", "grupo": "sistema", "frases": [ "silencia el sistema", "quita el sonido", "mutea el sistema" ], "acuse": "Voy, señor.", "comando": "pactl set-sink-mute @DEFAULT_SINK@ toggle", "host": true, "respuesta": "Sonido conmutado, señor.", "confirmar": false, "captura": false }, { "id": "brillo_subir", "grupo": "sistema", "frases": [ "sube el brillo", "mas brillo" ], "acuse": "Voy, señor.", "comando": "brightnessctl set +10% 2>/dev/null || xrandr --output $(xrandr | awk '/ connected/{print $1; exit}') --brightness 1", "host": true, "respuesta": "Brillo subido, señor.", "confirmar": false, "captura": false }, { "id": "captura_pantalla", "grupo": "sistema", "frases": [ "hazme una captura", "captura de pantalla", "haz una foto de la pantalla" ], "acuse": "Enseguida se la hago, señor.", "comando": "D=$(xdg-user-dir PICTURES 2>/dev/null || echo ~); F=$D/captura-$(date +%H%M%S).png; import -window root \"$F\" 2>/dev/null || gnome-screenshot -f \"$F\" 2>/dev/null || ffmpeg -loglevel error -f x11grab -video_size $(xdpyinfo | awk \"/dimensions/{print \\$2}\") -i $DISPLAY -frames:v 1 -y \"$F\" 2>/dev/null; [ -s \"$F\" ] && echo \"$F\"", "host": true, "respuesta": "Captura guardada, señor.", "confirmar": false, "captura": false }, { "id": "papelera_tamano", "grupo": "sistema", "frases": [ "cuanto ocupa la papelera", "papelera llena" ], "acuse": "Voy, señor.", "comando": "du -sh ~/.local/share/Trash 2>/dev/null | cut -f1", "host": true, "respuesta": "La papelera ocupa {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "descargas_listar", "grupo": "sistema", "frases": [ "que hay en descargas", "ultimas descargas", "que me he bajado" ], "acuse": "Voy, señor.", "comando": "ls -t ~/Downloads 2>/dev/null | head -6", "host": true, "respuesta": "Hay {lineas} cosas en descargas, señor", "confirmar": false, "captura": false }, { "id": "descargas_abrir", "grupo": "sistema", "frases": [ "abre la carpeta de descargas", "abreme descargas", "abre descargas", "abreme las descargas" ], "acuse": "Enseguida se la abro, señor.", "comando": "xdg-open ~/Downloads", "host": true, "respuesta": "Carpeta de descargas abierta, señor.", "confirmar": false, "captura": false }, { "id": "documentos_abrir", "grupo": "sistema", "frases": [ "abre mis documentos", "abreme documentos" ], "acuse": "Enseguida, señor.", "comando": "xdg-open ~/Documents", "host": true, "respuesta": "Documentos abierto, señor.", "confirmar": false, "captura": false }, { "id": "cofre_abrir", "grupo": "sistema", "frases": [ "abre el cofre", "abreme el cofre" ], "acuse": "Enseguida, señor.", "comando": "xdg-open ~/COFRE", "host": true, "respuesta": "COFRE abierto, señor.", "confirmar": false, "captura": false }, { "id": "ficheros_recientes", "grupo": "sistema", "frases": [ "que he tocado ultimamente", "ficheros recientes", "en que estaba trabajando" ], "acuse": "Lo miro, señor.", "comando": "find ~ -maxdepth 3 -type f -mmin -180 -not -path '*/.*' 2>/dev/null | head -6", "host": true, "respuesta": "Tocado en las ultimas horas: {salida}, señor", "confirmar": false, "captura": false }, { "id": "grandes", "grupo": "sistema", "frases": [ "que ocupa mas sitio", "que tengo en descargas", "que me esta llenando la carpeta" ], "acuse": "Lo miro, señor.", "comando": "du -ah ~/Downloads ~/Descargas ~/Documents ~/Desktop 2>/dev/null | sort -rh | head -6", "host": true, "respuesta": "Lo mas grande: {salida}, señor", "confirmar": false, "captura": false }, { "id": "terminal_abrir", "grupo": "sistema", "frases": [ "abre una terminal", "abreme una terminal", "abre la terminal", "saca una terminal", "quiero una terminal" ], "acuse": "Ahora mismo, señor.", "comando": "gnome-terminal 2>/dev/null || kgx 2>/dev/null || xterm 2>/dev/null &", "host": true, "respuesta": "Terminal abierta, señor.", "confirmar": false, "captura": false }, { "id": "terminal_aqui", "grupo": "sistema", "frases": [ "abre una terminal en el cofre", "terminal en el cofre" ], "acuse": "Enseguida, señor.", "comando": "gnome-terminal --working-directory=$HOME/COFRE 2>/dev/null || kgx 2>/dev/null &", "host": true, "respuesta": "Ahi la tiene, en el cofre, señor.", "confirmar": false, "captura": false }, { "id": "videos_listar", "grupo": "sistema", "frases": [ "que peliculas tengo", "que videos tengo", "lista mis videos" ], "acuse": "Un momento, lo miro, señor.", "comando": "timeout 12 find $HOME/Videos $HOME/Downloads $HOME/Desktop -type f -regextype posix-extended -iregex '.*\\.(mp4|mkv|avi|webm|mov|m4v)$' 2>/dev/null | head -12", "host": true, "respuesta": "He encontrado {lineas}, señor.", "confirmar": false, "captura": false }, { "id": "pelicula_abrir", "grupo": "sistema", "frases": [ "pon la pelicula", "abre la pelicula", "reproduce el video", "pon el video", "quiero ver" ], "acuse": "Enseguida se la pongo, señor.", "comando": "v=$(timeout 12 find $HOME/Videos $HOME/Downloads $HOME/Desktop -type f -regextype posix-extended -iregex '.*{argumento}.*\\.(mp4|mkv|avi|webm|mov|m4v)$' 2>/dev/null | head -1); if [ -n \"$v\" ]; then xdg-open \"$v\" >/dev/null 2>&1 & echo \"Poniendo $(basename \"$v\")\"; else echo \"No encuentro ese video\"; fi", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": true }, { "id": "ventanas_listar", "grupo": "ventanas", "frases": [ "que ventanas tengo abiertas", "que ventanas hay abiertas", "lista las ventanas" ], "acuse": "Un momento, lo miro, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh listar", "host": true, "respuesta": "Tiene {lineas} ventanas abiertas, señor.", "confirmar": false, "captura": false }, { "id": "ventana_izquierda", "grupo": "ventanas", "frases": [ "pon la ventana a la izquierda", "manda la ventana a la izquierda", "esta ventana a la izquierda" ], "acuse": "Ahora mismo, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta izquierda", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_derecha", "grupo": "ventanas", "frases": [ "pon la ventana a la derecha", "manda la ventana a la derecha", "esta ventana a la derecha" ], "acuse": "Ahora mismo, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta derecha", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_arriba", "grupo": "ventanas", "frases": [ "pon la ventana arriba del todo", "manda la ventana arriba" ], "acuse": "Voy, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta arriba", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_abajo", "grupo": "ventanas", "frases": [ "pon la ventana abajo del todo", "manda la ventana abajo" ], "acuse": "Voy, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta abajo", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_centrar", "grupo": "ventanas", "frases": [ "centra la ventana activa", "pon la ventana en el centro" ], "acuse": "Enseguida, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta centro", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_maximizar", "grupo": "ventanas", "frases": [ "maximiza la ventana activa", "pon la ventana a pantalla completa" ], "acuse": "Ahora mismo, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh maximiza esta", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_restaurar", "grupo": "ventanas", "frases": [ "restaura la ventana activa", "quita la pantalla completa" ], "acuse": "Voy, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh restaura esta", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_minimizar", "grupo": "ventanas", "frases": [ "minimiza la ventana activa", "esconde la ventana activa" ], "acuse": "Voy, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh minimiza esta", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": false }, { "id": "ventana_a_pantalla", "grupo": "ventanas", "frases": [ "manda la ventana a la pantalla", "pasa la ventana a la pantalla" ], "acuse": "Ahora mismo, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh mover esta {argumento}", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": true }, { "id": "ventana_al_escritorio", "grupo": "ventanas", "frases": [ "manda la ventana al escritorio", "pasa la ventana al escritorio" ], "acuse": "Voy, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh escritorio esta {argumento}", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": true }, { "id": "pantalla_nombrar", "grupo": "ventanas", "frases": [ "a esta pantalla llamala", "llama a esta pantalla" ], "acuse": "Anotado, señor.", "comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh alias 1 {argumento}", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": true }, { "id": "buscar_fichero", "grupo": "ficheros", "frases": [ "busca el fichero", "buscame el fichero", "encuentra el fichero" ], "acuse": "Lo busco, señor.", "comando": "timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE/CODERS $HOME/Downloads -iname '*{argumento}*' -not -path '*/.*' -not -path '*/node_modules/*' -not -path '*venv*' 2>/dev/null | head -12", "host": true, "respuesta": "He encontrado {lineas}, señor", "confirmar": false, "captura": true }, { "id": "buscar_carpeta", "grupo": "ficheros", "frases": [ "busca la carpeta", "encuentra la carpeta" ], "acuse": "La busco, señor.", "comando": "find ~ -type d -iname '*{argumento}*' -not -path '*/.*' 2>/dev/null | head -12", "host": true, "respuesta": "Carpetas encontradas: {salida}, señor", "confirmar": false, "captura": true }, { "id": "grep_recursivo", "grupo": "ficheros", "frases": [ "busca el texto", "busca la palabra en mis ficheros", "donde pone", "que fichero contiene" ], "acuse": "Lo busco en sus ficheros, señor.", "comando": "timeout 12 grep -rIn --exclude-dir='.*' --exclude-dir='*venv*' --exclude-dir=node_modules --exclude-dir=__pycache__ --exclude-dir=modelos --exclude-dir=muestras -m1 {argumento} $HOME/Documents $HOME/Desktop $HOME/COFRE/CODERS 2>/dev/null | head -12", "host": true, "respuesta": "{lineas} ficheros lo contienen, señor.", "confirmar": false, "captura": true }, { "id": "leer_fichero", "grupo": "ficheros", "frases": [ "leeme el fichero", "abre y leeme", "lee el fichero" ], "acuse": "Voy a leerlo, señor.", "comando": "f=$(timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE/CODERS -iname '*{argumento}*' -type f -not -path '*/.*' 2>/dev/null | head -1); [ -n \"$f\" ] && head -c 800 \"$f\" || echo \"no lo encuentro\"", "host": true, "respuesta": "{salida}, señor", "confirmar": false, "captura": true }, { "id": "abrir_fichero", "grupo": "ficheros", "frases": [ "abre el fichero", "abreme el fichero" ], "acuse": "Enseguida se lo abro, señor.", "comando": "f=$(find ~ -iname '*{argumento}*' -type f -not -path '*/.*' 2>/dev/null | head -1); [ -n \"$f\" ] && xdg-open \"$f\" && echo \"$f\" || echo 'no lo encuentro'", "host": true, "respuesta": "Abierto {ultima}, señor.", "confirmar": false, "captura": true }, { "id": "abrir_carpeta", "grupo": "ficheros", "frases": [ "abre la carpeta", "abreme la carpeta" ], "acuse": "Enseguida, señor.", "comando": "a={argumento}; if [ -d \"$a\" ]; then d=\"$a\"; else d=$(timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE $HOME/Downloads -type d -iname \"*$a*\" -not -path \"*/.*\" -not -path \"*/node_modules/*\" 2>/dev/null | head -1); fi; if [ -n \"$d\" ]; then xdg-open \"$d\" >/dev/null 2>&1 & echo \"Abierta $(basename \"$d\")\"; else echo \"No encuentro esa carpeta\"; fi", "host": true, "respuesta": "{ultima}, señor", "confirmar": false, "captura": true }, { "id": "tamano_carpeta", "grupo": "ficheros", "frases": [ "cuanto ocupa la carpeta", "tamaño de la carpeta" ], "acuse": "Lo calculo, señor.", "comando": "a={argumento}; if [ -d \"$a\" ]; then d=\"$a\"; else d=$(timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE $HOME/Downloads -type d -iname \"*$a*\" -not -path \"*/.*\" 2>/dev/null | head -1); fi; [ -n \"$d\" ] && du -sh \"$d\" 2>/dev/null | cut -f1 || echo \"no la encuentro\"", "host": true, "respuesta": "Ocupa {ultima}, señor.", "confirmar": false, "captura": true }, { "id": "proceso_buscar", "grupo": "ficheros", "frases": [ "esta corriendo", "se esta ejecutando", "hay algun proceso de" ], "acuse": "Lo compruebo, señor.", "comando": "pgrep -c -f {argumento} 2>/dev/null || echo 0", "host": true, "respuesta": "Hay {ultima} procesos que encajan, señor.", "confirmar": false, "captura": true }, { "id": "proceso_matar", "grupo": "ficheros", "frases": [ "mata el proceso", "cierra el proceso", "termina el proceso" ], "acuse": "Antes de matarlo, confirmeme, señor.", "comando": "pkill -f {argumento}", "host": true, "respuesta": "Proceso terminado, señor.", "confirmar": true, "captura": true }, { "id": "instalado", "grupo": "ficheros", "frases": [ "tengo instalado", "esta instalado" ], "acuse": "Lo miro, señor.", "comando": "command -v {argumento} >/dev/null && echo si || echo no", "host": true, "respuesta": "Instalado: {ultima}, señor.", "confirmar": false, "captura": true }, { "id": "manual", "grupo": "ficheros", "frases": [ "para que sirve el comando", "que hace el comando" ], "acuse": "Voy, señor.", "comando": "whatis {argumento} 2>/dev/null | head -1", "host": true, "respuesta": "{salida}, señor", "confirmar": false, "captura": true }, { "id": "oasis_corriendo", "grupo": "oasis", "frases": [ "esta oasis funcionando", "esta corriendo oasis", "oasis esta levantado", "esta corriendo casis" ], "acuse": "Lo compruebo, señor.", "comando": "pgrep -c -f 'oasis|ssb-server|sbot' 2>/dev/null || echo 0", "host": true, "respuesta": "Procesos de Oasis en marcha: {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "oasis_sincronizando", "grupo": "oasis", "frases": [ "estan sincronizando los pubs", "como van los pubs", "se estan sincronizando los pubs", "estan sincronizando los push", "estan sincronizando los puos", "sincronizando los pubs", "como van los push" ], "acuse": "Voy a mirar las conexiones, señor.", "comando": "python3 -c \"import json,time; d=json.load(open('$HOME/.ssb/conn.json')); act=sum(1 for v in d.values() if time.time()*1000-v.get('stateChange',0)<300000); fail=sum(1 for v in d.values() if v.get('failure',0)>0); print(f'{len(d)} pubs, {act} activos hace poco, {fail} con fallos')\"", "host": true, "respuesta": "{ultima}, señor.", "confirmar": false, "captura": false }, { "id": "oasis_conexiones", "grupo": "oasis", "frases": [ "cuantos pubs hay conectados", "conexiones de oasis" ], "acuse": "Un momento, señor.", "comando": "cat ~/.ssb/conn.json 2>/dev/null | grep -c 'connected' || echo 0", "host": true, "respuesta": "Pubs conectados: {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "oasis_tamano", "grupo": "oasis", "frases": [ "cuanto ocupa oasis", "tamaño de la base de ssb" ], "acuse": "Lo calculo, señor.", "comando": "du -sh ~/.ssb 2>/dev/null | cut -f1", "host": true, "respuesta": "La base de SSB ocupa {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "oasis_abrir", "grupo": "oasis", "frases": [ "abre oasis", "abreme oasis" ], "acuse": "Enseguida se lo abro, señor.", "comando": "xdg-open http://localhost:3000 2>/dev/null && echo abierto || echo 'no responde'", "host": true, "respuesta": "Oasis: {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "oasis_blobs", "grupo": "oasis", "frases": [ "cuanto ocupan los blobs", "tamaño de los blobs" ], "acuse": "Voy, señor.", "comando": "du -sh ~/.ssb/blobs 2>/dev/null | cut -f1", "host": true, "respuesta": "Los blobs ocupan {ultima}, señor.", "confirmar": false, "captura": false }, { "id": "red_dispositivos", "grupo": "pentest", "frases": [ "escanea mi red", "que hay en mi red", "dispositivos en la red", "quien esta en la red" ], "acuse": "Voy a escanear la red local, necesito su permiso, señor.", "comando": "R=$(ip route | awk '/proto.*src/{for(i=1;i<=NF;i++)if($i~/\\//)print $i; exit}'); sudo nmap -sn ${R:-192.168.1.0/24} | grep -E 'Nmap scan|MAC' | head -30", "host": true, "respuesta": "Estos equipos hay en la red, señor: {salida}", "confirmar": true, "captura": false }, { "id": "puertos_host", "grupo": "pentest", "frases": [ "que puertos tiene abiertos", "escanea los puertos de", "escanea el host" ], "acuse": "Un escaneo de puertos, con su permiso, señor.", "comando": "T={argumento}; echo \"$T\" | grep -qE '^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.|127\\.|localhost)' && nmap -F \"$T\" | grep -E '^[0-9]+/|Nmap scan' | head -20 || echo 'Solo objetivos de la red local, señor.'", "host": true, "respuesta": "{salida}, señor", "confirmar": true, "captura": true }, { "id": "mis_puertos", "grupo": "pentest", "frases": [ "que puertos tengo abiertos yo", "mis puertos abiertos", "que estoy exponiendo" ], "acuse": "Lo compruebo, señor.", "comando": "ss -ltnp 2>/dev/null | awk 'NR>1{print $4}' | sort -u | head -15", "host": true, "respuesta": "Tengo {lineas} puertos a la escucha, señor", "confirmar": false, "captura": false }, { "id": "exploit_buscar", "grupo": "pentest", "frases": [ "busca un exploit para", "busca exploits de", "hay algun exploit de" ], "acuse": "Lo busco en la base de exploits, señor.", "comando": "searchsploit {argumento} 2>/dev/null | grep -vE '^-|Shellcode' | head -12", "host": true, "respuesta": "Esto he encontrado, señor: {salida}", "confirmar": false, "captura": true }, { "id": "dominio_resolver", "grupo": "pentest", "frases": [ "resuelve el dominio", "que ip tiene el dominio", "a que ip apunta" ], "acuse": "Lo resuelvo, señor.", "comando": "dig +short {argumento} 2>/dev/null | head -5", "host": true, "respuesta": "Resuelve a: {salida}, señor", "confirmar": false, "captura": true }, { "id": "dominio_whois", "grupo": "pentest", "frases": [ "de quien es el dominio", "quien registro", "whois de" ], "acuse": "Lo consulto, señor.", "comando": "whois {argumento} 2>/dev/null | grep -iE 'registrar:|creation|expir|org' | head -6", "host": true, "respuesta": "{salida}, señor", "confirmar": false, "captura": true }, { "id": "cabeceras_web", "grupo": "pentest", "frases": [ "que servidor usa", "cabeceras de", "que tecnologia usa la web" ], "acuse": "Miro las cabeceras, señor.", "comando": "curl -sI --max-time 8 {argumento_url} 2>/dev/null | grep -iE 'server:|x-powered|location' | head -6", "host": true, "respuesta": "{salida}, señor", "confirmar": false, "captura": true }, { "id": "hash_identificar", "grupo": "pentest", "frases": [ "que tipo de hash es", "identifica el hash" ], "acuse": "Lo miro, señor.", "comando": "H={argumento}; L=${#H}; case $L in 32)echo 'MD5, probablemente';; 40)echo 'SHA1';; 64)echo 'SHA256';; *)echo \"$L caracteres, no lo tengo claro\";; esac", "host": true, "respuesta": "{ultima}, señor.", "confirmar": false, "captura": true }, { "id": "ff_gmail", "grupo": "firefox", "frases": [ "abre el correo", "abre gmail", "abreme el correo", "a ver el correo", "abrir el correo" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://mail.google.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_calendario", "grupo": "firefox", "frases": [ "abre el calendario", "abreme el calendario" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://calendar.google.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_drive", "grupo": "firefox", "frases": [ "abre drive", "abre el drive" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://drive.google.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_maps", "grupo": "firefox", "frases": [ "abre el mapa", "abre google maps", "abreme los mapas" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://maps.google.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_youtube", "grupo": "firefox", "frases": [ "abre youtube", "abreme youtube", "abre yo tube", "abre you tube" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://youtube.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_github", "grupo": "firefox", "frases": [ "abre github", "abreme github" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://github.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_gitea", "grupo": "firefox", "frases": [ "abre gitea", "abre el gitea" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://gitea.laenre.net' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_wikipedia", "grupo": "firefox", "frases": [ "abre la wikipedia", "abreme wikipedia" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://es.wikipedia.org' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_traductor", "grupo": "firefox", "frases": [ "abre el traductor", "abreme el traductor" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://translate.google.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_chatgpt_no", "grupo": "firefox", "frases": [ "abre duckduckgo", "abre el buscador" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://duckduckgo.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_mastodon", "grupo": "firefox", "frases": [ "abre mastodon", "abreme mastodon" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://mastodon.social' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_reddit", "grupo": "firefox", "frases": [ "abre reddit" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://reddit.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_hackernews", "grupo": "firefox", "frases": [ "abre hacker news", "abreme hacker news" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://news.ycombinator.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_archwiki", "grupo": "firefox", "frases": [ "abre la wiki de arch", "abre archwiki" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://wiki.archlinux.org' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_stackoverflow", "grupo": "firefox", "frases": [ "abre stack overflow", "abreme stackoverflow" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://stackoverflow.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_flathub", "grupo": "firefox", "frases": [ "abre flathub" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://flathub.org' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_openstreetmap", "grupo": "firefox", "frases": [ "abre openstreetmap", "abre el mapa libre" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://openstreetmap.org' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_wetransfer", "grupo": "firefox", "frases": [ "abre wetransfer" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://wetransfer.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_bandcamp", "grupo": "firefox", "frases": [ "abre bandcamp" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://bandcamp.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_soundcloud", "grupo": "firefox", "frases": [ "abre soundcloud" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://soundcloud.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_spotify_web", "grupo": "firefox", "frases": [ "abre spotify" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://open.spotify.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_twitch", "grupo": "firefox", "frases": [ "abre twitch" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://twitch.tv' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_archive", "grupo": "firefox", "frases": [ "abre archive punto org", "abre internet archive" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://archive.org' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_libgen", "grupo": "firefox", "frases": [ "abre la biblioteca", "abre library genesis" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://libgen.is' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_meteo", "grupo": "firefox", "frases": [ "abre el tiempo", "que tiempo va a hacer", "abre la meteorologia" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://www.aemet.es' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_renfe", "grupo": "firefox", "frases": [ "abre renfe", "mira los trenes" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://www.renfe.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_idealista", "grupo": "firefox", "frases": [ "abre idealista" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://www.idealista.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_wallapop", "grupo": "firefox", "frases": [ "abre wallapop" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://es.wallapop.com' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_oasis_web", "grupo": "firefox", "frases": [ "abre oasis en el navegador" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'http://localhost:3000' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_router", "grupo": "firefox", "frases": [ "abre el router", "entra en el router" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'http://192.168.1.1' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_localhost", "grupo": "firefox", "frases": [ "abre localhost" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'http://localhost' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_correo_local", "grupo": "firefox", "frases": [ "abre el webmail" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://webmail.laenre.net' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_nodo50", "grupo": "firefox", "frases": [ "abre nodo cincuenta", "abre nodo50" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://nodo50.org' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_hackmeeting", "grupo": "firefox", "frases": [ "abre hackmeeting" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://sindominio.net/hackmeeting' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_reas", "grupo": "firefox", "frases": [ "abre reas", "abre la red de economia alternativa" ], "acuse": "Enseguida se lo abro, señor.", "comando": "firefox --new-tab 'https://www.economiasolidaria.org' >/dev/null 2>&1 &", "host": true, "respuesta": "Ya lo tiene abierto, señor.", "confirmar": false, "captura": false }, { "id": "ff_buscar_web", "grupo": "firefox", "frases": [ "busca en internet", "buscame en internet", "busca en la web" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_duck", "grupo": "firefox", "frases": [ "busca en duckduckgo" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_youtube", "grupo": "firefox", "frases": [ "busca en youtube", "buscame en youtube", "busca en yo tube", "buscan youtube", "buscan yo tube", "busca en you tube" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://www.youtube.com/results?search_query={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_wikipedia", "grupo": "firefox", "frases": [ "busca en la wikipedia", "buscame en wikipedia" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://es.wikipedia.org/w/index.php?search={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_github", "grupo": "firefox", "frases": [ "busca en github", "buscame en github" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://github.com/search?q={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_mapas", "grupo": "firefox", "frases": [ "busca en el mapa", "buscame en el mapa", "donde esta" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://www.openstreetmap.org/search?query={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_traducir", "grupo": "firefox", "frases": [ "traduce", "traduceme" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://translate.google.com/?sl=auto&tl=es&text={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_imagenes", "grupo": "firefox", "frases": [ "busca imagenes de", "buscame imagenes de" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}&iax=images&ia=images\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_paquete", "grupo": "firefox", "frases": [ "busca el paquete", "busca en flathub" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://flathub.org/apps/search?q={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_precio", "grupo": "firefox", "frases": [ "busca el precio de", "cuanto cuesta" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}+precio\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_receta", "grupo": "firefox", "frases": [ "busca la receta de", "receta de" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://duckduckgo.com/?q=receta+{argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_musica", "grupo": "firefox", "frases": [ "busca la cancion", "busca en bandcamp" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://bandcamp.com/search?q={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_stack", "grupo": "firefox", "frases": [ "busca en stack overflow", "como se hace en codigo" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://stackoverflow.com/search?q={argumento_url}\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_manual", "grupo": "firefox", "frases": [ "busca la documentacion de", "documentacion de" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}+docs\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_buscar_noticia", "grupo": "firefox", "frases": [ "busca noticias de", "noticias sobre" ], "acuse": "Lo busco, señor.", "comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}&iar=news&ia=news\" >/dev/null 2>&1 &", "host": true, "respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.", "confirmar": false, "captura": true }, { "id": "ff_firefox_abrir", "grupo": "firefox", "frases": [ "abre el navegador", "abre firefox", "abreme el navegador" ], "acuse": "Voy, señor.", "comando": "firefox >/dev/null 2>&1 &", "host": true, "respuesta": "Navegador abierto.", "confirmar": false, "captura": false }, { "id": "ff_firefox_privado", "grupo": "firefox", "frases": [ "abre una ventana privada", "modo incognito", "navegacion privada" ], "acuse": "Voy, señor.", "comando": "firefox --private-window >/dev/null 2>&1 &", "host": true, "respuesta": "Ventana privada abierta.", "confirmar": false, "captura": false }, { "id": "ff_firefox_cerrar", "grupo": "firefox", "frases": [ "cierra el navegador", "cierra firefox" ], "acuse": "Voy, señor.", "comando": "pkill -f 'firefox' ", "host": true, "respuesta": "Navegador cerrado.", "confirmar": true, "captura": false }, { "id": "ff_firefox_pestanas", "grupo": "firefox", "frases": [ "cuantas pestañas tengo abiertas", "cuantas pestañas hay" ], "acuse": "Voy, señor.", "comando": "ls ~/.mozilla/firefox/*/sessionstore-backups/recovery.jsonlz4 2>/dev/null | wc -l", "host": true, "respuesta": "Tengo {ultima} sesiones guardadas; el numero exacto de pestañas solo lo sabe el navegador.", "confirmar": false, "captura": false } ] }