diff options
author | href <href@random.sh> | 2021-09-02 02:52:15 +0200 |
---|---|---|
committer | href <href@random.sh> | 2021-09-02 05:01:00 +0200 |
commit | 01385cfe9572df546685ef326db8ddc00d6fe371 (patch) | |
tree | 4a539697f91ff7299262ee7a99f3470d322b0f53 /lib/lsg_irc/user_mention_plugin.ex | |
parent | chores (diff) |
new plugin: user mention
Diffstat (limited to 'lib/lsg_irc/user_mention_plugin.ex')
-rw-r--r-- | lib/lsg_irc/user_mention_plugin.ex | 49 |
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 |