defmodule Nola.IRC.UserMentionPlugin do @moduledoc """ # mention * **@`` ``**: 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 nick = nick |> String.trim(":") |> String.trim(",") 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 -> Nola.Telegram.send_message(telegram, "`#{channel}` <**#{sender.nick}**> #{Enum.join(content, " ")}") sms -> case Nola.IRC.SmsPlugin.send_sms(sms, text) do {:error, code} -> message.replyfun("#{sender.nick}: erreur #{code} (sms)") end true -> Nola.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