mirror of
https://github.com/TheRealOwenRees/plantid-discord-bot.git
synced 2026-07-23 04:26:57 +00:00
custom rate limits
This commit is contained in:
@@ -17,14 +17,14 @@ defmodule PlantIdDiscordBot.Cog.PlantNetMessage do
|
|||||||
IO.inspect(message)
|
IO.inspect(message)
|
||||||
|
|
||||||
case RateLimiter.check_limit(message.guild_id) do
|
case RateLimiter.check_limit(message.guild_id) do
|
||||||
{:limit_exceeded, _} ->
|
{:limit_exceeded, _requests_used, _requests_limit} ->
|
||||||
Api.create_message(message.channel_id,
|
Api.create_message(message.channel_id,
|
||||||
content:
|
content:
|
||||||
"This server has exceeded its allowed requests in 24 hours. Please try again tomorrow.",
|
"This server has exceeded its allowed requests in 24 hours. Please try again tomorrow.",
|
||||||
message_reference: %{message_id: message.id}
|
message_reference: %{message_id: message.id}
|
||||||
)
|
)
|
||||||
|
|
||||||
{:ok, _} ->
|
{:ok, _requests_used, _requests_limit} ->
|
||||||
do_identification(message)
|
do_identification(message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ defmodule PlantIdDiscordBot.RateLimiter do
|
|||||||
use GenServer
|
use GenServer
|
||||||
require Logger
|
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 %{
|
@custom_limits %{
|
||||||
1_002_507_312_159_797_318 => 100,
|
1_002_507_312_159_797_318 => 100,
|
||||||
@@ -34,19 +37,26 @@ defmodule PlantIdDiscordBot.RateLimiter do
|
|||||||
@doc """
|
@doc """
|
||||||
Check if the number of requests for a guild exceeds the limit.
|
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
|
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
|
case get(guild_id) do
|
||||||
{:ok, value} ->
|
{:ok, value} ->
|
||||||
if value >= @request_limit do
|
if value >= request_limit do
|
||||||
{:limit_exceeded, value}
|
{:limit_exceeded, value, request_limit}
|
||||||
else
|
else
|
||||||
{:ok, value}
|
{:ok, value, request_limit}
|
||||||
end
|
end
|
||||||
|
|
||||||
{:error, _} ->
|
{:error, _} ->
|
||||||
put(guild_id, 0)
|
put(guild_id, 0)
|
||||||
{:ok, 0}
|
Logger.debug("Set counter for guild #{guild_id} to 0")
|
||||||
|
{:ok, 0, request_limit}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user