mirror of
https://github.com/TheRealOwenRees/plantid-discord-bot.git
synced 2026-07-22 20:16:57 +00:00
0eddf04678
* fix module name in backup * save projects to persistent_term * retrieve projects on bot startup * remove commented out code * register project autocomplete * placeholder text for project * placeholder disease command
47 lines
1.3 KiB
Elixir
47 lines
1.3 KiB
Elixir
defmodule PlantIdDiscordBot.PlantNet.Projects do
|
|
@moduledoc """
|
|
Functions related to PlantNet's projecs
|
|
"""
|
|
require Logger
|
|
alias HTTPoison.Response
|
|
|
|
@plantnet_api_base_url Application.compile_env(:plantid_discord_bot, :plantnet_api_base_url)
|
|
|
|
def fetch_projects do
|
|
try do
|
|
build_query_uri()
|
|
|> get_response()
|
|
|> parse_response()
|
|
|> save_projects()
|
|
rescue
|
|
e ->
|
|
Logger.error(Exception.format(:error, e, __STACKTRACE__))
|
|
end
|
|
end
|
|
|
|
defp build_query_uri do
|
|
URI.parse("#{@plantnet_api_base_url}/projects")
|
|
|> URI.append_query("lang=en")
|
|
|> URI.append_query("type=kt")
|
|
|> URI.append_query("api-key=#{Application.get_env(:plantid_discord_bot, :plantnet_api_key)}")
|
|
|> URI.to_string()
|
|
end
|
|
|
|
defp get_response(query_uri), do: HTTPoison.get!(query_uri)
|
|
|
|
defp parse_response(%Response{status_code: 200, body: body}), do: Jason.decode!(body)
|
|
|
|
defp parse_response(%Response{status_code: 401, body: body}) do
|
|
Logger.critical("Unauthorized request to PlantNet API: #{body}")
|
|
end
|
|
|
|
defp save_projects(projects), do: :persistent_term.put(:projects, projects)
|
|
|
|
def retrieve_projects, do: :persistent_term.get(:projects)
|
|
|
|
def find_project_by_description(description) do
|
|
retrieve_projects()
|
|
|> Enum.find(&(&1["description"] == description))
|
|
end
|
|
end
|