diff --git a/src/util/types.d.ts b/src/util/types.d.ts index bd476ef..6a14b0a 100644 --- a/src/util/types.d.ts +++ b/src/util/types.d.ts @@ -16,6 +16,7 @@ import { Socket } from "../ws/Socket"; declare type Omit = Pick>; declare type UserFlags = Partial<{ + // Brandon flags freeze_name: number; "no chat rate limit": number; chat_curse_1: number; @@ -24,6 +25,11 @@ declare type UserFlags = Partial<{ volume: number; cant_chat: number; cansetcrowns: number; + + // new + "no note rate limit": number; + "no cursor rate limit": number; + "no userset rate limit": number; }>; declare interface Tag { diff --git a/src/ws/events/user/handlers/n.ts b/src/ws/events/user/handlers/n.ts index 67c3622..f4b14e8 100644 --- a/src/ws/events/user/handlers/n.ts +++ b/src/ws/events/user/handlers/n.ts @@ -38,7 +38,24 @@ export const n: ServerEventListener<"n"> = { if ((crownsolo && socket.isOwner()) || !crownsolo) { // Shiny hat exists and we have shiny hat // or there is no shiny hat - if (socket.noteQuota.spend(amount)) { + const flags = socket.getUserFlags(); + let canPlay = false; + let shouldRateLimit = true; + + // why is this so big + + if (flags !== null && flags["no note rate limit"]) { + canPlay = true; + shouldRateLimit = false; + } + + if (shouldRateLimit) { + if (socket.noteQuota.spend(amount)) { + canPlay = true; + } + } + + if (canPlay) { // make noise socket.playNotes(msg); }