82 lines
2.6 KiB
Rust
82 lines
2.6 KiB
Rust
use revolt_ratelimits::ratelimiter::RatelimitResolver;
|
|
use rocket::{http::Method, Request};
|
|
|
|
pub struct DeltaRatelimits;
|
|
|
|
impl<'a> RatelimitResolver<Request<'a>> for DeltaRatelimits {
|
|
fn resolve_bucket<'r>(&self, request: &'r Request<'_>) -> (&'r str, Option<&'r str>) {
|
|
let (segment, resource, extra) = if request.routed_segment(0) == Some("0.8") {
|
|
(
|
|
request.routed_segment(1),
|
|
request.routed_segment(2),
|
|
request.routed_segment(3),
|
|
)
|
|
} else {
|
|
(
|
|
request.routed_segment(0),
|
|
request.routed_segment(1),
|
|
request.routed_segment(2),
|
|
)
|
|
};
|
|
|
|
if let Some(segment) = segment {
|
|
#[allow(clippy::redundant_locals)]
|
|
let resource = resource;
|
|
|
|
let method = request.method();
|
|
match (segment, resource, method) {
|
|
("users", target, Method::Patch) => ("user_edit", target),
|
|
("users", _, _) => {
|
|
if let Some("default_avatar") = extra {
|
|
return ("default_avatar", None);
|
|
}
|
|
|
|
("users", None)
|
|
}
|
|
("bots", _, _) => ("bots", None),
|
|
("channels", Some(id), _) => {
|
|
if request.method() == Method::Post {
|
|
if let Some("messages") = extra {
|
|
return ("messaging", Some(id));
|
|
}
|
|
}
|
|
|
|
("channels", Some(id))
|
|
}
|
|
("servers", Some(id), _) => ("servers", Some(id)),
|
|
("auth", _, _) => {
|
|
if request.method() == Method::Delete {
|
|
("auth_delete", None)
|
|
} else {
|
|
("auth", None)
|
|
}
|
|
}
|
|
("swagger", _, _) => ("swagger", None),
|
|
("safety", Some("report"), _) => ("safety_report", Some("report")),
|
|
("safety", _, _) => ("safety", None),
|
|
_ => ("any", None),
|
|
}
|
|
} else {
|
|
("any", None)
|
|
}
|
|
}
|
|
|
|
fn resolve_bucket_limit(&self, bucket: &str) -> u32 {
|
|
match bucket {
|
|
"user_edit" => 2,
|
|
"users" => 20,
|
|
"bots" => 10,
|
|
"messaging" => 10,
|
|
"channels" => 15,
|
|
"servers" => 5,
|
|
"auth" => 15,
|
|
"auth_delete" => 255,
|
|
"default_avatar" => 255,
|
|
"swagger" => 100,
|
|
"safety" => 15,
|
|
"safety_report" => 3,
|
|
_ => 20,
|
|
}
|
|
}
|
|
}
|