custom rate limits

This commit is contained in:
Owen
2025-01-13 15:37:32 +01:00
committed by Owen Rees
parent 683c4c4de2
commit 3d0dc324a6
2 changed files with 18 additions and 8 deletions
@@ -17,14 +17,14 @@ defmodule PlantIdDiscordBot.Cog.PlantNetMessage do
IO.inspect(message)
case RateLimiter.check_limit(message.guild_id) do
{:limit_exceeded, _} ->
{:limit_exceeded, _requests_used, _requests_limit} ->
Api.create_message(message.channel_id,
content:
"This server has exceeded its allowed requests in 24 hours. Please try again tomorrow.",
message_reference: %{message_id: message.id}
)
{:ok, _} ->
{:ok, _requests_used, _requests_limit} ->
do_identification(message)
end
end
+16 -6
View File
@@ -2,7 +2,10 @@ defmodule PlantIdDiscordBot.RateLimiter do
use GenServer
require Logger
@request_limit Application.compile_env(:plantid_discord_bot, :guild_request_limit_per_day)
@default_request_limit Application.compile_env(
:plantid_discord_bot,
:guild_request_limit_per_day
)
@custom_limits %{
1_002_507_312_159_797_318 => 100,
@@ -34,19 +37,26 @@ defmodule PlantIdDiscordBot.RateLimiter do
@doc """
Check if the number of requests for a guild exceeds the limit.
"""
@spec check_limit(String.t()) :: {:ok, integer()} | {:limit_exceeded, integer()}
@spec check_limit(String.t() | integer()) :: {:ok, integer()} | {:limit_exceeded, integer()}
def check_limit(guild_id) do
request_limit =
case guild_id in Map.keys(@custom_limits) do
true -> @custom_limits[guild_id]
_ -> @default_request_limit
end
case get(guild_id) do
{:ok, value} ->
if value >= @request_limit do
{:limit_exceeded, value}
if value >= request_limit do
{:limit_exceeded, value, request_limit}
else
{:ok, value}
{:ok, value, request_limit}
end
{:error, _} ->
put(guild_id, 0)
{:ok, 0}
Logger.debug("Set counter for guild #{guild_id} to 0")
{:ok, 0, request_limit}
end
end