Tengo un juego de lienzo javascript con pixi.js que requiere que un jugador presione una cierta combinación de botones para completar un nivel. Básicamente, tienen que presionar el botón que coincida con un color determinado.
Resulta que los jugadores están escribiendo bots en python para realizar esta tarea y obtienen la puntuación máxima cada vez. El juego ya está disponible y los usuarios disfrutan jugando, así que no puedo cambiar nada en cuanto a la jugabilidad.
Así que pensé en algunas posibles soluciones, pero tengo algunas preocupaciones.
El captcha dañará la experiencia del usuario, y hay toneladas de videos sobre cómo evitarlo. 2 y 3 fallarán después de que los creadores de los bots comprendan lo que está sucediendo. Así que estoy realmente atascado en lo que podría hacer.
Consideraría un período de gracia aleatorio antes de permitir que se haga clic en los botones. esto puede desconcertar a algunos bots, pero es evitable.
Además de eso, perfilaría el momento de los clics/interacciones. Cada vez que se solicite el siguiente nivel, compare con el perfil y, si son consistentemente iguales, introduzca una identificación de botón aleatoria, forma de botón (círculo, óvalo, cuadrado, etc.), ubicación de botón (botones de intercambio) para evitar secuencias de comandos fáciles. También se puede variar la fuente y el texto real.
También cambiaría el elemento de entrada a <input type="image"> ya que le dará las coordenadas exactas (si es posible, no estoy familiarizado con pixi.js) y esto ayudará en la creación de perfiles.
También podría implementar algún tipo de rastreador de posición del mouse, pero las personas en pantallas táctiles no producirán datos para esto. Puede complementar con una verificación adicional si la entrada del usuario es táctil, pero un bot podría evitarlo fácilmente.
EDITAR
No sé si sería aplicable alguna biblioteca para detectar otras importaciones de JavaScript y, por lo tanto, detectar posibles bots. Podría ser una vía a considerar.
Hacer algo como esto: verificar si el usuario tiene una extensión de Chrome instalada para verificar que se está ejecutando en un navegador y no en un entorno de python podría ser otra vía. Significaría que restringe a sus usuarios a ciertos navegadores, y muchos otros códigos podrían eludirse. El costo/beneficio debe tenerse en cuenta aquí.
Si todo se ejecuta a través del navegador real con algún tipo de interfaz sin cabeza, no será útil en absoluto.
EDITAR 2
Una búsqueda rápida en Google del python automate browser game muestra un tutorial sobre cómo automatizar juegos de navegador con python . basándonos en una mirada superficial, hacer que los botones se muevan y cambiar la fuente sería efectivo, e incluso cambiar el tamaño del área de juego "al azar" (incluso si tiene una función de pantalla completa) puede ser una defensa viable. Nuevamente, seguir el tutorial e intentar automatizarlo usando eso y ver cómo bloquearlo sería un buen ejercicio.
También podría considerar pedir ayuda a algunos estudiantes. Esta podría ser una buena idea de proyecto para muchos cursos de informática que ofrecen cursos basados en proyectos. También podría ser un tipo de trabajo de estudiante, si desea asegurarse de obtener un resultado y un "informe".
Creo que tu enfoque es válido. Parece un poco excesivo agregar Capcha entre cada nivel, tal vez agregarlo antes de que comience el juego.
Puede ser una buena idea verificar el intervalo entre clics individuales y definir algún umbral en el que pueda asumir con seguridad que fue un bot quien hizo clic en el botón.
Otro enfoque que podría tomar es hacer que sea más complicado buscar los botones correctos. Enfoques como aleatorizar los ID de los elementos, no mostrar la etiqueta dentro de los botones sino como elementos separados (supongo que es un juego con un tamaño de ventana fijo y no te importa tanto el móvil).
No estoy familiarizado con Pixi.js, pero ese podría ser un enfoque a considerar.
----------------------- Editar -----------------------
¿Qué pasa si ejecutas tu juego en un iframe ?