Current section
Files
Jump to
Current section
Files
lib/bot/bot.ex
defmodule Agala.Bot do
use HTTPoison.Base
require Logger
@default_router Agala.Router.Direct
def process_url(url) do
"https://api.telegram.org/bot" <> token <> "/" <> url
end
defp token, do: System.get_env("TOT_TOKEN")
def getUpdates(%{timeout: timeout, offset: offset}) do
exec_cmd("getUpdates", %{timeout: timeout, offset: offset})
|> resolve_updates
end
def resolve_updates({
offset,
{
:ok,
%HTTPoison.Response{
status_code: 200,
body: %{"ok" => true, "result" => []}
}
}
}) do
offset
end
def resolve_updates({
_offset,
{
:ok,
%HTTPoison.Response{
status_code: 200,
body: %{"ok" => true, "result" => result}
}
}
}) do
Logger.debug "Response body is:\n #{inspect(result)}"
result
|> process_messages
end
def resolve_updates({ offset, { :ok, %HTTPoison.Response { status_code: 404 } } } ) do
offset
end
def resolve_updates({ offset, { :error, err }}) do
Logger.error("#{inspect err}")
offset
end
def exec_cmd(cmd, params=%{offset: offset}) do
{offset, get(cmd, [], params: params)}
end
def exec_cmd(cmd, params) do
get(cmd, [], params: params)
end
def process_response_body(body) do
body
|> Poison.decode!
end
def process_messages([message]=[%{"update_id"=>offset}]) do
process_message(message)
#last message, so the offset is moving to +1
Logger.debug("Update_id changed to #{offset+1}")
offset + 1
end
def process_messages([h|t]) do
process_message(h)
process_messages(t)
end
def process_message(message) do
Task.Supervisor.start_child(Agala.Bot.TasksSupervisor, fn ->
Agala.get_router().route(message)
end)
end
end