Files
omnibot/lib/config.ex

58 lines
1.2 KiB
Elixir
Raw Normal View History

defmodule Omnibot.Config do
alias Omnibot.Irc.Msg
@enforce_keys [:server]
defstruct [
:server,
nick: "omnibot",
user: "omnibot",
real: "omnibot",
port: 6667,
ssl: false,
modules: [],
module_paths: []
]
@doc ~S"""
Gets all channels that the bot should join via its modules.
"""
def all_channels(cfg) do
Enum.flat_map(cfg.modules, fn
{_, [channels: :all]} -> []
{_, [channels: channels]} -> channels
end)
|> MapSet.new()
|> MapSet.to_list()
end
@doc ~S"""
Gets a list of all `{module, mod_cfg}` pairs from the given configuration
that are listening to the given channel.
"""
def channel_modules(cfg, channel) do
cfg.modules
|> Enum.filter(fn {_, cfg} ->
cfg[:channels] == :all or Enum.member?(cfg[:channels] || [], channel)
end)
end
def msg_prefix(cfg) do
%Msg.Prefix {
nick: cfg.nick,
user: cfg.user,
}
end
@doc ~S"""
Make a new message with the given command and parameters using the given
configuration to build the prefix.
"""
def msg(cfg, command, params \\ []) do
%Msg {
prefix: msg_prefix(cfg),
command: command,
params: params,
}
end
end