Current section
Files
Jump to
Current section
Files
lib/telegram_logger_backend/telegram.ex
defmodule LoggerTelegramBackend.Telegram do
@moduledoc false
alias HTTPoison.{Response, Error}
def send_message(text, opts) when is_binary(text) and is_list(opts) do
token = Keyword.fetch!(opts, :token)
data = [
text: text,
chat_id: Keyword.fetch!(opts, :chat_id),
parse_mode: "HTML"
]
post("https://api.telegram.org/bot#{token}/sendMessage", data, make_options(opts))
end
defp post(url, data, options) do
case HTTPoison.request(:post, String.to_charlist(url), {:form, data}, [], options) do
{:ok, %Response{status_code: 200}} -> :ok
{:ok, %Response{body: body, status_code: code}} -> {:error, {:bad_status_code, code, body}}
{:error, %Error{reason: reason}} -> {:error, reason}
end
end
defp make_options(opts) do
case Keyword.fetch(opts, :proxy) do
:error ->
[]
{:ok, proxy} ->
proxy_options(proxy)
end
end
defp proxy_options(proxy) do
uri = URI.parse(proxy)
options =
case uri.scheme do
"socks5" -> [proxy: {:socks5, String.to_charlist(uri.host), uri.port}]
_ -> [proxy: String.to_charlist(proxy)]
end
[ssl: [verify: :verify_none], hackney: [insecure: true]] ++ options
end
end