JKLM Bombparty Bot | Autoplay Like a Human !

Описание к видео JKLM Bombparty Bot | Autoplay Like a Human !

How it works ? (translate)

J'ai codé ce robot en Python à l'aide du module Selenium (il permet de contrôler un navigateur Internet : on peut extraire des éléments des pages HTML, remplir des formulaires, cliquer des boutons, récupérer les requêtes (visibles dans la section "Network" du mode développeur) …).

En donnant le code d'une salle, le bot la rejoint et y jouera indéfiniment.
Il détecte l'apparition de certains boutons, cela lui permet de rejoindre la partie, de savoir quand est son tour et d'écrire sa réponse quand il est invité à le faire.

Voici son fonctionnement lors d'une partie :
Lorsque c'est le tour du robot, il récupère la syllabe et cherche dans une liste de mots communs français (que j'ai créé en extrayant les mots d'un livre (Harry Potter I)) tous les mots contenant cette syllabe. S'il n'en trouve pas, il cherche alors dans une autre liste de mots (qui contient plus de 380 000 mots). Toutes les réponses possibles sont alors triées de la plus courte à la plus longue et le robot écrit la première. Si la première réponse ne marchent pas, alors il écrit la seconde et ainsi de suite…
Pour soumettre sa réponse, le robot l'écrit lettre par lettre par intervalles de temps aléatoires (compris entre 10 et 500 millisecondes), il y a une probabilité de 10% par lettre que le robot fasse une faute de frappes (pouvant aller jusqu'à 3 caractères), il se corrige après cette dernière et continu d'écrire sa réponse.
Une fois que la réponse a été acceptée, elle est enregistrée dans une liste et la prochaine fois que le robot recherchera des mots, il ne proposera pas en tant que réponse possible un mot contenu dans cette liste (car on ne peut pas utiliser plusieurs fois le même mot).
Lorsque ce n'est pas le tour du robot, c'est-à-dire quand c'est celui des autres joueurs, il cherche tout de même des réponses possibles aux syllabes (au cas où l'utilisateur du robot voudrait aider les joueurs). Lorsque que le tour d'un joueur se termine, le robot récupère sa réponse (s'il en a donné une valide) en la recherchant dans les requêtes (dans le "websocket" du site).
Il la recherche dans les requêtes car elle n'est pas accessible dans la page HTML, puisque tout le jeu (sauf le texte de la syllabe) est dans une balise "canvas", et n'ayant pas trouvé le moyen d'accéder à son contenu depuis la page HTML, j'ai utilisé la "méthode des requêtes"). Si sa réponse était correcte, elle serait ajoutée à la liste des mots déjà utilisés.
À la fin d'une partie, le robot réinitialise la liste de mots déjà utilisés et écrit dans un fichier texte quelques statistiques de la partie (qui a gagné, durée de la partie, nombre de mots utilisés…). Il est donc prêt à rejouer.

J'ai fait plusieurs versions de robot : un robot où l'on peut choisir son pseudo et sa photo de profil et un autre robot qui est fait pour être ajouté plusieurs fois à une même salle (ce sont les 4 autres joueurs dans la vidéo). Ils prennent un pseudo aléatoire dans le style du site (GuestXXXX) et n'écrivent pas dans la console du programme (sinon ce serait illisible). J'ai créé cette version pour faire des blagues et tester la première version de mon robot.

Why did I create this bot ? (translate)

Je n'ai pas fait ce robot avec l'intention de gagner toutes les parties de Bombparty (d'ailleurs, on peut régler certains paramètres de manière à ce que le bot puisse perdre (en augmentant son temps de réaction et d'écriture par exemple, c'est-à-dire "simuler" la défaite)) mais pour m'entraîner à faire du "web scraping", développer des programmes d'automatisation et m'amuser (lors de sa création).
De plus, la triche est fortement présente sur ce jeu. Je dirais même que le jeu est plus intéressant en essayant de développer des robots de triche non-remarquables plutôt que de retenir des dizaines de mots par syllabe…
Le jeu garde tout de même son intérêt initial quand on joue avec des amis : on joue avec des gens de notre niveau et on peut être sûr qu'il n'y aura pas de triche.

Why I won't publish the code ? (translate)

Je ne publie pas le code pour éviter la triche, mais aussi pour éviter le vole.
Le robot "officiel" de JKLM pour Bombparty se nomme BirdBot, il est bien plus complet que le mien et doit sûrement fonctionner d'une manière différente (à noter que son but est différent du mien : on voit que c'est un robot (il écrit la réponse instantanément et à la vitesse de la lumière), il a été créé pour que de vrais joueurs puissent s'entraîner contre lui (et battre des records)). Et lors de mes tests, j'ai pu voir d'étranges copies de ce dernier, j'en ai donc déduit que certains réutilisaient ou copiaient son code.
Et c'est bien évidemment pour les joueurs ne se suspecte pas de triche à tort, puisqu'avec de bons paramètres, mon robot peut vraiment bien imiter le style de jeu d'un humain, le simple fait d'être "bon" serait un motif pour accuser un vrai joueur de tricheur (la plupart des tricheurs sont remarquables, car ils écrivent des mots trop peu communs).

Комментарии

Информация по комментариям в разработке