summaryrefslogtreecommitdiff
path: root/lib/irc/client/command/join.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/irc/client/command/join.ex')
-rw-r--r--lib/irc/client/command/join.ex40
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