summaryrefslogtreecommitdiff
path: root/lib/lsg_irc/user_mention_plugin.ex
diff options
context:
space:
mode:
authorhref <href@random.sh>2021-09-02 02:52:15 +0200
committerhref <href@random.sh>2021-09-02 05:01:00 +0200
commit01385cfe9572df546685ef326db8ddc00d6fe371 (patch)
tree4a539697f91ff7299262ee7a99f3470d322b0f53 /lib/lsg_irc/user_mention_plugin.ex
parentchores (diff)
new plugin: user mention
Diffstat (limited to 'lib/lsg_irc/user_mention_plugin.ex')
-rw-r--r--lib/lsg_irc/user_mention_plugin.ex49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/lsg_irc/user_mention_plugin.ex b/lib/lsg_irc/user_mention_plugin.ex
new file mode 100644
index 0000000..5f7b10a
--- /dev/null
+++ b/lib/lsg_irc/user_mention_plugin.ex
@@ -0,0 +1,49 @@
+defmodule LSG.IRC.UserMentionPlugin do
+ @moduledoc """
+ # mention
+
+ * **@`<nick>` `<message>`**: notifie si possible le nick immédiatement via Telegram, SMS, ou équivalent à `!tell`.
+ """
+
+ require Logger
+
+ def short_irc_doc, do: false
+ def irc_doc, do: @moduledoc
+
+ def start_link() do
+ GenServer.start_link(__MODULE__, [], name: __MODULE__)
+ end
+
+ def init(_) do
+ {:ok, _} = Registry.register(IRC.PubSub, "triggers", plugin: __MODULE__)
+ {:ok, nil}
+ end
+
+ def handle_info({:irc, :trigger, nick, message = %IRC.Message{sender: sender, account: account, network: network, channel: channel, trigger: %IRC.Trigger{type: :at, args: content}}}, state) do
+ target = IRC.Account.find_always_by_nick(network, channel, nick)
+ if target do
+ telegram = IRC.Account.get_meta(target, "telegram-id")
+ sms = IRC.Account.get_meta(target, "sms-number")
+ text = "#{channel} <#{sender.nick}> #{Enum.join(content, " ")}"
+
+ cond do
+ telegram ->
+ LSG.Telegram.send_message(telegram, "`#{channel}` <**#{sender.nick}**> #{Enum.join(content, " ")}")
+ sms ->
+ case LSG.IRC.SmsPlugin.send_sms(sms, text) do
+ {:error, code} -> message.replyfun("#{sender.nick}: erreur #{code} (sms)")
+ end
+ true ->
+ LSG.IRC.TellPlugin.tell(message, nick, content)
+ end
+ else
+ message.replyfun.("#{nick} m'est inconnu")
+ end
+ {:noreply, state}
+ end
+
+ def handle_info(_, state) do
+ {:noreply, state}
+ end
+
+end