status command

This commit is contained in:
Owen
2024-12-15 16:10:37 +01:00
parent 6ffbc7fedf
commit 7cf2e79c3e
10 changed files with 55 additions and 8 deletions
+3
View File
@@ -1,3 +1,6 @@
import Config import Config
config :plantid_discord_bot,
start_time: DateTime.utc_now()
import_config "#{config_env()}.exs" import_config "#{config_env()}.exs"
-1
View File
@@ -2,7 +2,6 @@ import Config
config :plantid_discord_bot, config :plantid_discord_bot,
guild_ids: [1_002_507_312_159_797_318], guild_ids: [1_002_507_312_159_797_318],
start_time: DateTime.utc_now(),
plantnet_api_key: System.get_env("PLANTNET_API_KEY"), plantnet_api_key: System.get_env("PLANTNET_API_KEY"),
plantnet_api_base_url: "https://my-api.plantnet.org/v2", plantnet_api_base_url: "https://my-api.plantnet.org/v2",
image_folder: "priv/static", image_folder: "priv/static",
-1
View File
@@ -2,7 +2,6 @@ import Config
config :plantid_discord_bot, config :plantid_discord_bot,
guild_ids: [], guild_ids: [],
start_time: DateTime.utc_now(),
plantnet_api_key: System.get_env("PLANTNET_API_KEY"), plantnet_api_key: System.get_env("PLANTNET_API_KEY"),
plantnet_api_base_url: "https://my-api.plantnet.org/v2", plantnet_api_base_url: "https://my-api.plantnet.org/v2",
image_folder: "priv/static", image_folder: "priv/static",
-1
View File
@@ -2,7 +2,6 @@ import Config
config :plantid_discord_bot, config :plantid_discord_bot,
guild_ids: [1_002_507_312_159_797_318], guild_ids: [1_002_507_312_159_797_318],
start_time: DateTime.utc_now(),
plantnet_api_key: System.get_env("PLANTNET_API_KEY"), plantnet_api_key: System.get_env("PLANTNET_API_KEY"),
plantnet_api_base_url: "https://my-api.plantnet.org/v2", plantnet_api_base_url: "https://my-api.plantnet.org/v2",
image_folder: "priv/static", image_folder: "priv/static",
-1
View File
@@ -2,7 +2,6 @@ import Config
config :plantid_discord_bot, config :plantid_discord_bot,
guild_ids: [1_002_507_312_159_797_318], guild_ids: [1_002_507_312_159_797_318],
start_time: DateTime.utc_now(),
plantnet_api_key: System.get_env("PLANTNET_API_KEY"), plantnet_api_key: System.get_env("PLANTNET_API_KEY"),
plantnet_api_base_url: "https://my-api.plantnet.org/v2", plantnet_api_base_url: "https://my-api.plantnet.org/v2",
image_folder: "priv/static", image_folder: "priv/static",
+4 -1
View File
@@ -4,5 +4,8 @@ defmodule PlantIdDiscordBotTest.Mocks.Nostrum.Api do
""" """
def create_interaction_response(_interaction, response), do: {:ok, response} def create_interaction_response(_interaction, response), do: {:ok, response}
def get_application_info(), do: {:ok, %{name: "Test Bot", owner: %{username: "Test User"}}}
def get_application_information() do
{:ok, %{name: "Test Bot", approximate_guild_count: 1, owner: %{username: "Test User"}}}
end
end end
+19 -3
View File
@@ -10,13 +10,13 @@ defmodule PlantIdDiscordBot do
IO.inspect("Starting PlantIdDiscordBot") IO.inspect("Starting PlantIdDiscordBot")
@global_application_commands [ @global_application_commands [
{"servers", "All servers that this bot belongs to, []"},
{"invite", "Invite link for this bot, []"},
{"source", "Link to the source code for this bot, []"}, {"source", "Link to the source code for this bot, []"},
{"invite", "Invite link for this bot, []"},
{"help", "Help information for this bot, []"},
{"info", "Information about this bot, []"}, {"info", "Information about this bot, []"},
{"stats", "Statistics about this bot, []"}, {"stats", "Statistics about this bot, []"},
{"help", "Help information for this bot, []"},
{"status", "API Status, []"}, {"status", "API Status, []"},
{"servers", "All servers that this bot belongs to, []"},
{"id", "ID a plant from up to 5 images, []"} {"id", "ID a plant from up to 5 images, []"}
] ]
@@ -49,4 +49,20 @@ defmodule PlantIdDiscordBot do
def handle_event({:INTERACTION_CREATE, %{data: %{name: "info"}} = interaction, _ws_state}) do def handle_event({:INTERACTION_CREATE, %{data: %{name: "info"}} = interaction, _ws_state}) do
Cog.Info.info(interaction) Cog.Info.info(interaction)
end end
# def handle_event({:INTERACTION_CREATE, %{data: %{name: "stats"}} = interaction, _ws_state}) do
# Cog.Info.info(interaction)
# end
def handle_event({:INTERACTION_CREATE, %{data: %{name: "status"}} = interaction, _ws_state}) do
Cog.Info.status(interaction)
end
# def handle_event({:INTERACTION_CREATE, %{data: %{name: "servers"}} = interaction, _ws_state}) do
# Cog.Info.info(interaction)
# end
# def handle_event({:INTERACTION_CREATE, %{data: %{name: "id"}} = interaction, _ws_state}) do
# Cog.Info.info(interaction)
# end
end end
+20
View File
@@ -3,9 +3,13 @@ defmodule PlantIdDiscordBot.Cog.Info do
import Nostrum.Struct.Embed import Nostrum.Struct.Embed
alias PlantIdDiscordBot.Utils alias PlantIdDiscordBot.Utils
# reference to Nostrum.Api in non-test environments, reference to mock in test
@api Application.compile_env(:plantid_discord_bot, :api) @api Application.compile_env(:plantid_discord_bot, :api)
# urls
@source Application.compile_env(:plantid_discord_bot, :source) @source Application.compile_env(:plantid_discord_bot, :source)
@invite Application.compile_env(:plantid_discord_bot, :invite) @invite Application.compile_env(:plantid_discord_bot, :invite)
@plantnet_api_base_url Application.compile_env(:plantid_discord_bot, :plantnet_api_base_url)
@doc """ @doc """
Sends a link to the source code for this bot. Sends a link to the source code for this bot.
@@ -69,4 +73,20 @@ defmodule PlantIdDiscordBot.Cog.Info do
response = %{type: 4, data: %{embeds: [embed]}} response = %{type: 4, data: %{embeds: [embed]}}
@api.create_interaction_response(interaction, response) @api.create_interaction_response(interaction, response)
end end
@doc """
Check the status of all relevant APIs.
"""
def status(interaction) do
message =
case HTTPoison.get("#{@plantnet_api_base_url}/_status") do
{:ok, %{status_code: 200}} ->
"PlantNet API is up and running"
_ ->
"PlantNet API is down"
end
@api.create_interaction_response(interaction, %{type: 4, data: %{content: message}})
end
end end
View File
+9
View File
@@ -0,0 +1,9 @@
defmodule PlantIdDiscordBotTest.Cog.Info do
use ExUnit.Case
test "/info" do
{:ok, response} = PlantIdDiscordBot.Cog.Info.info(%{data: %{name: "info"}})
[embed] = response[:data][:embeds]
assert match?(%Nostrum.Struct.Embed{}, embed)
end
end