Igor
View SourceIgor allows you to write bots for Matrix.
Installation
The package can be installed by adding igor to your list of dependencies in
mix.exs:
def deps do
[
{:igor, "~> 0.3.1"}
]
endIgor depends on html5ever_elixir, which in turn depends on the html5ever Rust library, so to compile Igor, you will need to install Rust.
Note that html5ever_elixir 0.7.0 does not work with OTP
22, but
html5ever_elixir 0.8.0 does not compile with older versions of Rust (notably,
the version of Rust shipped with Debian Buster), so there isn't a single
version of html5ever_elixir that will work universally. Currently, mix.lock
specifies version 0.7.0, but if you need/want to use version 0.8.0, run mix deps.unlock html5ever rustler and then mix deps.get.
Running the bot
Standalone
To run Igor on its own, create a new Elixir project that depends on it and on
any plugins that you want to use, and run mix deps.get to fetch the
dependencies. Then create a config/config.exs file (see
config/config_sample.exs for an example), and call mix igor.run to start
the bot.
As part of an application
Igor can also be started from within another Elixir application by calling
Igor.start_link(opts)where opts is a keyword list as described in the configuring section below. Or it can be started by a supervisor:
children = [
{Igor, opts}
]
Supervisor.start_link(children, strategy: :one_for_one)Configuring
Igor takes the following configuration parameters:
start_client:(optional) a function that starts a client process and returns{:ok, pid, client}, whereclientis something that implementsPolyjuice.Client.API. The function will be given three arguments: aPolyjuice.Client.Handler, aPolyjuice.Client.Storage, and a sync filter.make_client:(optional) a function that returns something that implementsPolyjuice.Client.API. The function will be given three arguments: aPolyjuice.Client.Handler, aPolyjuice.Client.Storage, and a sync filter.client:(optional) aPolyjuice.Client.API. Thestart_clientoption takes precedence overmake_client, which takes precedence overclient. If none of these options is specified, Igor will create a newPolyjuice.Clientusing the other options given.homeserver_url:(required ifstart_client,make_client, andclientare not set) the base URL of the homeserveraccess_token:(optional) the access token for the bot user to authenticate with the homeserverbot_name:(optional) the bot's name, for use with responding to commands. Default:igoraka:(optional) list other names that the bot will respond to for commands. Default:[]command_prefixes:(optional) list prefixes that can be used for triggering commands. Default:[]responders:(optional) list of responders to use. Default:[]storage:(optional, recommended) persistent storage to use. The default value is not suitable for production use, since it does not persist data across restarts. Default:{Igor.Storage, :ets, []}accept_invites:(optional) whether or not to accept invites. Iftrue, accept all invites. Iffalse, reject all invites. If a list of strings, accept invites from any of the users IDs listed, and reject invites from others. Default:true
Responders
Igor uses responders to respond to Matrix events, and comes with some sample
responders. For information on writing your own
responder, see the documentation for Igor.Responder.