multiple chatters at once

master
cynic 3 years ago
parent 11d449c62b
commit 27b4b33d4b
  1. 12
      lib/ircked_elixir/chatter.ex
  2. 2
      lib/ircked_elixir/chatter/privmsg.ex
  3. 3
      lib/ircked_elixir/chatter/state.ex
  4. 9
      lib/ircked_elixir/overseer.ex

@ -14,14 +14,22 @@ defmodule IrckedElixir.Chatter do
String.split(data, "\r\n") |> Enum.each(fn raw -> handle(Message.parse(raw), socket) end)
run(socket)
end
def send(socket, to, body) do
Privmsg.construct("functism", to, body).message |> Message.send(socket)
end
def handle(msg, socket) do
case msg.command do
"PING" -> Message.construct("", "PONG", msg.parameters) |> Message.send(socket)
"001" -> Message.construct("", "JOIN", ["#qrs"]) |> Message.send(socket)
"PRIVMSG" ->
pm = Privmsg.parse(msg)
IO.puts(inspect pm.message)
Privmsg.construct("functism", pm.to, "hai").message |> Message.send(socket)
IO.puts(inspect pm)
case pm.body do
".bots" -> Privmsg.construct("functism", pm.to, "https://github.com/kurisufriend/ircked_elixir").message |> Message.send(socket)
".hello" -> Privmsg.construct("functism", pm.to, "hai").message |> Message.send(socket)
_ -> ""
end
"" -> ""
_ -> IO.puts(inspect msg)
end

@ -1,7 +1,7 @@
defmodule IrckedElixir.Chatter.Privmsg do
defstruct message: %IrckedElixir.Chatter.Message{}, from: "", to: "", body: ""
def parse(message) do
%IrckedElixir.Chatter.Privmsg{message: message, from: String.slice(message.prefix, 1..999), to: Enum.at(message.parameters, 0), body: Enum.join(Enum.slice(message.parameters, 1..999), " ")}
%IrckedElixir.Chatter.Privmsg{message: message, from: String.slice(message.prefix, 1..999), to: Enum.at(message.parameters, 0), body: Enum.join(Enum.slice(message.parameters, 1..999), " ") |> String.slice(1..999)}
end
def construct(from, to, body) do
%IrckedElixir.Chatter.Privmsg{message: %IrckedElixir.Chatter.Message{prefix: ":"<>from, command: "PRIVMSG", parameters: ([] |> List.insert_at(0, to)) ++ String.split(":"<>body, " ")}, from: from, to: to, body: body}

@ -0,0 +1,3 @@
defmodule IrckedElixir.Chatter.State do
defstruct ip: "", port: 0, nick: ""
end

@ -1,15 +1,18 @@
defmodule IrckedElixir.Overseer do
use Supervisor
@server_address "localhost"
@server_port 6667
@base_nick "functism"
@chatters 20
def start_link(opts) do
Supervisor.start_link(__MODULE__, :ok, opts)
end
@impl true
def init(:ok) do
children = [
{Task, fn -> IrckedElixir.Chatter.start("localhost", 6667, "functism") end}
]
children = 1..@chatters |> Enum.to_list |> Enum.map(fn n -> %{id: "chatter"<>to_string(n), start: {Task, :start_link, [fn -> IrckedElixir.Chatter.start(@server_address, @server_port, @base_nick <> to_string(n)) end]}} end)
Supervisor.init(children, strategy: :one_for_one)
end
end

Loading…
Cancel
Save