Mon bot Discord fait maison, Hyliaht’z, a déjà eu droit à 2 articles, dans lesquels sont expliquées les commandes pour joueurs et pour MJ

Mais je n’ai pas encore spécialement parlé de son développement. Or, parmi vous se cachent peut-être des curieux qui s’interrogent sur le travail que ça implique, voire des créateurs qui aimeraient déployer leur propre bot et se demandent comment s’y prendre.
Alors dans cet article, on va disséquer tout ça !

Il est temps de se placer de l’autre côté de l’interface utilisateur, et de regarder un peu les rouages qui font tourner Hyliaht’z.

Implémentation 

Tout commence sur https://discord.com/developers/
Ici, n’importe qui peut gratuitement créer son bot en quelques clics, en renseignant son nom, son avatar et sa description. 

Ça prend moins de 5 minutes, et POUF, le bot est là.
Vous pouvez même générer un lien d’invitation pour qu’il rejoigne vos serveurs Discord !

Bon, par contre, il ne fait rien du tout, encore. Mais au moins vous avez récupéré un identifiant secret qui vous permettra ensuite, en envoyant des requêtes, d’agir au nom du bot. C’est là qu’il va falloir coder ! 
Et vous avez le choix.

Plusieurs bibliothèques ont été mises à disposition pour communiquer avec l’API Discord, l’une des plus populaires utilisant le langage python.
Le code source d’Hyliath’z, lui, est écrit en langage C#, avec la bibliothèque Discord.NET

Concrètement, cette bibliothèque permet d’obtenir un environnement où chaque commande du bot est implémentée par une fonction, comme ceci :

[SlashCommand("hello", "Dit bonjour")]
public async Task SayHelloAsync()
{
    await RespondAsync("Bien le bonjour à vous !");
}

Et toutes les informations sur le serveur, le salon, les utilisateurs et leurs messages sont accessibles dans la limite des permissions accordées à votre bot. 

ISocketMessageChannel channel = Context.Channel;    // Salon de jeu d'où vient la commande
SocketGuild guild = Context.Guild;                  // Serveur Discord d'où vient la commande
SocketUser user = Context.User;                     // Utilisateur ayant rentré la commande

À partir de là, à vous de programmer la logique que vous désirez.

Hébergement

Le programme que vous allez coder pour envoyer des requêtes au nom de votre bot, il faut qu’un ordinateur l’exécute. Sinon, le bot apparaîtra hors ligne, et il ne se passera évidemment jamais rien.

Vous pouvez utiliser votre ordinateur personnel, éventuellement. Mais vous ne pourrez plus l’éteindre ou le redémarrer sans rendre le bot indisponible.  Une solution plus commune est donc de passer par un serveur externe. 
C’est plus compliqué. Il faut savoir comment le configurer, installer Dotnet dessus, et en plus ça n’est pas gratuit. Mais au moins c’est une plate-forme qui pourra faire fonctionner le bot en continu. 

Hyliaht’z est hébergé sur un VPS (serveur privé virtuel) qui me coûte moins de 5€ par mois, chez OVH. Rien de très cher, donc.
https://www.ovhcloud.com/fr/vps/

Lorsque le datacenter d’OVH a pris feu à Strasbourg, le PC qui faisait fonctionner Hyliaht’z a été arrêté, et le bot est devenu indisponible. Une belle occasion de rappeler que si ce n’est pas votre ordinateur personnel qui héberge votre bot, c’en est un autre quelque part dans le monde, et il peut toujours lui arriver des bricoles.

Environnement de test

En règle générale, mieux vaut éviter de déployer une fonctionnalité qui n’a pas été testée.
Il est plus sage de tester votre code dans l’ombre, et de ne mettre à jour le bot que lorsque vous êtes sûr de votre coup. 

Personnellement, j’ai créé un bot de test qui s’appelle Hyliaht’z Bêta et que je peux tester librement sur un serveur Discord dédié. Au moins, comme ça, je suis tranquille.

J’ai aussi créé des commandes utilisateur spéciales pour debugger le bot, ou exécuter des actions d’administration. 
Elles sont liées à mon compte Discord et au rôle Sage. Donc même les MJ ne peuvent pas y accéder.

/nayru

Le bot a besoin d’un certain nombre de rôles sur le serveur Discord, pour fonctionner. Et la commande /nayru a pour but de les créer automatiquement. Grâce à ça, je peux très rapidement intégrer le bot à un nouveau serveur. 

/farore

Cette commande permet tout bêtement d’afficher l’état de la mémoire d’Hyliath’z. C’est-à-dire qu’elle affiche les serveurs, les salons et les joueurs connus du bot.

/din @User

Des fois, pour reproduire les conditions d’un bug, ou juste pour afficher un exemple, il est utile de contrôler le résultat d’un jet.  Dans cet esprit, /din fournit une interface pour modifier la valeur des dés et leur sauvegarde, pour un joueur spécifique. Même le nombre de relances restantes peut être directement édité ! 

Mais ce n’est pas tout.
Utilisée sans paramètre, la commande permet aussi de contrôler la valeur obligatoire et la valeur maudite du Vice au rang 2.

/din

Limitations

Il faut savoir, tout de même, que le système d’interactions de Discord est assez neuf. Et comme tout ce qui est trop récent, c’est un peu lacunaire. 
J’ai donc dû composer avec des contraintes dont je me serais bien passé, comme :

  • Le maximum de 5 commandes utilisateur
  • Le maximum de 25 boutons après une interaction
  • L’impossibilité d’utiliser des emojis en taille large avec du texte
  • Le système de permissions définies par rôles qui ne fonctionne pas
  • Le délai de 3 secondes pour répondre à une requête
  • Les paramètres d’intégration d’application qui sont inaccessibles sur mobile

Et si vous faites votre propre bot, des contraintes, vous en trouverez d’autres ! Ce n’est pas ce qui manque. 

Heureusement, ce qui est cool, c’est que Discord évolue vite. Des corrections et de nouvelles fonctionnalités sont soumises régulièrement.  Il est donc possible que ces limites sautent et que d’autres standards émergent. C’est pourquoi je vais continuer de veiller au grain et maintenir Hyliaht’z à jour. 

Ce genre de travail n’est jamais vraiment terminé !