繁体   English   中英

如果用户说了些什么,我如何发送系统响应? NodeJS/socketio

[英]How can I send a system response if a user says something? NodeJS/socketio

我想这样做,如果用户说了特定的事情,socket.io 就会做出回应。

前任。
输入: !hi
输出:你好!

如果有办法做到这一点,我想知道如何,谢谢!

我尝试制作一些东西,所以如果用户只是按下发送按钮,它会发送“请输入一些东西”,只有用户输入空格才能看到它。

var spaced = ' ';

if (spaced) {
  socket.emit('message', {
        username: 'System',
        text: 'Please Type Something',
        timestamp: moment().valueOf()
    });
}

服务器.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 = {};

app.use(express.static(__dirname + '/public'));

io.on('connection', function(socket) {
  
  /*var socketId = socket.id;
  var clientIp = socket.request.connection.remoteAddress;

    console.log('A user is connected. - IP: ' + clientIp + " | ID: " + socketId);*/
  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: 'System',
                text: userData.username + ' has left!',
                timestamp: moment().valueOf()
            });
            delete connectedUsers[socket.id];
        }
    });

    socket.on('joinRoom', function(req, callback) {
        if (req.room.replace(/\s/g, "").length > 0 && 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: 'System',
                    text: req.username + ' has joined!',
                    timestamp: moment().valueOf()
                });
                callback({
                    nameAvailable: true
                });
            }
        } else {
            callback({
                nameAvailable: false,
                error: 'Please complete the forum.'
            });
        }
    });

    socket.on('message', function(message) {
        message.timestamp = moment().valueOf();
        io.to(connectedUsers[socket.id].room).emit('message', message);
    });

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

});

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

我的 index.html 中的正文:

<body>
    <div class="container">
      <div id="login-area">
        <div class="row">
          <div class="large-7 medium-7 small-12 columns small-centered">
            <form id="login-form">
              <h2>Twintails🎀 Bot Chatroom</h2>
              <p id="error-msg"></p>
              <input
                type="text"
                name="username"
                placeholder="Enter your username"
              />
              <input
                type="text"
                name="room"
                placeholder="Enter a chat room name"
              />
              <input type="submit" value="Join Chat" />
            </form>
          </div>
        </div>
      </div>
      <div class="row" id="message-area">
        <div class="large-8 columns small-centered">
          <h2>Twintails🎀 Bot Chatroom</h2>
          <div class="chat-wrap">
            <div class="top">
              <h5 class="room-title"></h5>
            </div>
            <div id="messages"></div>
            <form id="message-form">
              <div class="input-group">
                <input
                  type="text"
                  placeholder="Type message here"
                  class="input-group-field"
                  name="message"
                />
                <div class="input-group-button">
                  <input type="submit" value="Send" />
                </div>
              </div>
            </form>
          </div>
        </div>
      </div>
      <footer>
        <p>
          Add the
          <a href="https://twintails-bot-dashboard.glitch.me/" target="_blank"
            >Twintails🎀 bot!</a
          >
        </p>
        <p>
          Use the 'Mod' room to talk to mods!
        </p>
      </footer>
    </div>
    <script src="/js/jquery.js"></script>
    <script src="/js/socket.io-1.7.3.min.js"></script>
    <script src="/js/moment.min.js"></script>
    <script src="/js/app.js"></script>
    <script src="/js/foundation.min.js"></script>
    <script type="text/javascript">
      $(document).foundation();
    </script>
  </body>

为什么不使用简单的 if 语句?

if (mySocketData === "!hi") {
    socket.emit('Hello!');
}

Socket.IO 新手,不确定这是否有帮助,抱歉!

如果您正在谈论的是当服务器收到特定类型的消息时,您希望将特定响应直接发送回输入该消息的用户,您可以执行以下操作:

// this is your existing server-side handler which the `if` statement added to it
socket.on('message', function(message) {
    if (message.text === '!hi') {
        socket.emit('message', {
            username: 'System',
            text: 'hello!',
            timestamp: moment().valueOf()
        });
    } else {
        message.timestamp = moment().valueOf();
        io.to(connectedUsers[socket.id].room).emit('message', message);
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM