mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 06:07:21 +01:00
* Adding code to look over the most recent messages to look for spam from a user * Adding in translatable error message * Adding 2 tests for spam detection * Fixing changes requested for pull request * Adding unit tests for group and fixing requested changes * Fixing message and tests * Forgot to remove this import * Fixing lint errors * Cleaning up the code and tests to be more readable * Fixing lint errors * Fixed linting issues * Syntax fixes * Updated grammar
This commit is contained in:
@@ -46,6 +46,16 @@ const CRON_SAFE_MODE = nconf.get('CRON_SAFE_MODE') === 'true';
|
||||
const CRON_SEMI_SAFE_MODE = nconf.get('CRON_SEMI_SAFE_MODE') === 'true';
|
||||
const MAX_UPDATE_RETRIES = 5;
|
||||
|
||||
/*
|
||||
# Spam constants to limit people from sending too many messages too quickly
|
||||
# SPAM_MESSAGE_LIMIT - The amount of messages that can be sent in a time window
|
||||
# SPAM_WINDOW_LENGTH - The window length for spam protection in milliseconds
|
||||
# SPAM_MIN_EXEMPT_CONTRIB_LEVEL - Anyone at or above this level is exempt
|
||||
*/
|
||||
export const SPAM_MESSAGE_LIMIT = 2;
|
||||
export const SPAM_WINDOW_LENGTH = 60000; // 1 minute
|
||||
export const SPAM_MIN_EXEMPT_CONTRIB_LEVEL = 4;
|
||||
|
||||
export let schema = new Schema({
|
||||
name: {type: String, required: true},
|
||||
description: String,
|
||||
@@ -1202,6 +1212,31 @@ schema.methods.removeTask = async function groupRemoveTask (task) {
|
||||
}, {multi: true}).exec();
|
||||
};
|
||||
|
||||
// Returns true if the user has reached the spam message limit
|
||||
schema.methods.checkChatSpam = function groupCheckChatSpam (user) {
|
||||
if (this._id !== TAVERN_ID) {
|
||||
return false;
|
||||
} else if (user.contributor && user.contributor.level >= SPAM_MIN_EXEMPT_CONTRIB_LEVEL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let currentTime = Date.now();
|
||||
let userMessages = 0;
|
||||
for (let i = 0; i < this.chat.length; i++) {
|
||||
let message = this.chat[i];
|
||||
if (message.uuid === user._id && currentTime - message.timestamp <= SPAM_WINDOW_LENGTH) {
|
||||
userMessages++;
|
||||
if (userMessages >= SPAM_MESSAGE_LIMIT) {
|
||||
return true;
|
||||
}
|
||||
} else if (currentTime - message.timestamp > SPAM_WINDOW_LENGTH) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
schema.methods.isSubscribed = function isSubscribed () {
|
||||
let now = new Date();
|
||||
let plan = this.purchased.plan;
|
||||
|
||||
Reference in New Issue
Block a user