Untitled
unknown
javascript
2 years ago
5.7 kB
5
Indexable
// Time difference threshold (in milliseconds) to identify spam (increased to 1 second) const timeDifferenceThreshold = 2000; // Message limit within a specific time frame (set this value to 2 for more than 2 messages in 1 second) const messageLimit = 5; // Object to track user-specific data let userChatData = {}; // Maximum number of consecutive times a user is allowed to exceed the message limit const thresholdMaxTries = 5; // Function to format time difference function formatTimeDifference(difference) { // Define time units const units = ['hour', 'minute', 'second', 'millisecond']; // Calculate values for each time unit const values = [ Math.floor(difference / (1000 * 60 * 60)), // hours Math.floor((difference / (1000 * 60)) % 60), // minutes Math.floor((difference / 1000) % 60), // seconds difference % 1000 // milliseconds ]; // Map each non-zero value to a formatted string with its corresponding unit const formattedStrings = values .map((value, index) => (value > 0 ? `${value} ${units[index]}${value > 1 ? 's' : ''}` : '')); // Filter out empty strings (units with a value of 0) and join the remaining strings const formattedTime = formattedStrings .filter(Boolean) .join(' '); // Return the formatted time string return formattedTime; } // Helper function to remove all messages by a user function removeUserMessages(userId) { const userMessages = document.querySelectorAll(`.messages-content span[data-user="${userId}"]`); userMessages.forEach(message => { const pTag = message.closest('p'); if (pTag) { pTag.remove(); } }); } // Function to track and handle spam messages function banSpammer() { // Get the current timestamp const currentTime = new Date().getTime(); // Select the last p element in the chat const latestMessage = document.querySelector('.messages-content p:last-child'); if (latestMessage) { // Get user ID from the last message const userIdElement = latestMessage.querySelector('span[data-user]'); const userId = userIdElement ? userIdElement.getAttribute('data-user') : null; // Initialize user-specific data outside the if block if (!userChatData[userId]) { userChatData[userId] = { messagesCount: 0, thresholdMaxTries: 0, time: currentTime, userName: userIdElement ? userIdElement.textContent : 'Unknown User', previousTime: null, firstInteraction: true, banned: false }; } // Calculate time difference const timeDifference = currentTime - userChatData[userId].time; // Function to generate log information dynamically function generateLogUserInfo() { return `%cID: ${userId}, Name: ${userChatData[userId].userName}, ` + `Time Difference: ${formatTimeDifference(timeDifference)}, ` + `Messages Count: ${userChatData[userId].messagesCount}, ` + `Spam Tries: ${userChatData[userId].thresholdMaxTries}, ` + `Banned: ${userChatData[userId].banned}`; } // Special handling for the first interaction if (userChatData[userId].firstInteraction) { console.log(`%c${userChatData[userId].userName} posted the first message for the current chat session.`, 'color: yellow'); userChatData[userId].firstInteraction = false; } // Check if the user is banned else if (userChatData[userId].banned) { // Remove all the messages by that user continuously until banned removeUserMessages(userId); } else { if (timeDifference < timeDifferenceThreshold) { // Check if the time difference is less than the threshold userChatData[userId].messagesCount++; if (userChatData[userId].messagesCount > messageLimit) { // Remove all messages by that user if messages limit was exceeded removeUserMessages(userId); // Check if the thresholdMaxTries is equal or more than the limit userChatData[userId].thresholdMaxTries++; if (userChatData[userId].thresholdMaxTries >= thresholdMaxTries) { // Set 'banned' to true after passing the max thresholdMaxTries to remove user messages passing the messages limit checking userChatData[userId].banned = true; console.log(generateLogUserInfo(), 'color: pink'); console.log(`%c${userChatData[userId].userName} cannot send messages anymore`, 'color: pink'); } else { // Log the information immediately after updating the values if not banned console.log(generateLogUserInfo(), 'color: red'); } } else { // Log the information immediately after updating the values if not banned and not exceeding the limit console.log(generateLogUserInfo(), 'color: green'); } } else { // If none of the above conditions are met, update user-specific data for the current interaction userChatData[userId].previousTime = userChatData[userId].time; userChatData[userId].time = currentTime; userChatData[userId].messagesCount = 1; // Log the information immediately after updating the values if not banned and not exceeding the limit console.log(generateLogUserInfo(), 'color: green'); } } } }
Editor is loading...
Leave a Comment