diff options
Diffstat (limited to 'lib/irc/client/command/join.ex')
-rw-r--r-- | lib/irc/client/command/join.ex | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/irc/client/command/join.ex b/lib/irc/client/command/join.ex new file mode 100644 index 0000000..f4728c7 --- /dev/null +++ b/lib/irc/client/command/join.ex @@ -0,0 +1,40 @@ +defmodule Irc.Client.Command.Join do + alias Irc.Parser.Line + require Line + import Line + + @type t :: {:join, channel :: String.t()} | {:join, channel :: String.t(), Irc.User.t()} + + def init(_args) do + {"JOIN", :join, ["extended-join"]} + end + + # An user joined + def handle_line(line = %Line{command: "JOIN", source: source, args: [channel | args]}, conn) do + if Line.self?(line, conn) do + {:event, {:join, channel}} + else + user = Irc.User.from_mask(source) + user = case args do + [] -> user + [account, name] -> + account = if account != "*", do: account + {channel, %Irc.User{user | account: account, name: name}} + end + {:event, {:join, channel, user}} + end + end + + # Join a channel + def handle_command(:join, [channel], _conn_info) do + {:send, ['JOIN', channel]} + end + + # Outdated! + def handle_buffer(%Line{command: "JOIN", source: %Irc.Mask{nick: nick}, args: [channel]}, buffer = %{channel: channel}, %Irc.Connection{nick: nick}) do + {:finish, nil, {:event, {:join, channel}}} + end + + def handle_buffer(_, _), do: :postpone + +end |