Igor
Igor 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.2.1"}
]
end
Igor 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}
, whereclient
is 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_client
option takes precedence overmake_client
, which takes precedence overclient
. If none of these options is specified, Igor will create a newPolyjuice.Client
using the other options given.homeserver_url:
(required ifstart_client
,make_client
, andclient
are 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:igor
aka:
(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
.