A bot for GroupMe (https://dev.groupme.com/tutorials/bots). Based on the Sample GroupMe NodeJS Callback Bot.
This bot can respond to commands sent on multiple groups, and can also be used to publish messages on a regular schedule. A lot of the commands are setup for my groups, but it is easy to extend this bot and add your own commands. Feel free to fork this repository. Consider contributing your changes/additional commands.
I recommend taking a look at Hubot - it is written by GitHub, Inc., supports multiple chat-backends, is very extensible, and has a huge community contributing lots of useful scripts. It does not officially support GroupMe, but there is an adapter available.
-
Create a GroupMe Bot. For every group you want to interact with, you need to register a new GroupMe bot. For the callback URL, pass the URL of the server where this application is hosted.
-
Find your Bot ID and save for later. Also save the group ID and optionally the group name.
-
Copy
config_template.js
toconfig.js
. Make sure to keepconfig.js
private/hidden, as it will hold secret data and should not be publicly visible. If you are using Git, it is already added to the.gitignore
. DO NOT ADD CONFIGURATION DATA TOconfig_template.js
, which is meant to be in source control. It should only be used to createconfig.js
. -
Open
config.js
and edit theconfig.bots
array. For every group you have a bot for, add the following to the array:
{
botID: 'xxxxxxxxxx',
groupID: 'xxxxxxxx',
groupLocalID: '1', // an identifier for this group used in this application only
botName: 'mybot',
groupName: 'the-group-name' // optional
}
- Give every bot a
groupLocalID
. This can be any identifier, which can later be used to send messages to the group. The advantage of this approach is that all the GroupMe specific configuration and secrets remain in theconfig.js
file, and the source code only contains thegroupLocalID
, which is meaningless outside this application. - The
botName
is the name which the bot responds to. All commands to the bot in the group must start with the givenbotName
. - You can optionally store other data along with the bot, such as the group name.
- Add any other configuration/secret API keys to
config.js
, and access them in your scripts. For example, one of the commands is for the bot to tell the current weather. The weather is fetched from the Yahoo Weather API, and its secret App ID is stored inconfig.js
asconfig.yahooWeatherAppId
.
- Install node.js. Node's package manager (npm) comes bundled.
- The file
run_server.sh
is a simple shell script which sets up the project directory and runs the server. Make sure to read its contents carefully before executing it. You might also want to edit it to suit your needs. Once ready, execute the run script (it must be run from the project's root directory):
$ cd <path/to/groupme-bot/>
$ ./run_server.sh
Commands are automatically picked up from the commands/
directory. To add your own command, create a JS module and place it in that directory.
The module should export a single function which accepts as its parameter a command registration callback. This callback should be called with the
command name, its description and the command function to register the command.
The command function is called when the bot receives a message with the given command name. The command function will be called with four parameters:
- the group's local ID (see item 4 in the Configuring section)
- the sending user's display name (may be empty - such as when a command is triggered as a scheduled message and not from a message sent by a user)
- an array of words in the message following the command (used as command arguments)
- a callback function, which should be called with the response
A template for a command module is:
module.exports = function (registerCommand) {
registerCommand(
'command',
'description',
function (groupLocalID, userDisplayName, msgTokens, callback) {
var response = '...';
callback(response);
}
);
};
Look at existing modules in the commands/
directory for examples.
MIT Licensed. See LICENSE.md.