Как я могу настроить защиту от спама для своего сокета.чат ввода-вывода?

#javascript #node.js #socket.io

#javascript #node.js #socket.io

Вопрос:

Я хочу добавить функцию защиты от нежелательной почты в свой сокет.чат ввода-вывода с использованием модуля socket-anti-spam, но я понятия не имею, как это сделать. Я пробовал пару вещей, но они, похоже, не сработали.

Если вы не можете помочь с модулем защиты от нежелательной почты, подойдет любой другой модуль. Эта версия моего server.js имеет настройку защиты от нежелательной почты, но, похоже, она не работает.

Если вам нужна какая-либо другая информация (которая, я сомневаюсь, вам понадобится), например, HTML или CSS, просто прокомментируйте, и я обновлю этот вопрос.

Мой server.js:

 var PORT = process.env.PORT || 3000;
var express = require("express");
var app = express();
var http = require("http").Server(app);
var io = require("socket.io")(http);
var moment = require("moment");
var connectedUsers = {};
var prefix = "^";
var sysusername = "Twintails🎀";


function sleep(ms) {
  var unixtime_ms = new Date().getTime();
  while (new Date().getTime() < unixtime_ms   ms) {}
}

 const SocketAntiSpam  = require('socket-anti-spam')
  const socketio = require('socket.io').listen(8080)

  const socketAntiSpam = new SocketAntiSpam({
    banTime:            30,         // Ban time in minutes
    kickThreshold:      2,          // User gets kicked after this many spam score
    kickTimesBeforeBan: 1,          // User gets banned after this many kicks
    banning:            true,       // Uses temp IP banning after kickTimesBeforeBan
    io:                 socketio,  // Bind the socket.io variable
  })

app.use(express.static(__dirname   "/public"));

io.on("connection", function(socket) {

  socketAntiSpam.event.on('ban', data => {
    socket.emit("message", {
    username: sysusername,
    text: "A user was banned...",
    timestamp: moment().valueOf()
  });
  })

  console.log("A user is connected.");

  socket.on("disconnect", function() {
    var userData = connectedUsers[socket.id];
    if (typeof userData !== "undefined") {
      socket.leave(connectedUsers[socket.id]);
      io.to(userData.room).emit("message", {
        username: sysusername,
        text: userData.username   " has left!",
        timestamp: moment().valueOf()
      });
      delete connectedUsers[socket.id];
    }
  });

  socket.on("joinRoom", function(req, callback) {
    if (req.username.replace(/s/g, "") !== "Twintails🎀") {
      if (req.username.replace(/s/g, "").length < 24) {
        if (
          req.room.replace(/s/g, "").length > 0 amp;amp;
          req.username.replace(/s/g, "").length > 0
        ) {
          var nameTaken = false;

          Object.keys(connectedUsers).forEach(function(socketId) {
            var userInfo = connectedUsers[socketId];
            if (
              userInfo.username.toUpperCase() === req.username.toUpperCase()
            ) {
              nameTaken = true;
            }
          });

          if (nameTaken) {
            callback({
              nameAvailable: false,
              error: "This username is taken, please choose another one."
            });
          } else {
            connectedUsers[socket.id] = req;
            socket.join(req.room);
            socket.broadcast.to(req.room).emit("message", {
              username: sysusername,
              text: req.username   " has joined!",
              timestamp: moment().valueOf()
            });
            callback({
              nameAvailable: true
            });
          }
        } else {
          callback({
            nameAvailable: false,
            error: "Please complete the forum."
          });
        }
      } else {
        callback({
          nameAvailable: false,
          error: "Please make a username less than 24 characters."
        });
      }
    } else {
      callback({
        nameAvailable: false,
        error: "Your username can't be: "   sysusername
      });
    }
  });

  socket.on("message", function(message, callback, req) {
    if (message.text.length > null) {
      if (message.text !== " ") {
        if (message.text !== "  ") {
          if (message.text !== "   ") {
            if (message.text !== "    ") {
              if (message.text !== "     ") {
                if (message.text !== "      ") {
                  if (message.text !== "       ") {
                    if (message.text !== "        ") {
                      if (message.text !== "         ") {
                        if (message.text.length < 200) {
                          message.timestamp = moment().valueOf();
                          io.to(connectedUsers[socket.id].room).emit(
                            "message",
                            message
                          );
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  });

  socket.emit("message", {
    username: sysusername,
    text: "Ask someone to join this chat room to start talking.",
    timestamp: moment().valueOf()
  });

  socket.on("message", function(message) {
    if (message.text === prefix   "discord") {
      socket.emit("message", {
        username: sysusername,
        text: "Join the Twintails🎀 server here: https://discord.gg/fK9ynNq",
        timestamp: moment().valueOf()
      });
      sleep(1000);
    }
  });

  socket.on("message", function(message) {
    if (message.text === prefix   "bot") {
      socket.emit("message", {
        username: sysusername,
        text: "Coming soon...",
        timestamp: moment().valueOf()
      });
      sleep(1000);
    }
  });
});

http.listen(PORT, function() {
  console.log("Server started on port "   PORT);
});
  

Спасибо!

Комментарии:

1. Пожалуйста, воздержитесь от размещения тегов в заголовке, особенно заглавными буквами. Это не помогает людям находить вопрос (теги, введенные в поле теги, делают это), и все заглавные буквы читаются как крик во многих уголках Интернета.

Ответ №1:

вы можете сохранять сообщения, которые отправляет пользователь, и предотвращать, если текущее сообщение похоже на предыдущее