Cela fait maintenant une dizaine de jours que j'ai posté mon article présentant A.T.O.S., mon projet personnel de "TOing online automatique". Après avoir fait ses premiers pas sur le serveur Smash Void, je constate que j'ai eu de nombreux positifs, plus que je ne le pensais. Sans exagérer, je pensais que les joueurs n'y verraient pas forcément d'aspect positif de leur côté, mais il se trouve que ça a été le cas : A.T.O.S. permet (dans les meilleures conditions) un TOing automatisé qui permet une fluidité de tournoi exemplaire.

Limitations

J'en viens tout de suite aux limitations, car il me semble important d'aborder ce sujet pour éviter que les faux espoirs ne deviennent des abcès que j'aurais dû mal à percer (sacrée analogie) ultérieurement. Je veux que l'on reste pragmatique, que l'on ne s'emballe pas ; je ne vois pas A.T.O.S. comme une révolution qui changerait le game, mais je le vois vraiment comme un outil.

Et comme tout outil, il est adapté pour certaines choses et pas pour d'autres. Parfois, ce n'est pas de mon ressort. Il se trouve que la première limitation d'un concept tel que celui-ci provient des deux services à la fondation de celui-ci : Discord et en particulier Challonge.

  • Discord tirera parfois la mine si A.T.O.S. tente de réaliser différentes opérations en même temps, ce qui est cause de ralentissement. De même, il y a une limitation au nombre de channels (500 au total, 50 par catégorie), ce qui "nerf" la fonction de channel automatique même si j'ai instauré un workaround assez simple : programmer la suppression du channel 10 minutes après la fin du set pour laisser de la place.
  • Quant à Challonge, et bien que dire, je suis fortement déçu de la prestation de leur service : timeouts, et la journée d'avant l'écriture de cet article, une erreur de certificat SSL digne des novices en administration système qui a interrompu momentanément la possibilité à A.T.O.S. d'inscrire au tournoi Project+ du week-end.

"On fait avec", c'est ce que je me dis. Mais les conséquences sont telles que n'attendez pas d'A.T.O.S. de devoir gérer un tournoi de plus de 64 joueurs.

J'essaierai d'optimiser aussi bien que mal, mais compte tenu des services sur lesquels je dépends, et de mes compétences de niveau amateur, je me fixe pour l'instant de tenir la limite des 64 joueurs. Peut-être 128 comme objectif ?

De même, sachez que dans sa conception, A.T.O.S. ne supporte que les brackets à double élimination et les tournois single (1v1) pour le moment, mais ce n'est pas prévu d'ajouter autre chose pour ma part, et je pense que ce n'est pas plus mal de se concentrer sur l'essentiel.

Nouveautés 5.x

Redesign du code (sautez si trop technique !)

Chose pas très importante pour les utilisateurs, mais tout de même ! La librairie discord.py est vraiment un délice à apprendre et utiliser. J'ai réécrit entièrement mon code pour utiliser des sets de commande intégrés avec des possibilités de cooldown, de concurrence...

Cela veut dire que ce sont des protections supplémentaires contre les utilisateurs malveillants qui pourraient spammer des commandes (dans le premier cas), et dans le second cas, cela permet d'éviter à Challonge de tout simplement arrêter de répondre à A.T.O.S. car il l'inonderait de demandes (mais en traitant un par un, pas de soucis).

Autre nouveauté, j'ai essayé d'améliorer ma compréhension du code asynchrone et je fais désormais tourner des opérations auparavant "bloquantes" de façon asynchrone ce qui permet, entre autres, au bot de mieux gérer sa fonction de bot multi-tâche.

Code synchrone à gauche, asynchrone à droite (souhaité)

Quand tout à l'heure j'ai parlé de "timeout" par Challonge, j'ai abordé cette problématique en encapsulant les fonctions de Challonge dans une fonction qui retente l'opération en cas de timeout.

J'ai également commencé une organisation modulaire du code que je souhaite poursuivre par l'utilisation des cogs Discord, dans le futur... Et en dehors de ça, j'ai déjà fait un gros travail de simplification/réutilisation !

Commande buffer

C'est une commande qui sera assez utile pour les joueurs de Project+ sur Dolphin Netplay. Elle calcule en effet le buffer minimal suggéré que l'hôte doit paramétrer, selon son ping en ms. Algorithme très simple que j'ai appliqué suivant les conseils de la communauté Project M :

theoretical_buffer = arg // 8 + (arg % 8 > 0)
suggested_buffer = theoretical_buffer if theoretical_buffer >= 4 else 4

Exemple :

Commande forfeit

Nouvelle commande qui permet d'abandonner son set en cours, tout simplement !

Auto-mode

En avais-je déjà parlé ? C'est une fonction automatique qui permet au bot de créer le tournoi tout seul. Il suffit de paramétrer un fichier pour cela :

Smash Void:
  capping: 48
  days:
  - Tuesday
  - Thursday
  description: 'Informations et inscriptions sur Discord : https://discord.gg/PvWT8aU'
  edition: 11
  game: Super Smash Bros. Ultimate
  start: '20:30'

Smash Void SE:
  capping: 32
  days:
  - Saturday
  description: 'Informations et inscriptions sur Discord : https://discord.gg/PvWT8aU'
  edition: 5
  game: Project+
  start: '20:30'
Les numéros d'édition sont bien entendus incrémentés automatiquement

Et ouais, on peut même mettre 2 tournois, plusieurs jours de la semaine. Pour une monthly c'est très simple, il suffit que le paramètre dans days soit un nombre entier.

Elle est bien entendue désactivée par défaut pour éviter des erreurs (et puis il faut remplir le fichier comme je l'ai montré ci-dessus), mais pour tous ceux qui le souhaitent et ont adopté un format très régulier, ça sera je pense utile !

Support du multi-stream

Un gros travail vient tout juste d'être fait pour supporter le multi-stream. Chaque streamer peut :

  • Initier une session stream avec une commande, !initstream.
  • Renseigner les codes d'accès à l'arène avec !setstream.
  • Ajouter/enlever les sets qu'il/elle veut avec !addstreamet !rmstream.
  • Accéder à toutes ces informations avec !mystream.

Bien entendu, tout est pensé pour éviter les conflits entre plusieurs streams.

Nouvelle commande stream

Elle n'existait pas avant, c'est désormais chose faite ! !stream permet d'obtenir le lien du stream du tournoi actuel.

Que se passe-t-il s'il y a plusieurs streams ?

Le bot conçoit et envoie lui-même un lien multitwitch.tv.

Et à l'avenir ?

Désormais je souhaite me concentrer sur la "solidification" des fonctions actuelles, régler ce qui va pas, optimiser ce qui peut l'être... Car il y a du travail pour ça. Et je rappelle, je ne suis pas développeur et si j'en suis là c'est surtout grâce au temps libre que j'ai.

Et une fois ceci fait, je me lance dans les documents d'installation pour que chaque TO puisse l'installer. Ce n'est pas prêt tout de suite, par contre. Suivez-moi ici ou sur Twitter pour être tenu au courant, ou même le projet directement sur GitHub.

Il y a également une possibilité de traduire le bot. Mais je suis trop fatigué pour faire davantage, et je pense que je redeviendrai un joueur dès que je pourrais, en espérant que ce coup de main pourra servir à d'autres TO comme il, je l'espère, sert déjà ma communauté locale que j'ai souhaité aider avant tout !

À bientôt ! :)