From 27b4b33d4b6855299f53a7ba06c786136f8002bc Mon Sep 17 00:00:00 2001 From: cynic Date: Sat, 23 Jul 2022 18:24:21 -0400 Subject: [PATCH] multiple chatters at once --- lib/ircked_elixir/chatter.ex | 12 ++++++++++-- lib/ircked_elixir/chatter/privmsg.ex | 2 +- lib/ircked_elixir/chatter/state.ex | 3 +++ lib/ircked_elixir/overseer.ex | 9 ++++++--- 4 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 lib/ircked_elixir/chatter/state.ex diff --git a/lib/ircked_elixir/chatter.ex b/lib/ircked_elixir/chatter.ex index 3c7975c..be17e5a 100644 --- a/lib/ircked_elixir/chatter.ex +++ b/lib/ircked_elixir/chatter.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 diff --git a/lib/ircked_elixir/chatter/privmsg.ex b/lib/ircked_elixir/chatter/privmsg.ex index c813620..3b211f1 100644 --- a/lib/ircked_elixir/chatter/privmsg.ex +++ b/lib/ircked_elixir/chatter/privmsg.ex @@ -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} diff --git a/lib/ircked_elixir/chatter/state.ex b/lib/ircked_elixir/chatter/state.ex new file mode 100644 index 0000000..b11dcda --- /dev/null +++ b/lib/ircked_elixir/chatter/state.ex @@ -0,0 +1,3 @@ +defmodule IrckedElixir.Chatter.State do + defstruct ip: "", port: 0, nick: "" +end diff --git a/lib/ircked_elixir/overseer.ex b/lib/ircked_elixir/overseer.ex index c7c2b89..11853b8 100644 --- a/lib/ircked_elixir/overseer.ex +++ b/lib/ircked_elixir/overseer.ex @@ -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