diff options
Diffstat (limited to 'lib/nola_plugins/calc_plugin.ex')
-rw-r--r-- | lib/nola_plugins/calc_plugin.ex | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/nola_plugins/calc_plugin.ex b/lib/nola_plugins/calc_plugin.ex new file mode 100644 index 0000000..264370c --- /dev/null +++ b/lib/nola_plugins/calc_plugin.ex @@ -0,0 +1,37 @@ +defmodule Nola.IRC.CalcPlugin do + @moduledoc """ + # calc + + * **!calc `<expression>`**: évalue l'expression mathématique `<expression>`. + """ + + def irc_doc, do: @moduledoc + + def start_link() do + GenServer.start_link(__MODULE__, [], name: __MODULE__) + end + + def init(_) do + {:ok, _} = Registry.register(IRC.PubSub, "trigger:calc", [plugin: __MODULE__]) + {:ok, nil} + end + + def handle_info({:irc, :trigger, "calc", message = %IRC.Message{trigger: %IRC.Trigger{type: :bang, args: expr_list}}}, state) do + expr = Enum.join(expr_list, " ") + result = try do + case Abacus.eval(expr) do + {:ok, result} -> result + error -> inspect(error) + end + rescue + error -> if(error[:message], do: "#{error.message}", else: "erreur") + end + message.replyfun.("#{message.sender.nick}: #{expr} = #{result}") + {:noreply, state} + end + + def handle_info(msg, state) do + {:noreply, state} + end + +end |