1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
|