簡體   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