Since modules can now intercept all messages in the channels they're listening for, it'd be cool to have modules handling things like making sure the Omnibot.State stays updated as appropriate, and that pings are ponged, etc. This will probably deprecate the router, since it's been reduced to a single function call, but we'll see about that. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
50 lines
1.3 KiB
Elixir
50 lines
1.3 KiB
Elixir
defmodule Omnibot.Router do
|
|
require Logger
|
|
alias Omnibot.{Config, Irc, Irc.Msg, State}
|
|
|
|
def route(_irc, msg) do
|
|
channel = Msg.channel(msg)
|
|
State.cfg()
|
|
|> Config.channel_modules(channel)
|
|
|> Enum.each(fn {module, _} -> module.on_msg(msg) end)
|
|
end
|
|
|
|
#def handle(_irc, :privmsg, msg) do
|
|
# [channel | _params] = msg.params
|
|
|
|
# # Find modules that want this message
|
|
# State.cfg()
|
|
# |> Config.channel_modules(channel)
|
|
# |> Enum.each(fn {module, _} -> module.on_msg(msg) end)
|
|
#end
|
|
|
|
#def handle(_irc, :join, msg: %Msg {params: [channel | _]}) do
|
|
# State.cfg()
|
|
# |> Config.channel_modules(channel)
|
|
# |> Enum.each(fn {module, _} -> module.on_join(msg) end)
|
|
#end
|
|
|
|
#def handle(irc, :kick, msg: %Msg {params: [channel | _]}) do
|
|
# State.cfg()
|
|
# |> Config.channel_modules(channel)
|
|
# |> Enum.each(fn {module, _} -> module.on_kick(msg) end)
|
|
#end
|
|
|
|
#def handle(_irc, :part, %Msg {prefix: %Msg.Prefix{nick: nick}, params: [channel | _]}) do
|
|
# cfg = State.cfg()
|
|
# if nick == cfg.nick do
|
|
# State.remove_channel(State, channel)
|
|
# end
|
|
#end
|
|
|
|
#def handle(irc, :ping, msg) do
|
|
# cfg = State.cfg()
|
|
# reply = Config.msg(cfg, "PONG", msg.params)
|
|
# Irc.send_msg(irc, reply)
|
|
#end
|
|
|
|
#def handle(irc, :welcome, _msg) do
|
|
# Irc.sync_channels(irc)
|
|
#end
|
|
end
|