summaryrefslogtreecommitdiff
path: root/lib/nola_plugins/correction.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nola_plugins/correction.ex')
-rw-r--r--lib/nola_plugins/correction.ex59
1 files changed, 0 insertions, 59 deletions
diff --git a/lib/nola_plugins/correction.ex b/lib/nola_plugins/correction.ex
deleted file mode 100644
index 03968c8..0000000
--- a/lib/nola_plugins/correction.ex
+++ /dev/null
@@ -1,59 +0,0 @@
-defmodule Nola.Plugins.Correction do
- @moduledoc """
- # correction
-
- * `s/pattern/replace` replace `pattern` by `replace` in the last matching message
- """
-
- def irc_doc, do: @moduledoc
- def start_link() do
- GenServer.start_link(__MODULE__, [], name: __MODULE__)
- end
-
- def init(_) do
- {:ok, _} = Registry.register(IRC.PubSub, "messages", [plugin: __MODULE__])
- {:ok, _} = Registry.register(IRC.PubSub, "triggers", [plugin: __MODULE__])
- {:ok, %{}}
- end
-
- # Trigger fallback
- def handle_info({:irc, :trigger, _, m = %IRC.Message{}}, state) do
- {:noreply, correction(m, state)}
- end
-
- def handle_info({:irc, :text, m = %IRC.Message{}}, state) do
- {:noreply, correction(m, state)}
- end
-
- def correction(m, state) do
- history = Map.get(state, key(m), [])
- if String.starts_with?(m.text, "s/") do
- case String.split(m.text, "/") do
- ["s", match, replace | _] ->
- case Regex.compile(match) do
- {:ok, reg} ->
- repl = Enum.find(history, fn(m) -> Regex.match?(reg, m.text) end)
- if repl do
- new_text = String.replace(repl.text, reg, replace)
- m.replyfun.("correction: <#{repl.sender.nick}> #{new_text}")
- end
- _ ->
- m.replyfun.("correction: invalid regex")
- end
- _ -> m.replyfun.("correction: invalid regex format")
- end
- state
- else
- history = if length(history) > 100 do
- {_, history} = List.pop_at(history, 99)
- [m | history]
- else
- [m | history]
- end
- Map.put(state, key(m), history)
- end
- end
-
- defp key(%{network: net, channel: chan}), do: "#{net}/#{chan}"
-
-end