summaryrefslogtreecommitdiff
path: root/lib/nola_plugins/radio_france.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nola_plugins/radio_france.ex')
-rw-r--r--lib/nola_plugins/radio_france.ex133
1 files changed, 0 insertions, 133 deletions
diff --git a/lib/nola_plugins/radio_france.ex b/lib/nola_plugins/radio_france.ex
deleted file mode 100644
index 2096de8..0000000
--- a/lib/nola_plugins/radio_france.ex
+++ /dev/null
@@ -1,133 +0,0 @@
-defmodule Nola.Plugins.RadioFrance do
- require Logger
-
- def irc_doc() do
- """
- # radio france
-
- Qu'est ce qu'on écoute sur radio france ?
-
- * **!radiofrance `[station]`, !rf `[station]`**
- * **!fip, !inter, !info, !bleu, !culture, !musique, !fip `[sous-station]`, !bleu `[région]`**
- """
- end
-
- def start_link() do
- GenServer.start_link(__MODULE__, [], name: __MODULE__)
- end
-
- @trigger "radiofrance"
- @shortcuts ~w(fip inter info bleu culture musique)
-
- def init(_) do
- regopts = [plugin: __MODULE__]
- {:ok, _} = Registry.register(IRC.PubSub, "trigger:radiofrance", regopts)
- {:ok, _} = Registry.register(IRC.PubSub, "trigger:rf", regopts)
- for s <- @shortcuts do
- {:ok, _} = Registry.register(IRC.PubSub, "trigger:#{s}", regopts)
- end
- {:ok, nil}
- end
-
- def handle_info({:irc, :trigger, "rf", m = %IRC.Message{trigger: %IRC.Trigger{type: :bang}}}, state) do
- handle_info({:irc, :trigger, "radiofrance", m}, state)
- end
-
- def handle_info({:irc, :trigger, @trigger, m = %IRC.Message{trigger: %IRC.Trigger{type: :bang, args: []}}}, state) do
- m.replyfun.("radiofrance: précisez la station!")
- {:noreply, state}
- end
-
- def handle_info({:irc, :trigger, @trigger, m = %IRC.Message{trigger: %IRC.Trigger{type: :bang, args: args}}}, state) do
- now(args_to_station(args), m)
- {:noreply, state}
- end
-
- def handle_info({:irc, :trigger, trigger, m = %IRC.Message{trigger: %IRC.Trigger{type: :bang, args: args}}}, state) when trigger in @shortcuts do
- now(args_to_station([trigger | args]), m)
- {:noreply, state}
- end
-
- defp args_to_station(args) do
- args
- |> Enum.map(&unalias/1)
- |> Enum.map(&String.downcase/1)
- |> Enum.join("_")
- end
-
- def handle_info(info, state) do
- Logger.debug("unhandled info: #{inspect info}")
- {:noreply, state}
- end
-
- defp now(station, m) when is_binary(station) do
- case HTTPoison.get(np_url(station), [], []) do
- {:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
- json = Poison.decode!(body)
- song? = !!get_in(json, ["now", "song"])
- station = reformat_station_name(get_in(json, ["now", "stationName"]))
- now_title = get_in(json, ["now", "firstLine", "title"])
- now_subtitle = get_in(json, ["now", "secondLine", "title"])
- next_title = get_in(json, ["next", "firstLine", "title"])
- next_subtitle = get_in(json, ["next", "secondLine", "title"])
- next_song? = !!get_in(json, ["next", "song"])
- next_at = get_in(json, ["next", "startTime"])
-
- now = format_title(song?, now_title, now_subtitle)
- prefix = if song?, do: "🎶", else: "🎤"
- m.replyfun.("#{prefix} #{station}: #{now}")
-
- next = format_title(song?, next_title, next_subtitle)
- if next do
- next_prefix = if next_at do
- next_date = DateTime.from_unix!(next_at)
- in_seconds = DateTime.diff(next_date, DateTime.utc_now())
- in_minutes = ceil(in_seconds / 60)
- if in_minutes >= 5 do
- if next_song?, do: "#{in_minutes}m 🔜", else: "dans #{in_minutes} minutes:"
- else
- if next_song?, do: "🔜", else: "suivi de:"
- end
- else
- if next_song?, do: "🔜", else: "à suivre:"
- end
- m.replyfun.("#{next_prefix} #{next}")
- end
-
- {:error, %HTTPoison.Response{status_code: 404}} ->
- m.replyfun.("radiofrance: la radio \"#{station}\" n'existe pas")
-
- {:error, %HTTPoison.Response{status_code: code}} ->
- m.replyfun.("radiofrance: erreur http #{code}")
-
- _ ->
- m.replyfun.("radiofrance: ça n'a pas marché, rip")
- end
- end
-
- defp np_url(station), do: "https://www.radiofrance.fr/api/v2.0/stations/#{station}/live"
-
- defp unalias("inter"), do: "franceinter"
- defp unalias("info"), do: "franceinfo"
- defp unalias("bleu"), do: "francebleu"
- defp unalias("culture"), do: "franceculture"
- defp unalias("musique"), do: "francemusique"
- defp unalias(station), do: station
-
- defp format_title(_, nil, nil) do
- nil
- end
- defp format_title(true, title, artist) do
- [artist, title] |> Enum.filter(& &1) |> Enum.join(" - ")
- end
- defp format_title(false, show, section) do
- [show, section] |> Enum.filter(& &1) |> Enum.join(": ")
- end
-
- defp reformat_station_name(station) do
- station
- |> String.replace("france", "france ")
- |> String.replace("_", " ")
- end
-
-end