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);
}
所以我要做一个垃圾聊天功能。当用户发送一条消息时,我想检查它是否是用户在 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);
}