Maplebot is a project mainly written in JavaScript, it's free.
A small extensible xmpp bot built with nodejs
MapleBot is a simple XMPP bot built with nodejs. Its built using a number of configurable tasks. Each task binds a set of commands to the bot. When the bot encounters a command it knows. The connected function is run. MapleBot makes a great bot to use on company jabber networks, and can easily be trained to do things like send reminders or get the weather.
You can install all of Maplebot's dependencies using npm
.
npm install .
This will install all the dependencies. You can make sure things worked by running the tests:
npm test
Included in the source is a sample configuration file, fill out the configuration values to get MapleBot running. Some of the most important configuration options are:
username
The login name MapleBot should use when joining the jabber
service.password
The password to use.room
The room you want the bot to join.nick
The nickname the bot should use.tasks
The tasks the bot should bind.Tasks in MapleBot are where you build the commands and features you want
MapleBot to have. Each task binds a number of commands to the bot.
When the bot receives a message in the group chat that starts with the
command value, it dispatches the remainder of the message to the bound
function. There is a built in task base to help facilitate building
tasks. Each task is expected to have a bindCommands
method that
accepts an object that commands are inserted into. See the provided
QueueManager or Weather tasks for how to build a simple task.
When defining tasks in your configuration file you can also pass in any additional configuration data for those tasks.
// in config.json
module.exports = {
tasks: {
'CodeReview': {
module: './code-review',
autoPairTime: '10:30:00'
}
}
};
When using an object for a task definition, you must include the
module
key. It has to point at the file containing the task you want
to use. All other keys + values will be passed to the tasks's
constructor as the second parameter. The first is the bot
the task
is bound to.
Responses can be created in a few different formats, each with different features:
A response using a promise would look like:
var task = require('./lib/task');
function doSomething() {
var promise = new task.Promise();
doSomethingAsync(promise);
return promise;
}
An object response could look like:
var response = {
body: 'I am message text',
subject: 'I will be set as the group chat topic in most clients.'
};
You can use object responses with both synchronous responses, as well as
promises. When using object responses you can direct the message to
specific rooms for multi-room bots, by setting the room
property. The
room property lets you reply directly to people from a groupchat room. You
can also change set the type
key to specify whether or not you want to
send a 'direct' or 'groupchat' type of message.
There are a few built-in tasks, that do a few things I need on a day to day basis:
!help
After setting up the configuration file, you can start the bot using
node bot.js
You call bot commands by sending the group chat a message starting with
one of the bound command keywords. For example, if you were using the
Weather
task, you could send:
!weather toronto,ontario
to the group chat. This will cause MapleBot to query the google weather api and reply with the result. Whenever a task command is called, it will be supplied one argument, a request. This request contains a number of properties that you can use:
room
The room the message came from.from
The person who sent the message.body
The message body text.type
Whether the the message was a direct or groupchat message.The requests can also be treated as a string, and appended into other text. If a response doesn't contain a room the request's room will be used.