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