diff --git a/lib/conn/provider_params.ex b/lib/conn/provider_params.ex index a28d9c3..37b60bb 100644 --- a/lib/conn/provider_params.ex +++ b/lib/conn/provider_params.ex @@ -15,7 +15,8 @@ defmodule Agala.Provider.Telegram.Conn.ProviderParams do token: nil, poll_timeout: nil, #timeout for poller to receive data - infinity response_timeout: nil, #timeout for responser to receive response - normal - hackney_opts: Keyword.new + hackney_opts: Keyword.new, + host: nil ] @typedoc """ @@ -36,7 +37,8 @@ defmodule Agala.Provider.Telegram.Conn.ProviderParams do token: String.t, poll_timeout: integer | :infinity, response_timeout: integer | :infinity, - hackney_opts: Keyword.t + hackney_opts: Keyword.t, + host: String.t } @behaviour Access diff --git a/lib/helpers.ex b/lib/helpers.ex index 2d2ba5f..9a0a05f 100644 --- a/lib/helpers.ex +++ b/lib/helpers.ex @@ -1,14 +1,24 @@ defmodule Agala.Provider.Telegram.Helpers do alias Agala.Provider.Telegram.Conn.Response - @base_url "https://api.telegram.org/bot" - defp base_url(route) do - fn token -> @base_url <> token <> route end + defp base_url(%Agala.Provider.Telegram.Conn.ProviderParams{} = params) do + "https://" <> params.host <> params.token + end + + defp base_url(conn) do + "https://" <> (conn.request_bot_params.provider_params.host) <> "/bot" + end + + defp base_url(route, _conn) do + fn params -> + "https://" <> params.host <> "/bot" <> params.token <> route + end end defp create_body(map, opts) when is_map(map) do Map.merge(map, Enum.into(opts, %{}), fn _, v1, _ -> v1 end) end + defp create_body_multipart(map, opts) when is_map(map) do multipart = create_body(map, opts) @@ -24,7 +34,7 @@ defmodule Agala.Provider.Telegram.Helpers do Map.put(conn, :response, %Response{ method: :post, payload: %{ - url: base_url("/sendMessage"), + url: base_url("/sendMessage", conn), body: create_body(%{chat_id: chat_id, text: message}, opts), headers: [{"Content-Type", "application/json"}] } @@ -36,7 +46,7 @@ defmodule Agala.Provider.Telegram.Helpers do Map.put(conn, :response, %Response{ method: :post, payload: %{ - url: base_url("/deleteMessage"), + url: base_url("/deleteMessage", conn), body: create_body(%{chat_id: chat_id, message_id: message_id}, []), headers: [{"Content-Type", "application/json"}] } @@ -48,7 +58,7 @@ defmodule Agala.Provider.Telegram.Helpers do Map.put(conn, :response, %Response{ method: :post, payload: %{ - url: base_url("/sendChatAction"), + url: base_url("/sendChatAction", conn), body: create_body(%{chat_id: chat_id, action: action}, []), headers: [{"Content-Type", "application/json"}] } @@ -59,7 +69,7 @@ defmodule Agala.Provider.Telegram.Helpers do Map.put(conn, :response, %Response{ method: :post, payload: %{ - url: base_url("/kickChatMember"), + url: base_url("/kickChatMember", conn), body: create_body(%{chat_id: chat_id, user_id: user_id}, opts), headers: [{"Content-Type", "application/json"}] } @@ -71,7 +81,7 @@ defmodule Agala.Provider.Telegram.Helpers do Map.put(conn, :response, %Response{ method: :post, payload: %{ - url: base_url("/sendPhoto"), + url: base_url("/sendPhoto", conn), body: create_body_multipart(%{chat_id: chat_id, photo: {:file, photo}}, opts) } }) @@ -82,7 +92,7 @@ defmodule Agala.Provider.Telegram.Helpers do Map.put(conn, :response, %Response{ method: :post, payload: %{ - url: base_url("/sendDocument"), + url: base_url("/sendDocument", conn), body: create_body_multipart(%{chat_id: chat_id, document: {:file, document}}, opts) } }) @@ -93,7 +103,7 @@ defmodule Agala.Provider.Telegram.Helpers do Map.put(conn, :response, %Response{ method: :get, payload: %{ - url: base_url("/getFile"), + url: base_url("/getFile", conn), body: create_body(%{file_id: file_id}, []), headers: [{"Content-Type", "application/json"}] } diff --git a/lib/receiver.ex b/lib/receiver.ex index b1288e6..60230c1 100644 --- a/lib/receiver.ex +++ b/lib/receiver.ex @@ -5,8 +5,8 @@ defmodule Agala.Provider.Telegram.Receiver do use Agala.Bot.Receiver alias Agala.BotParams - defp get_updates_url(%BotParams{provider_params: %{token: token}}) do - "https://api.telegram.org/bot" <> token <> "/getUpdates" + defp get_updates_url(%BotParams{provider_params: %{token: token, host: host}}) do + "https://" <> host <> "/bot" <> token <> "/getUpdates" end defp get_updates_body(%BotParams{private: %{offset: offset, timeout: timeout}}) do diff --git a/lib/responser.ex b/lib/responser.ex index a01fa72..4f50368 100644 --- a/lib/responser.ex +++ b/lib/responser.ex @@ -6,7 +6,7 @@ defmodule Agala.Provider.Telegram.Responser do defp create_body(_), do: "" defp create_url(%Agala.Conn{response: %{payload: %{url: url}}}, bot_params) when is_function(url) do - url.(bot_params.provider_params.token) + url.(bot_params.provider_params) end @doc """ @@ -25,4 +25,3 @@ defmodule Agala.Provider.Telegram.Responser do end end end - diff --git a/lib/telegram.ex b/lib/telegram.ex index 89760e2..b2ab45a 100644 --- a/lib/telegram.ex +++ b/lib/telegram.ex @@ -4,11 +4,11 @@ defmodule Agala.Provider.Telegram do Module providing adapter for Telegram """ def base_url(conn) do - "https://api.telegram.org/bot" <> conn.request_bot_params.provider_params.token + "https://" <> conn.request_bot_params.provider_params.host <> "/bot" <> conn.request_bot_params.provider_params.token end def base_file_url(conn) do - "https://api.telegram.org/file/bot" <> conn.request_bot_params.provider_params.token + "https://" <> conn.request_bot_params.provider_params.host <> "/file/bot" <> conn.request_bot_params.provider_params.token end def init(bot_params, module) do diff --git a/mix.exs b/mix.exs index 4e878d3..d2d6b26 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Agala.Provider.Telegram.Mixfile do def project do [ app: :agala_telegram, - version: "0.1.2", + version: "0.1.3", elixir: "~> 1.5", start_permanent: Mix.env == :prod, description: description(),