package calculon

  1. Overview
  2. Docs

Plugins

A plugin is a bunch of commands, and optionally some disk-backed state. It will register its commands to the core loop

type json = Yojson.Safe.json
type action =
  1. | Require_reload
    (*

    Require that we reload everything from on-disk state

    *)
  2. | Require_save
    (*

    Require that the state be saved

    *)
type action_callback = action Signal.Send_ref.t
type stateful =
  1. | St : 'st stateful_ -> stateful

A stateful plugin, using a persistent state 'st

and 'st stateful_ = private {
  1. name : string;
  2. commands : 'st -> Command.t list;
  3. on_msg : 'st -> (Core.t -> Irc_message.t -> unit Lwt.t) list;
  4. to_json : 'st -> json option;
  5. of_json : action_callback -> json option -> ('st, string) Result.result Lwt.t;
  6. stop : 'st -> unit Lwt.t;
}
type t =
  1. | Stateful of stateful
  2. | Stateless of Command.t list

A single plugin

type plugin = t
val of_cmd : Command.t -> t

Stateless plugin with 1 command

val of_cmds : Command.t list -> t

Stateless plugin with several commands

  • raises Invalid_argument

    if the list is empty

val stateful : name:string -> commands:('st -> Command.t list) -> ?on_msg:('st -> (Core.t -> Irc_message.t -> unit Lwt.t) list) -> to_json:('st -> json option) -> of_json:(action_callback -> json option -> ('st, string) Result.result Lwt.t) -> ?stop:('st -> unit Lwt.t) -> unit -> t

Make a stateful plugin using the given name (for prefixing its storage; this should be unique) and ways to serialize state to Json, deserialize state from Json, and building commands from the state. See stateful_ for more details on each field.

module Set : sig ... end
OCaml

Innovation. Community. Security.