Chat Bot Example
This example shows how to create a Union chat bot for Node.JS using OrbiterMicroNode. To run the chat bot, follow these steps:
- Obtain and install Node.JS from http://nodejs.org/. This sample has been tested up to Node 0.4.8.
- Download the chat bot code from http://www.unionplatform.com/samples/orbitermicronode/chatbot/OrbiterMicroNodeChatBot.zip.
- Unzip the file you downloaded in step 2. A folder named OrbiterMicroNodeChatBot will be created.
- From your system's command prompt, issue the following command from the OrbiterMicroNodeChatBot directory:
node OrbiterMicroNodeChatBot.js tryunion.com 80
When the chat bot runs, you should see a series of updates displayed in the system console similar to those shown in the following diagram:
The chat bot connects to the chat room from this OrbiterMicro's chat example, which is runs in a web browser.
Here is the source code for the chat bot:
//==============================================================================
// VARIABLES
//==============================================================================
// The root of the OrbiterMicro object model
var net;
// A reference to this client's Orbiter object
var orbiter;
// A reference to this client's MessageManager object
var msgManager;
// A convenience reference to the UPC object, which lists all available messages
var UPC;
// The id of the room to create and join
var roomID = "chatRoom";
// The frequency with which this client sends automated messages to the room
var sendMessageFrequency = 30000;
// Command-line arguments
var host;
var port;
var debugMode = false;
//==============================================================================
// BOOT FUNCTIONS
//==============================================================================
function main () {
// Quit if command line args don't validate
var args = process.argv.slice(2);
if (args.length < 2) {
usage();
return;
}
out('');
out('=============================');
out('* OrbiterMicroNode Chat Bot *');
out('=============================');
out('Booting... Use [q] to exit.');
// Parse command-line args
host = args[0];
port = args[1];
debugMode = args[2] == "debug";
// Load OrbiterMicroNode module
net = require('OrbiterMicroNode_2.0.0.136_Release').net;
// Listen for command-line input
var stdin = process.openStdin();
stdin.on('data', onStdInData);
// Start the client
init();
}
function usage() {
out('Usage:');
out('node OrbiterMicroNodeChatBot.js [host] [port] [debug]');
out(' -debug (optional) enables debug logging')
out('E.g. (no debugging):');
out(' node OrbiterMicroNodeChatBot.js tryunion.com 80');
out('E.g. (with debugging):');
out(' node OrbiterMicroNodeChatBot.js tryunion.com 80 debug');
process.exit();
}
//==============================================================================
// INITIALIZATION
//==============================================================================
function init () {
// Create the Orbiter instance, used to connect to and communicate with Union
orbiter = new net.user1.orbiter.Orbiter();
// Register for Orbiter's connection events
orbiter.addEventListener(net.user1.orbiter.OrbiterEvent.READY, readyListener, this);
orbiter.addEventListener(net.user1.orbiter.OrbiterEvent.CLOSE, closeListener, this);
UPC = net.user1.orbiter.UPC;
// Register for incoming messages from Union
msgManager = orbiter.getMessageManager();
msgManager.addMessageListener(UPC.JOINED_ROOM, joinedRoomListener, this);
msgManager.addMessageListener("CHAT_MESSAGE", chatMessageListener, this, [roomID]);
// Register for log events if requested
if (debugMode) {
orbiter.getLog().setLevel("debug");
orbiter.getLog().addEventListener("UPDATE", logUpdateListener);
}
// Connect to Union
orbiter.connect(host, port);
out("Connecting to Union...");
}
//==============================================================================
// ORBITER EVENT LISTENERS
//==============================================================================
// Triggered when the connection is ready
function readyListener (e) {
out("Connected.");
out("Joining chat room...");
// Create the chat room
msgManager.sendUPC(UPC.CREATE_ROOM, roomID);
// Join the chat room
msgManager.sendUPC(UPC.JOIN_ROOM, roomID);
}
// Triggered when the connection is closed
function closeListener (e) {
out("Orbiter connection closed.");
}
//==============================================================================
// CHAT ROOM EVENT LISTENER
//==============================================================================
// Triggered when a JOINED_ROOM message is received
function joinedRoomListener () {
out("Chat bot ready!");
// Say hello to the chat room
sendMessage("Hello from OrbiterMicroNode! I'm a robot running in Node.JS.");
// Send a message every 'sendMessageFrequency' milliseconds
var birthtime = new Date();
setInterval(function () {
var minutes = Math.floor((new Date() - birthtime)/1000/60);
sendMessage("I'm OrbiterMicroNode bot #" + orbiter.getClientID() + "."
+ " I've been here for " + minutes + " minute(s).");
}, sendMessageFrequency);
}
//==============================================================================
// CHAT SENDING AND RECEIVING
//==============================================================================
// Sends a chat message to everyone in the chat room
function sendMessage (message) {
msgManager.sendUPC(UPC.SEND_MESSAGE_TO_ROOMS, "CHAT_MESSAGE", roomID, "true", "", message);
}
// Triggered when a chat message is received
function chatMessageListener (fromClientID, message) {
// Show messages from other users
if (fromClientID != orbiter.getClientID()) {
out("User" + fromClientID + ": " + message);
}
}
//==============================================================================
// LOG UPDATE LISTENER
//==============================================================================
function logUpdateListener (e) {
out(e.getLevel() + ": " + e.getMessage());
}
//==============================================================================
// STD IN/OUT
//==============================================================================
function out (msg) {
console.log(msg);
}
function onStdInData (data) {
var data = data.toString().trim();
var cmd = data.split(':')[0];
var data = data.split(':')[1];
switch (cmd) {
case 'exit':
case 'quit':
case 'q':
process.exit();
break;
}
}
//==============================================================================
// BOOT THE APP
//==============================================================================
main();