feat(api): return slowmode cooldown on typing

This commit is contained in:
dansatch authored and Rory& committed 2026-08-22 18:05:47 +02:00
1 parent 5b863a11f2
commit 74df883a44
1 file changed
+32 -2
+32 -2
View File
@@ -18,8 +18,8 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api/middlewares";
import { Channel, Member } from "@spacebar/database";
import { emitEvent, TypingStartEvent } from "@spacebar/util";
import { Channel, Member, Message } from "@spacebar/database";
import { emitEvent, getPermission, TypingStartEvent } from "@spacebar/util";
const router: Router = Router({ mergeParams: true });
@@ -28,6 +28,7 @@ router.post(
route({
permission: "SEND_MESSAGES",
responses: {
200: {},
204: {},
404: {},
403: {},
@@ -40,6 +41,35 @@ router.post(
const channel = await Channel.findOneOrFail({
where: { id: channel_id },
});
const limit = channel.rate_limit_per_user;
if (limit) {
const lastMsgTime = (
await Message.findOne({
where: {
channel_id: channel.id,
author_id: user_id,
},
select: { timestamp: true },
order: { timestamp: "DESC" },
})
)?.timestamp;
if (lastMsgTime) {
const cooldown = +lastMsgTime + limit * 1000 - Date.now();
if (cooldown > 0) {
const permission = await getPermission(user_id, channel.guild_id, channel);
if (!permission.has("MANAGE_MESSAGES") && !permission.has("MANAGE_CHANNELS") && !permission.has("BYPASS_SLOWMODE")) {
return res.status(200).json({
message_send_cooldown_ms: cooldown,
});
}
}
}
}
const member = await Member.findOne({
where: { id: user_id, guild_id: channel.guild_id },
relations: { roles: true, user: true },