Hello,

Aujourd'hui je vous présente Skinny, un petit framework pour créer des bots pour Discord en PHP.

Tout part du faite que je voulais un bot pour discord, et comme généralement je voie les choses en grand (un peut trop ?), je me suis dit que sa serais cool de créer un petit framework pour que les gens qui débutent en programmation, puisse se créer un bot perso.
Comme bien souvent, quand on veut faire des bots pour un site, on trouve généralement des API, qui permettent d'intéragir avec le site en question, mais jamais de "base" pour créer son propre bot sans s'occuper de la "boucle" où des events, et c'est pour cette raison que j'ai décidé de créer ce petit framework. Ce framework utilise la librairie DiscordPHP pour gérer l'insterface d'API avec Discord.

Rentrons dans le vive du sujet, que propose ce "framework" ?!
Le gros avantage de ce framwork, c'est qu'il vous permet de faire un bot rapidement en très peu de code. Pour ce faire, il utilise un système de Modules et même un système de Plugins pour pouvoir réutiliser ses modules dans d'autres bots et/ou les partager avec la communauté. Bien sur vous pourrez trouver toute la documentation de ce framework sur GitHub.

Un Module ?!
Oui, le bot intègre un systéme de Modules. Un module est tout simplement une classe qui vous permettras de coder vos propre commandes (et la logique de celles-ci), sans vous souciez de tout le reste. Voici un Module de base :

<?php
namespace Bot\Module\Modules;

use Skinny\Module\ModuleInterface;
use Skinny\Network\Wrapper;

class Basic implements ModuleInterface
{

    /**
     * {@inheritDoc}
     *
     * @param \Skinny\Network\Wrapper $wrapper The Wrapper instance.
     * @param array $message The message array.
     *
     * @return void
     */
    public function onChannelMessage(Wrapper $wrapper, $message)
    {
    }

    /**
     * {@inheritDoc}
     *
     * @param \Skinny\Network\Wrapper $wrapper The Wrapper instance.
     * @param array $message The message array.
     *
     * @return void
     */
    public function onPrivateMessage(Wrapper $wrapper, $message)
    {
    }

    /**
     * {@inheritDoc}
     *
     * @param \Skinny\Network\Wrapper $wrapper The Wrapper instance.
     * @param array $message The message array.
     *
     * @return void
     */
    public function onCommandMessage(Wrapper $wrapper, $message)
    {
    }
}

Admettons, vous voulez créer une commande !say, voici le code de la commande :

public function onCommandMessage(Wrapper $wrapper, $message)
{
    switch ($message['command']) {
        case 'say':
            $wrapper->Channel->sendMessage($message['parts'][1]);

            break;
    }
}

Puis dans le config/commands.php :

'Commands' => [
    'say' => [
        'params' => 1,
        'syntax' => 'Say [Message]'
    ]
]

Et voilà, vous avez créé une commande !say, plutôt simple non ?
Bien sur, vous retrouverez toute la documentation sur le Readme du repo.

Un Plugin ?!
Et oui, ce framework vous permet aussi de créer vos modules sous forme de Plugins (Avec ou sans composer), et ainsi, de les réutiliser ou de les partager avec la communauté. Voici deux exemples de Plugins (qui sont intégrés de base dans le framework lors de l'installation):

  • Module Plugin Un plugin qui vous permet de load/reaload/unload etc un Module on the fly (sans re-start le bot) !
  • Basic Plugin Un simple plugin avec des commandes de base de type !say, !info etc.

Pour ce système de Plugin, j'utilise l'excellent système de Plugin de CakePHP, que j'ai adapté pour le projet bien sûr.

Voilà, pour plus d'information, n'oubliez pas de regardez le Readme du projet, et n'oubliez pas de laisser vos impressions sur ce projet. :)

Xeta.

Aucune réponse