JS:在一个时间范围内 X 条消息后的聊天超时功能

JS: Chat Timeout Functionality after X messages in a timeframe

所以我要做一个垃圾聊天功能。当用户发送一条消息时,我想检查它是否是用户在 30 秒时间范围内发送的第 15 条消息。如果是,我想给用户 1 分钟的“超时”,这样他就不能再写消息了。

我已经为此苦苦挣扎了一段时间,但找不到好的最佳实践答案。提前致谢。

const contexts = new WeakMap()

const onSubmit = event => {
  const { target } = event
  const context = contexts.get(target)
  const now = Date.now()

  event.preventDefault()
  
  if (context.timeout > now) {
    return
  }

  context.timeout = now + 60000
  // fetch
}

contexts.set(form, { timeout: 0 })
form.addEventListener('submit', onSubmit)

并且,在上下文中,您还可以存储消息计数器等,以便能够在您的侦听器中对其进行测试。

我解决了。这是我的解决方案:

var chatIsTimedOut = false;
var canWrite = true;
var msgsIn30s = 0;
var chatMsgStarted = false;

function addMsg() {
    if (msgsIn30s > 4 && canWrite) {
        console.log("timeout begin");
        canWrite = false;
        chatIsTimedOut = true;
        setTimeout(() => {
            canWrite = true;
            chatIsTimedOut = false;
            msgsIn30s = 0;
            console.log("tmieout away");
        }, 60000);
    } else if (canWrite) {
        msgsIn30s++;
        if (!chatMsgStarted) {
            chatMsgStarted = true;
            setTimeout(() => {
                chatMsgStarted = false;
                msgsIn30s = 0;
            }, 30000);
        }
    }

    console.log("Msgs: ", msgsIn30s);
    console.log("Can Write: ", canWrite);
}