summaryrefslogtreecommitdiff
path: root/lib/lsg_irc/script_plugin.ex
blob: 28ae2a7e38073c345e322e44336c8b243cc43b1f (plain) (blame)
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
41
42
43
defmodule LSG.IRC.ScriptPlugin do
  require Logger

  @moduledoc """
  Allows to run outside scripts. Scripts are expected to be long running and receive/send data as JSON over stdin/stdout.

  """

  @ircdoc """
  # script

  Allows to run an outside script.

  * **+script `<name>` `[command]`** défini/lance un script
  * **-script `<name>`** arrête un script
  * **-script del `<name>`** supprime un script
  """

  def irc_doc, do: @ircdoc

  def start_link() do
    GenServer.start_link(__MODULE__, [])
  end

  def init([]) do
    {:ok, _} = Registry.register(IRC.PubSub, "trigger:script", [])
    dets_filename = (LSG.data_path() <> "/" <> "scripts.dets") |> String.to_charlist
    {:ok, dets} = :dets.open_file(dets_filename, [])
    {:ok, %{dets: dets}}
  end

  def handle_info({:irc, :trigger, "script", m = %{trigger: %{type: :plus, args: [name | args]}}}, state) do
  end

  def handle_info({:irc, :trigger, "script", m = %{trigger: %{type: :minus, args: args}}}, state) do
    case args do
      ["del", name] -> :ok #prout
      [name] -> :ok#stop
    end
  end

end