E-bou.V2 (2.0.0) - 2 juin 2024
Objectifs de la refonte
Pour donner un peu de contexte, la version actuelle du bot que vous connaissez tous a été mon tout premier projet, j’ai énormément appris dessus, mais j’ai surtout fait beaucoup d’erreurs bien trop difficiles à rattraper sans y passer des heures.
En partant de ce constat, la meilleure solution était donc de repartir de zéro.
Ce projet de refonte a commencé le 1er Décembre 2023, aujourd’hui, le 1er Juin 2024, j’arrive à une version concluante, qui va donc prendre la place de l’ancienne version.
Points principaux de la refonte
- Préparez l’avenir, et surtout avoir une base saine pour l’arrivée de DOFUS Unity en décembre.
- Grâce à cette base plus saine, pouvoir plus facilement implanter certaines fonctionnalités qui, sur la version actuelle, ne sont clairement pas possibles, car les choses n’ont pas été faites dans le bon sens.
- J’aimerai aussi rajouter des features qui sont plus large que l’idée de base qu’est le bot, c’est à dire, une encyclopédie DOFUS, ça a déjà commencé avec l’ajout des notifs Twitter et des News, mais j’envisage totalement, à termes, d’ajouter des mini jeux, des outils de modération, ou autres, selon si la demande est présente.
Technologies utilisées
- L’application est developpé à 100% en TypeScript.
- Le runtime Bun est utilisé pour exécuter le code.
- Une base de donnée MongoDB est utilisée pour stocker les données. La librairie Mongoose est utilisée pour interagir avec la base de donnée.
- La communication avec Discord se fait grâce à la librairie Discord.js.
- Le tout est deployé sur un serveur dedié OVH, géré par mes soins.
- Une API (vouée à évoluer dans le temps) est mise en place pour permettre d’obtenir certaines informations, telles que les images d’items.
Détails techniques sur l’application
- L’application est découpé en instances pour améliorer les performances de ce dernier, voir sharding.
- Chaque instance de l’application instancie une API interne à son démarrage, permettant de communiquer entre elles.
- Cette API permet aussi de communiquer avec l’API externe pour obtenir des informations sur l’état actuel de l’application.
- Refonte complète du format de données de la base de données. L’intégration de la BDD actuelle avais été faites en speed, sans aucune connaissance, et donc j’ai fait pas mal d’erreurs, qui, aujourd’hui, sont corrigés.
- Cette base de données me permet de sauvegarder :
- Les données de guildes (ID, nom, langue, canal de l’Almanax, canaux pour les tweets et les news.)
- Les données utilisateurs (ID, nom, langue)
- Les news
- Les Tweets
- Un système de statistiques, qui été déjà implantés dans la V1, mais qui est largement plus optimisé, ce système me permet de connaître les commandes utilisées, chacun des paramètres, et le plus important, le temps d’exécution de la commande, pour savoir quel commande est à optimiser.
- Cette base de données me permet de sauvegarder :
- Un gros travail d’optimisation a été fait sur l’ensemble de l’application, et principalement sur la partie Discord et gestion des interactions.
Langues supportées
Comme actuellement, tout ce qui concerne DOFUS est disponible en Français, Anglais, Espagnol, Portugais, Allemand et Italien.
L’ensemble des textes écrit manuellement sont disponible en Français, Anglais, Espagnol, Portugais. Auparavant, seulement le Français et Anglais étaient disponibles.
Cependant, certains textes seront traduits dans les 6 langues indiquées ci-dessus, cela concerne principalement les messages relatifs à l’application, et non les textes relatifs à DOFUS écris manuellement.
Les traductions sont réalisées à l’aide de Github Copilot, et sont ensuite vérifiés par mes soins. (En fonction de mes connaissances !)
Fonctionnalités hors DOFUS
News
Un gros travail d’optimisation a été fait sur la récupération des news, l’envoi de ces dernières et l’apparence des messages envoyés sur vos serveur.
- La commande permettant la configuration est
/configuration serveur news
. - Comme auparavant, les langues Français, Anglais, Espagnol, Portugais sont disponibles.
- Les jeux disponibles sont : Dofus, Dofus Rétro, Wakfu, Waven et Dofus Touch.
Le fonctionnement a été entièrement retravaillé, et est désormais beaucoup plus stable qu’auparavant et est moins sensible au bannissement temporaire venant de Twitter (X).
- Nouveauté : Lorsque l’application possède le droit “Voir les anciens messages” sur le(s) salon(s) configuré(s), et qu’un tweet est une réponse à un tweet précédent, l’application sera en capacité de répondre au message précédent pour faire le lien entre les deux tweets.
- La commande permettant la configuration est
/configuration serveur twitter
. - Les comptes Twitter disponibles sont:
- Ankama : AnkamaGames
- DOFUS : DOFUSfr, DOFUS_EN, ES_DOFUS, DOFUS_PTBR, DOFUSMJ_fr
- DOFUS Rétro : DOFUSRetro_FR, DofusRETRO_EN, DOFUSRetro_ES, DOFUSRetro_PTBR
- WAKFU : Wakfu_FR, WAKFU_EN, WAKFU_ES, Wakfu_PTBR
- DOFUS Touch : DofusTouch, DOFUSTouch_EN, DOFUSTouch_ES
Système de langue
Le système de langue a été partiellement retravaillé, désormais, lorsque le bot est ajouté sur un serveur, sa langue est automatiquement définie à Français, néanmoins, il est tout à fait possible de la changer sois via le message qui est envoyé lors de l’ajout sur le serveur ou via la commande /configuration serveur langue
.
Lorsqu’une langue est définie pour un serveur, l’ensemble des messages envoyés par l’application seront dans cette langue sur ce serveur. (sauf dans une condition précise)
Il est possible pour un utilisateur de configurer une langue pour lui-même, via la commande /configuration utilisateur langue
.
Lorsqu’un utilisateur a une langue définie, la langue de ce dernier sera prioritaire sur la langue du serveur.
La langue de l’utilisateur lui permet d’utiliser le bot en message privé dans la langue souhaitée.
Si le bot est utilisé sur un serveur sur le quel il n’est pas, alors, la langue utilisée sera celle de l’utilisateur OU la langue de l’application (client ou site web) Discord de l’utilisateur.
Plus de détails sur le systeme d’application Discord, dont les “Applications utilisateurs” qui permettent d’utiliser le bot sur un serveur sur lequel il n’est pas : https://support.discord.com/hc/fr/articles/21334461140375-Utiliser-les-applications-sur-Discord
Nouveautés
Quelques nouvelles commandes non liées à DOFUS ont été ajoutées, la plupart se trouve à l’intérieur de la commande /configuration
, voici la liste entière :
/configuration serveur informations
: “Permet de voir les informations de configuration du serveur”/configuration utilisateur informations
: “Permet de voir les informations de configuration de l’utilisateur”/configuration utilisateur mode-debug
: “Permet d’activer ou de désactiver le mode “débug” pour l’utilisateur”- La commande
a-propos
a été revue, la version du bot est désormais affichée, le nombre de serveurs ainsi que l’instance actuelle. Un bouton est ajouté pour afficher la commandehelp
.- Un nouveau onglet “Remerciements” est ajoutée pour remercier les personnes qui m’ont aidé de près ou de loin dans le développement de l’application. Les différentes commandes ou messages permettant de configurer la langue sont désormais 100% interactifs, et le message d’aide s’adapte désormais à la langue sélectionnée.
DOFUS
Pfiouf, par où commencer ?
Vous résumez dans l’intégralité tout le travail qui a été fourni pour cette refonte serait bien trop long, je vais donc me contenter de vous donner les points principaux.
La quasi-majorité des fonctionnalités de la version actuelle sont présentes, cependant, certaines ont été améliorées, d’autres ont été supprimées, et d’autres ont été ajoutées.
⚠️ Actuellement, 4 commandes en lien avec DOFUS ne sont pas disponibles, mais elles le seront très prochainement, il s’agit des commandes /carte
, /challenge
, /compagnon
et /skinator
.
Global
- Une commande
/help
est disponible pour afficher l’ensemble des commandes de l’application. - La quasi totalité des commandes disposent désormais d’une option “tous/toutes”, qui retourne une pagination comprenant l’ensemble des éléments liés à cette fonctionnalitée.
- Le système de pagination a été entièrement revu, et est désormais beaucoup plus rapide et plus stable qu’auparavant.
- Les commandes de recherche ont été revues, et sont désormais beaucoup plus rapides et plus stables qu’auparavant.
- Si par exemple, dans la commande
/item nom
, vous cherchezanneau bouf
, l’application comprendra que vous cherchez “L’anneau du Boufcoul” ou “L’anneau Royal du Bouftou”, et l’objet sera affiché dans les résultats.- Techniquement, votre recherche ainsi que l’ensemble des éléments sont découpés sur les espaces, et une vérification est faite pour vérifier que l’ensemble des mots de votre recherche sont présents dans le nom de l’objet. Cela permet d’avoir des recherches infiniment plus flexibles.
- Des améliorations ont été aussi faites pour éviter les erreurs, dans le cas où vous cliquez sur la recherche après avoir fait votre choix, l’élément sélectionné sera correctement retourné, même si l’information envoyée par Discord est incorrecte.
- Lorsqu’une recherche retourne une pagination (exemple
/item categorie
), la quantité d’éléments présents est affichée dans la recherche.
- Si par exemple, dans la commande
Almanax
- L’almanax est désormais totalement indépendant et ne requiert plus AUCUNE requête sur un serveur externe pour obtenir les données.
- Les Almanax sont générées automatiquement, s’adapte tout seul à la date actuelle, et les jours “spéciaux” sont automatiquement gérées.
- De ce fait, la génération d’un message d’Almanax est infiniment plus rapide qu’auparavant.
- 🆕 Sur les Almanax envoyés automatiquement, configuré à l’aide de la commande
/almanax installation
, des boutons sont désormais disponible pour changer de jour, cela n’édite pas le message actuel, mais répond à l’aide d’un message visible uniquement par l’utilisateur ayant cliqué sur le bouton. - 🆕 Un nouveau bouton “Détails” est disponible, il renvoi globalement les mêmes informations que le “Bonus” de l’Almanax, mais de manière plus détaillée, et via des informations techniques plutôt que du simple texte.
- 🆕 L’ensemble des informations mentionnées dans les détails sont disponibles dans un menu déroulant. Exemple, si le détail fait mention d’un objet, ce dernier sera disponible dans un menu déroulant pour l’afficher. (À condition que la commande liée au détail spécifiée existe)
- 🆕 Un bouton est ajouté pour être redirigé directement sur l’objet à offrir à Théodoran Ax.
- 🆕 Un bouton est ajouté pour afficher la quête d’offrande du jour dans son entièreté.
- Si des quêtes bonus sont disponibles, des boutons seront disponibles pour afficher l’ensemble des quêtes.
- 🆕 Deux commandes de recherches d’Almanax par bonus sont disponibles :
/almanax type
et/almanax type_parent
, qui permettent de cherche respectivement à l’aide d’un nom de bonus et d’un nom de groupe de bonus. - L’almanax mensuel est désormais beaucoup plus rapides à être généré, et est toujours disponible via la commande
/almanax mensuel
.
Alteration
- Très peu de changements sur cette fonctionnalité, surtout de l’optimisation de performance.
Classe
- 🆕 Une nouvelle interface est disponible lorsque vous exécutez la commande, cette interface se base sur celle présente en jeu lors de la création d’un personnage.
- Une description de la classe est disponible.
- Le niveau de difficulté de la classe est disponible.
- Les 3 atouts principaux de la classe sont disponibles.
- La notation de la classe est disponible, avec le même rendu qu’en jeu.
- 🆕 Le skin de la classe dans un sexe aléatoire est affichée en miniature du message.
- ❌ L’interface mécanique de classe est supprimée, elle était inutilisée et inutile.
- L’interface sort est toujours disponible.
- Un bouton est disponible pour afficher la panoplie de classe.
Craft
- 🆕 Ajout d’une commande
/craft métier
permettant d’obtenir une pagination avec tous les crafts dans le métier sélectionné. - 🆕 Si un craft possède des crafts récursif, il est possible de sélectionner le bouton “Afficher les sous-recettes”, cela modifiera le message avec l’ensemble des sous-recettes de chacun des items en ayant un. Chaque sous-recette ajoute un de profondeur à l’indentation du texte.
- 🆕 Ajout de l’expérience obtenue lors de la fabrication de l’objet dans le métier, lorsque réaliser au niveau de l’objet en question.
- 🆕 Ajout d’un bouton permettant de rentrer manuellement une quantité d’objets à crafter.
🆕 Document
- Ajout d’une commande permettant d’obtenir le contenu d’un document (livre ou parchemin) via la commande
/document
. - Si un document possède plusieurs pages, des boutons sont disponibles pour naviguer entre les pages.
- Si une image est présente sur la page actuelle, elle sera affichée.
- Si un document possède des liens, des boutons sont disponibles pour afficher la page.
- Si un document permet de lancer une quête, un bouton est disponible pour afficher la quête.
Donjon
- 🆕 les succès ne sont pas affichées sur le message de donjon. Un nouveau bouton est disponible pour afficher une pagination contenant l’ensemble des succès liés aux gardiens de donjons présent dans le donjon. (Et non les succès pouvant être réalisés dans ce donjon, je n’ai pas accès à cette info)
- 🆕 Lorsqu’un monstre est un gardien, un monstre de quête (donjon Qu’Tan) ou un archimonstre (jamais), une icône sera affichée après le nom du monstre.
- La totalité des fonctionnalitées présentes auparavant le sont toujours.
- Les vagues peuvent être correctement changées sur les donjons à 3 vagues.
Frise de récompenses
- Le système de frise de récompense a été entièrement revu et optimisé.
- Pour rappel, les frises de récompense sont le système utilisé en jeu pour les événements temporaire (AkA Saison), cela concerne actuellement les serveurs Temporis, les Expéditions et le Kolizéum.
- 🆕 Une frise est désormais automatiquement rendu inactive du moment où sa date de fin est dépassé
- 🆕 Les frises actuelles sont mises à jour automatiquement, en se basant sur la date de début et la date de fin.
- 🆕 Les commandes utilisant les frises de récompenses ne déploient pas l’option “récompense”, dans le cas où aucune frise n’est actuellement disponible.
Item
- 🆕 Ajout d’une commande
/item onglet
permettant de retourner une pagination contenant tous les items présent dans un onglet (Équipement, Objets utilisables, Ressources, Objets de quêtes, Cosmétiques, Bénédiction/Malédiction) - 🆕 Le systeme “d’obtention d’item” a été entièrement revu, désormais, lorsqu’un item peux être obtenu via une ou plusieurs méthodes, un bouton est ajouté pour afficher une pagination.
- Lorsque plusieurs méthodes d’obtentions sont disponibles, des boutons sont disponibles pour changer de méthode.
- Les méthodes disponibles sont les suivantes :
- Utilisation d’un objet
- Obtention via une “lootbox” (coffre de songe, par exemple)
- Drop sur les monstres
- Drop sur les monstres (Temporis)
- Obtention via récompense de quête
- Obtention via récompense de succès
- Obtention via récoltable
- Obtention via PNJ (boutique ou dialogue)
- Certaines méthodes permettent d’afficher des conditions, dans ce cas là, un bouton est disponible pour afficher les conditions, celà réduira le nombre d’éléments affichés sur la page à 5 (au lieu de 20).
- 🆕 Un gros travail a été fait sur les conditions d’équipement, d’utilisation (et autres). L’ensemble des conditions du jeu sont traduites.
- 🆕 Si un item est un objet vivant, l’ensemble des apparences de l’objet seront affichées via une grande image.
Kolizéum
- Très peu de changements sur cette fonctionnalité, surtout de l’optimisation de performance.
Maison
- La commande a été entierement revue, son fonctionnement reste globalement le même mais les performances ont été grandement améliorées.
- 🆕 Lorsque vous êtes sur une carte exterieure, et que plusieurs maisons sont disponibles sur cette carte, un bouton est disponible permettant d’afficher une pagination contenant toutes les maisons sur cette carte.
- 🆕 Le menu déroulant avec toutes les cartes intérieure se met à jour pour afficher le texte de la carte intérieure actuelle.
Monstre
- 🆕 Une commande
/monstre groupe_famille
est ajoutée, elle permet de retourner une pagination contenant l’ensemble des monstres d’un groupe de familles de monstres. - 🆕 Les sorts des monstres ne sont plus disponible dans un menu déroulant. Un bouton est ajouté lorsqu’un monstre possède au moins un sort, ce bouton permettant d’afficher le sort dans le “contexte” du monstre. Sur cette interface est disponible un menu déroulant incluant l’ensemble des sorts du monstres.
- 🆕 Sur les paginations, une icone est ajoutée à côté du nom du monstre en fonction du type de monstre (gardien, monstre de quête, archi-monstre)
- 🆕 Les détails en lien avec l’agression du monstre sont ajoutés.
- 🆕 L’interface de drop du monstre a été amélioré, dans le cas où un des drops sur la page actuel à des conditions, un bouton est disponibles pour afficher les conditions, cela réduira le nombre d’éléments affichés sur la page à 5 (au lieu de 20).
- 🆕 Sur les “Caractéristiques détaillés”, certaines caractéristiques sont ajoutées.
- L’ensemble des fonctionnalitées présentes auparavant le sont toujours.
Panoplie
- 🆕 Une commande
/panoplie type
est ajoutée, elle permet de retourner une pagination contenant l’ensemble des panoplies d’un type de panoplie. (cosmétique, équipements) - 🆕 Sur les paginations, si une panoplie est une panoplie cosmétique, une icône est ajoutée devant son nom.
- 🆕 Si une panoplie n’a aucun effet, son apparence sera affichée en grand.
- 🆕 Si une panoplie possède au moins un item visible, son apparence sera affichée en miniature.
- 🆕 L’apparence des items actuellement équipés est disponible via une image, la classe et le sexe est aléatoire, les couleurs ainsi que le visage utilisé est celui par défaut.
- 🆕 À côté du nom de l’item, si celui-ci est affiché sur l’image, une icône de cosmétique est ajoutée.
- 🆕 Si la panoplie dispose d’au moins un item visible, un bouton “Apparence” est disponible, il vous permet d’afficher le skin en grand, et de choisir une classe et un sexe de votre choix.
- L’ensemble des fonctionnalitées présentes auparavant le sont toujours.
PNJ
- 🆕 Un gros traitement a été effectué sur les dialogues de PNJ
- Si un dialogue mentionne un joueur, le pseudo sera remplacé par le nom de l’utilisateur.
- Si un dialogue mentionne le niveau du joueur, un niveau aléatoire sera sélectionné entre 1 et 200.
- Si un dialogue mentionne une quantité de Kamas pour l’ouverture de le banque, une valeur aléatoire sera sélectionnée entre 1 et la quantité totale d’objet pouvant actuellement mis en banque.
- Si un dialogue mentionne une sauvegarde auprès d’un donjon, le nom du donjon sera affichée.
- Si un dialogue mentionne la classe du personnage, une classe aléatoire sera sélectionnée parmi l’ensemble des classes.
- Certains cas sont volontairement ignorés (donc des #1, #2 seront toujours présent dans certains dialogues) il s’agit de certains événements dont uniquement le serveur possède l’information. (Ex: nombre d’objets a ramené pour ouvrir les antres de Grozilla et Grasmera, ou la durée avant de pouvoir relancer une certaine quête…)
- 🆕 Dans la boutique du PNJ, si un des objet sur la page actuelle à des conditions, un bouton sera disponible pour afficher les conditions, celà réduira le nombre d’éléments affichés sur la page à 5 (au lieu de 10).
- L’ensemble des fonctionnalitées présentes auparavant le sont toujours.
Quête
- 🆕 Lorsque les kamas ou l’expérience obtenue en récompense de quête s’adapte au niveau du personnage, un bouton est disponible.
- Ce bouton permet d’ouvrir une modal dans laquelle il vous est demandé d’y inscrire un niveau. Si vous rentrez autre chose qu’un niveau, un message d’erreur vous sera retourné.
- Une fois validé, le message se met à jour avec les récompenses adaptées au niveau choisi.
- 🆕 Le niveau de récompenses par défaut est celui du niveau de la quête. Si la quête a un niveau minimum et maximum, c’est le niveau maximum qui est utilisé.
- 🆕 Sur l’ensemble des paginations, si une quête est répétable, est une quête de donjon ou est une quête de groupe, une icône correspondante sera affichée
- 🆕 Si une quête ne contient aucune étape (donc objectif) et/ou récompense, le message s’envoi correctement. Un message est alors ajouté pour mentionner que les infos sont manquantes.
- ❌ Le menu déroulant pour changer d’étape est supprimé, il est envisagé (mais ce n’est pas fixé encore) d’ajouter un bouton qui ouvre une modal pour changer d’étape.
- L’ensemble des fonctionnalitées présentes auparavant le sont toujours.
Songes Infinis
- 🆕 L’ensemble des modificateurs sont correctement disponibles sur le boss lié.
- 🆕 Les gardiens incompatibles sont désormais affichées sous forme de paginations.
- 🆕 Le calculateur d’ornement a été revu et optimisé.
- L’ensemble des fonctionnalités présentes auparavant le sont toujours.
Sort
- 🆕 La totalité des effets de sorts du jeu est traduit.
- 🆕 Un gros travail a été fait sur la présentation et la traduction des effets. La quasi-totalité des effets (plus de 2000) ont désormais une icône qui leur est attribuée. Pour ceux manquant, ça arrivera au fur et à mesure.
- 🆕 Lorsqu’un effet de sort est une “tooltip informative”, une icône d’information est ajoutée devant pour prévenir l’utilisateur.
⚠️ Attention: Est actuellement manquant les zones de sorts ainsi que les méthodes de déclenchement d’un effet de sort, cela arrivera très prochainement.
- L’ensemble des fonctionnalités présentes auparavant le sont toujours.
Succès
- 🆕 Si un succès permet de gagner des kamas et/ou de l’expérience, un bouton sera disponible pour afficher une modale pour changer le niveau de récompense, comme sur les quêtes.
- 🆕 Le niveau de récompenses par défaut est celui du succès.
- L’ensemble des fonctionnalités présentes auparavant le sont toujours.
Pour finir
Comme précisé au début de la partie DOFUS, il y a énormément de choses qui ont été faites, et je ne peux pas tout lister ici, mais je vous invite à tester les commandes, et à me faire un retour si vous avez des idées d’améliorations, des bugs, ou autres.
Cela fait plus de 6 mois que je bosse sur cette refonte sur mon temps libre, et je suis incroyablement fier du résultat, j’ai hâte d’enfin la mettre en production, ça va vraiment faire du bien au bot qui devient (à mes yeux) un peu vieillot sur certains points haha !
Pour les quelques fonctionnalités manquantes, je fais au plus vite pour les ajouter, je me suis permis de déployer cette version sans car ce sont des fonctionnalités qui ne sont pas utilisées par la majorité des utilisateurs et qui ne sont pas vitales pour le bon fonctionnement du bot.
Lien du Discord de support : https://discord.gg/rmSsDC84AS
Lien d’invitation du bot : https://discord.com/application-directory/1093561990036860928