Page MenuHomePhabricator

Nola | Revamped plugin system
Open, HighPublicDISCUSSION

Description

C'est l'heure de refaire les plugins de zéro.

La nouvelle API sera bien plus stateless afin de ne plus avoir de bottlenecks (1 pid par plugin c'est assez stupide) et ajouter plus de flexibilité.

Cela permettrait aussi d'activer/personnaliser/désactiver les plugins au niveau de chaque channel plus simplement qu'acutellement.

Les bases DETS/... peuvent être via l'utilisation d'un agent.

Callbacks:

  • manifest/1 returns plugin details
%{name: "....",
on_start: :fun_on_start,
on_room_activation: :fun_on_room_activation,
on_room_deactivation: :fun_on_room_deactivation,
on_message: :fun_on_message,
commands: %{
  "new" => %{
     description: "Adds something new",
     options: %{}, 
     arguments: %{}, # Arguments schema
     fun: :fun_on_command_new,
     irc_alias: %{name: "text", prefix: :plus},
     slash_alias: "new-text"
 }
},
…

Ce seul callback configure tout le behaviour relativement libre du plugin. on_start et d'autres permettent aussi de démarrer un arbre de supervision, souscrire aux évenemnts classiques, ….

Eventuellement, au lieu de ce format, on pourrait envisager on_start/1 et des APis telles que:

Irc.Plugin.attach_lifecycle(:room_activation, __MODULE__, __MODULE__, :funtocall)
…

qui serait plus dynamique.

La définition des commandes est plus stricte, définie, et permet de séparer _commande_ de _trigger_: permettant de les changer par channel, remplacer un plugin progressivement, mais aussi de déclarer celles ci comme "slash commands" sur telegram ou discord.

Chaque commande possède une adresse complète par exemple {module}-{name}.

Les callbacks seraient pour certains executés directement dans la connexion (e.g. dans mon exemple on_message est mal nommé car c'est lors de la _création_ d'un %IRC.Message{}) ou dans un processus dédié au scope (un room server, à créer).

Les callbacks peuvent alors s'enchainer et augmenter le contexte/contenu.

La configuration doit être pré-définie avec des schemas JSON (au niveau réseau/room, voir global?) pour être mis dans la BDD et etre config via la future interface de config.

Event Timeline

href shifted this object from the Restricted Space space to the S6 Nola space.Dec 15 2022, 4:34 AM
href changed the visibility from "All Users" to "Public (No Login Required)".
href changed the edit policy from "All Users" to "Nola Devs (Project)".
href triaged this task as High priority.Dec 15 2022, 7:50 PM
href edited projects, added Nola 1.0/Next; removed Nola.