Coder Social home page Coder Social logo

flint's Introduction

node-flint (v4)

Bot SDK for Node JS

News

2/22/17 IMPORTANT:

  • Note that Flint v4 is still using the node-sparky library version 3.1.19. However the repo for node-sparky is now on version 4 which has some major differences. This misalignment between Flint and Sparky version will be fixed in the next several weeks with the release of Flint v5. In the short term if you are accessing the spark object directly from Flint via flint.spark be sure to use the documentation for node-sparky 3.1.19.

4.4.x Update

  • bot.isDirectTo property added. This is set to the email of the other conversant in rooms of type 'direct'.
  • trigger.raw property added to flint.hears trigger callback object. This is the raw message without any processing to remove multiple spaces, CR/LF, or leading/trailing spaces.

4.3.x Update

  • bot.add() and bot.remove() now return an array of successfully added / removed room membership emails rather than the bot object itself.
  • Debug error messages for archived team rooms suppressed.

4.2.x Update

  • Persistent Storage for bot.store(), bot.recall(), and bot.forget() through new modular storage functionality.
  • Added in-memory storage module (default unless storage module is specified)
  • Added Redis storage module
  • Added boolean property flint.isUserAccount
  • Added method flint.storageDriver() to define storage backend
  • The flint.hears() method now can have a weight specified. This allows for overlapping and default actions.
  • Auto detection of Bot accounts
  • If Bot account is detected, the behavior of the trigger.args property inside the flint.hears() method performs additional parsing.

Potential Breaking Changes in 4.2.x

  • flint.machine boolean property renamed to flint.isBotAccount

Contents

Installation

Via Git

mkdir myproj
cd myproj
git clone https://github.com/nmarus/flint
npm install ./flint

Via NPM

mkdir myproj
cd myproj
npm install node-flint

Example Template Using Express

var Flint = require('node-flint');
var webhook = require('node-flint/webhook');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());

// flint options
var config = {
  webhookUrl: 'http://myserver.com/flint',
  token: 'Tm90aGluZyB0byBzZWUgaGVyZS4uLiBNb3ZlIGFsb25nLi4u',
  port: 80
};

// init flint
var flint = new Flint(config);
flint.start();

// say hello
flint.hears('/hello', function(bot, trigger) {
  bot.say('Hello %s!', trigger.personDisplayName);
});

// define express path for incoming webhooks
app.post('/flint', webhook(flint));

// start express server
var server = app.listen(config.port, function () {
  flint.debug('Flint listening on port %s', config.port);
});

// gracefully shutdown (ctrl-c)
process.on('SIGINT', function() {
  flint.debug('stoppping...');
  server.close();
  flint.stop().then(function() {
    process.exit();
  });
});

Restify Example

Overview

Most of Flint's functionality is based around the flint.hears function. This defines the phrase or pattern the bot is listening for and what actions to take when that phrase or pattern is matched. The flint.hears function gets a callback than includes two objects. The bot object, and the trigger object.

Flint generates a bot object instance of the Bot class for each room the Spark account Flint is running under. The bot object instance tracks the specifics about the room it is running in and is passed to the "hears" command callback when a phrase is heard.

Flint also generates a trigger object based on the person and room that the flint.hears function was triggered.

A simple example of a flint.hears() function setup:

flint.hears(phrase, function(bot, trigger) {
  bot.<command>
    .then(function(returnedValue) {
      // do something with returned value
    })
    .catch(function(err) {
      // handle errors
    });
});
  • phrase : This can be either a string or a regex pattern. If a string, the string is matched against the first word in the room message. message. If a regex pattern is used, it is matched against the entire message text.
  • bot : The bot object that is used to execute commands when the phrase is triggered.
  • bot.<command> : The Bot method to execute.
  • then : Node JS Promise keyword that invokes additional logic once the previous command is executed.
  • catch : handle errors that happen at either the original command or in any of the chained 'then' functions.
  • trigger : The object that describes the details around what triggered the phrase.
  • commands : The commands that are ran when the phrase is heard.

Authentication

The token used to authenticate Flint to the Spark API is passed as part of the options used when instantiating the Flint class. To change or update the token, use the Flint#setSparkToken() method.

Example:

var newToken = 'Tm90aGluZyB0byBzZWUgaGVyZS4uLiBNb3ZlIGFsb25nLi4u';

flint.setSparkToken(newToken)
.then(function(token) {
  console.log('token updated to: ' + token);
});

Storage

The storage system used in flint is a simple key/value store and resolves around these 3 methods:

  • bot.store(key, value) - Store a value to a bot instance where 'key' is a string and 'value' is a boolean, number, string, array, or object. This does not not support functions or any non serializable data. Returns the value.
  • bot.recall(key) - Recall a value by 'key' from a bot instance. Returns the value or undefined if not found.
  • bot.forget([key]) - Forget (remove) value(s) from a bot instance where 'key' is an optional property that when defined, removes the specific key, and when undefined, removes all keys.

When a bot despawns (removed from room), the key/value store for that bot instance will automatically be removed from the store. Flint currently has an in-memory store and a Redis based store. By default, the in-memory store is used. Other backend stores are possible by replicating any one of the built-in storage modules and passing it to the flint.storeageDriver() method.

The following app is titled "Hotel California" and demonstrates how to use bot.store() and bot.recall().

Hotel California:

var Flint = require('node-flint');
var webhook = require('node-flint/webhook');
var RedisStore = require('node-flint/storage/redis'); // load driver
var express = require('express');
var bodyParser = require('body-parser');
var _ = require('lodash');

var app = express();
app.use(bodyParser.json());

// flint options
var config = {
  webhookUrl: 'http://myserver.com/flint',
  token: 'Tm90aGluZyB0byBzZWUgaGVyZS4uLiBNb3ZlIGFsb25nLi4u',
  port: 80
};

// init flint
var flint = new Flint(config);

//start flint
flint.start();

// The Flint event is expecting a function that has a bot, person, and id parameter.
function checkin(eventBot, person, id) {
  // retrieve value of key 'htc'. When this is ran initially, this will return 'undefined'.
  var htc = eventBot.recall('htc');

  // if room bot has htc.enabled...
  if(eventBot && eventBot.active && htc.enabled) {
    // wait 5 seconds, add person back, and let them know they can never leave!
    setTimeout(() => {
      var email = person.emails[0];
      var name = person.displayName.split(' ')[0]; // reference first name

      // add person back to room...
      eventBot.add(email);

      // let person know  where they ended up...
      eventBot.say('<@personEmail:%s|%s>, you can **check out any time you like**, but you can **never** leave!', email, name);
    }, 5000); // 5000 ms = 5 seconds
  }
}

// set default messages to use markdown globally for this flint instance...
flint.messageFormat = 'markdown';

// check if htc is already active in room...
flint.on('spawn', bot => {
  // retrieve value of key 'htc'. When this is ran initially, this will return 'undefined'.
  var htc = bot.recall('htc');

  // if enabled...
  if(htc && htc.enabled) {
    // resume event
    bot.on('personExits', checkin);
  }
});

// open the hotel
flint.hears('open', function(bot, trigger) {
  // retrieve value of key 'htc'. When this is ran initially, this will return 'undefined'.
  var htc = bot.recall('htc');

  // if htc has not been initialized to bot memory...
  if(!htc) {
    // init key
    htc = bot.store('htc', {});

    // store default value
    htc.enabled = false;
  }

  // if not enabled...
  if(!htc.enabled) {
    htc.enabled = true;

    // create event
    bot.on('personExits', checkin);

    // announce Hotel California is open
    bot.say('**Hotel California** mode activated!');
  } else {
    // announce Hotel California is already open
    bot.say('**Hotel California** mode is already activated!');
  }
});

// close the hotel
flint.hears('close', function(bot, trigger) {
  // retrieve value of key 'htc'. When this is ran initially, this will return 'undefined'.
  var htc = bot.recall('htc');

  if(htc && htc.enabled) {
    htc.enabled = false;

    // remove event (removeListener is an inherited function from EventEmitter)
    bot.removeListener('personExits', checkin);

    // announce Hotel California is closed
    bot.say('**Hotel California** mode deactivated!');
  } else {
    // announce Hotel California is already closed
    bot.say('**Hotel California** mode is already deactivated!');
  }

});

// default message for unrecognized commands
flint.hears(/.*/, function(bot, trigger) {
  bot.say('You see a shimmering light, but it is growing dim...');
}, 20);

// define express path for incoming webhooks
app.post('/flint', webhook(flint));

// start express server
var server = app.listen(config.port, function () {
  flint.debug('Flint listening on port %s', config.port);
});

// gracefully shutdown (ctrl-c)
process.on('SIGINT', function() {
  flint.debug('stoppping...');
  server.close();
  flint.stop().then(function() {
    process.exit();
  });
});

Bot Accounts

When using "Bot Accounts" the major differences are:

  • Webhooks for message:created only trigger when the Bot is mentioned by name
  • Unable to read messages in rooms using the Spark API

Differences with trigger.args using Flint with a "Bot Account":

The trigger.args array is a shortcut in processing the trigger.text string. It consists of an array of the words that are in the trigger.message string split by one or more spaces. Punctation is included if there is no space between the symbol and the word. With bot accounts, this behaves a bit differently.

  • If defining a flint.hears() using a string (not regex), trigger.args is a filtered array of words from the message that begin with the first match of the string.

    • For example if the message.text is 'Yo yo yo Bot, find me tacos!' (where Bot is the mentioned name of the Bot Account) and the hears string is defined as 'find', then:

      • args[0] : 'find'
      • args[1] : 'me'
      • etc..
    • If the message text is "Hey, Find me tacos, Bot!", then:

      • args[0] : 'Find'
      • args[1] : 'me'
      • args[2] : 'tacos,'
      • args[3] : 'Bot!'
  • If defining a flint.hears() using regex, the trigger.args array is the entire message.

Flint Reference

Classes

Flint
Bot

Objects

Message : object

Message Object

File : object

File Object

Trigger : object

Trigger Object

Events

"log"

Flint log event.

"stop"

Flint stop event.

"start"

Flint start event.

"initialized"

Flint initialized event.

"roomLocked"

Room Locked event.

"roomUnocked"

Room Unocked event.

"personEnters"

Person Enter Room event.

"botAddedAsModerator"

Bot Added as Room Moderator.

"botRemovedAsModerator"

Bot Removed as Room Moderator.

"personAddedAsModerator"

Person Added as Moderator.

"personRemovedAsModerator"

Person Removed as Moderator.

"personExits"

Person Exits Room.

"mentioned"

Bot Mentioned.

"message"

Message Recieved.

"files"

File Recieved.

"spawn"

Bot Spawned.

"despawn"

Bot Despawned.

Flint

Kind: global class
Properties

Name Type Description
id string Flint UUID
active boolean Flint active state
intialized boolean Flint fully initialized
isBotAccount boolean Is Flint attached to Spark using a bot account?
isUserAccount boolean Is Flint attached to Spark using a user account?
person object Flint person object
email string Flint email
spark object The Spark instance used by flint

new Flint(options)

Creates an instance of Flint.

Param Type Description
options Object Configuration object containing Flint settings.

Example

var options = {
  webhookUrl: 'http://myserver.com/flint',
  token: 'Tm90aGluZyB0byBzZWUgaGVyZS4uLiBNb3ZlIGFsb25nLi4u'
};
var flint = new Flint(options);

flint.options : object

Options Object

Kind: instance namespace of Flint
Properties

Name Type Default Description
token string Spark Token.
webhookUrl string URL that is used for SPark API to send callbacks.
webhookSecret string If specified, inbound webhooks are authorized before being processed.
messageFormat string "text" Default Spark message format to use with bot.say().
maxPageItems number 50 Max results that the paginator uses.
maxConcurrent number 3 Max concurrent sessions to the Spark API
minTime number 600 Min time between consecutive request starts.
requeueMinTime number minTime*10 Min time between consecutive request starts of requests that have been re-queued.
requeueMaxRetry number 3 Msx number of atteempts to make for failed request.
requeueCodes array [429,500,503] Array of http result codes that should be retried.
requestTimeout number 20000 Timeout for an individual request recieving a response.
queueSize number 10000 Size of the buffer that holds outbound requests.
requeueSize number 10000 Size of the buffer that holds outbound re-queue requests.
id string "random" The id this instance of flint uses.
webhookRequestJSONLocation string "body" The property under the Request to find the JSON contents.
removeWebhooksOnStart Boolean true If you wish to have the bot remove all account webhooks when starting.

flint.setSparkToken(token) ⇒ Promise.<String>

Tests, and then sets a new Spark Token.

Kind: instance method of Flint

Param Type Description
token String New Spark Token for Flint to use.

Example

flint.setSparkToken('Tm90aGluZyB0byBzZWUgaGVyZS4uLiBNb3ZlIGFsb25nLi4u')
  .then(function(token) {
     console.log('token updated to: ' + token);
  });

flint.stop() ⇒ Promise.<Boolean>

Stop Flint.

Kind: instance method of Flint
Example

flint.stop();

flint.start() ⇒ Promise.<Boolean>

Start Flint.

Kind: instance method of Flint
Example

flint.start();

flint.restart() ⇒ Promise.<Boolean>

Restart Flint.

Kind: instance method of Flint
Example

flint.restart();

flint.getMessage(messageId) ⇒ Promise.<Message>

Get Message Object by ID

Kind: instance method of Flint

Param Type Description
messageId String Message ID from Spark API.

flint.getFiles(messageId) ⇒ Promise.<Array>

Get Files from Message Object by ID

Kind: instance method of Flint

Param Type Description
messageId String Message ID from Spark API.

flint.hears(phrase, action, [helpText], [preference]) ⇒ String

Add action to be performed when bot hears a phrase.

Kind: instance method of Flint

Param Type Default Description
phrase Regex | String The phrase as either a regex or string. If regex, matches on entire message.If string, matches on first word.
action function The function to execute when phrase is matched. Function is executed with 2 variables. Trigger and Bot. The Trigger Object contains information about the person who entered a message that matched the phrase. The Bot Object is an instance of the Bot Class as it relates to the room the message was heard.
[helpText] String The string of text that describes how this command operates.
[preference] Number 0 Specifies preference of phrase action when overlapping phrases are matched. On multiple matches with same preference, all matched actions are excuted. On multiple matches with difference preference values, only the lower preferenced matched action(s) are executed.

Example

// using a string to match first word and defines help text
flint.hears('/say', function(bot, trigger, id) {
  bot.say(trigger.args.slice(1, trigger.arges.length - 1));
}, '/say <greeting> - Responds with a greeting');

Example

// using regex to match across entire message
flint.hears(/(^| )beer( |.|$)/i, function(bot, trigger, id) {
  bot.say('Enjoy a beer, %s! 🍻', trigger.personDisplayName);
});

flint.clearHears(id) ⇒ null

Remove a "flint.hears()" entry.

Kind: instance method of Flint

Param Type Description
id String The "hears" ID.

Example

// using a string to match first word and defines help text
var hearsHello = flint.hears('/flint', function(bot, trigger, id) {
  bot.say('Hello %s!', trigger.personDisplayName);
});
flint.clearHears(hearsHello);

flint.showHelp([header], [footer]) ⇒ String

Display help for registered Flint Commands.

Kind: instance method of Flint

Param Type Default Description
[header] String Usage: String to use in header before displaying help message.
[footer] String Powered by Flint - https://github.com/nmarus/flint String to use in footer before displaying help message.

Example

flint.hears('/help', function(bot, trigger, id) {
  bot.say(flint.showHelp());
});

flint.setAuthorizer(Action) ⇒ Boolean

Attaches authorizer function.

Kind: instance method of Flint

Param Type Description
Action function The function to execute when phrase is matched to authenticate a user. The function is passed the bot, trigger, and id and expects a return value of true or false.

Example

function myAuthorizer(bot, trigger, id) {
  if(trigger.personEmail === '[email protected]') {
    return true;
  }
  else if(trigger.personDomain === 'test.com') {
    return true;
  }
  else {
    return false;
  }
}
flint.setAuthorizer(myAuthorizer);

flint.clearAuthorizer() ⇒ null

Removes authorizer function.

Kind: instance method of Flint
Example

flint.clearAuthorizer();

flint.storageDriver(Driver) ⇒ null

Defines storage backend.

Kind: instance method of Flint

Param Type Description
Driver function The storage driver.

Example

// define memory store (default if not specified)
flint.storageDriver(new MemStore());

flint.use(path) ⇒ Boolean

Load a Plugin from a external file.

Kind: instance method of Flint

Param Type Description
path String Load a plugin at given path.

Example

flint.use('events.js');

Example

// events.js
module.exports = function(flint) {
  flint.on('spawn', function(bot) {
    console.log('new bot spawned in room: %s', bot.myroom.title);
  });
  flint.on('despawn', function(bot) {
    console.log('bot despawned in room: %s', bot.myroom.title);
  });
  flint.on('messageCreated', function(message, bot) {
    console.log('"%s" said "%s" in room "%s"', message.personEmail, message.text, bot.myroom.title);
  });
};

Bot

Kind: global class
Properties

Name Type Description
id string Bot UUID
active boolean Bot active state
person object Bot Person Object
email string Bot email
team object Bot team object
room object Bot room object
membership object Bot membership object
isLocked boolean If bot is locked
isModerator boolean If bot is a moderator
isGroup boolean If bot is in Group Room
isDirect boolean If bot is in 1:1/Direct Room
isDirectTo string Recipient Email if bot is in 1:1/Direct Room
isTeam boolean If bot is in Team Room
lastActivity date Last bot activity

new Bot(flint)

Creates a Bot instance that is then attached to a Spark Room.

Param Type Description
flint Object The flint object this Bot spawns under.

bot.exit() ⇒ Promise.<Boolean>

Instructs Bot to exit from room.

Kind: instance method of Bot
Example

bot.exit();

bot.add(email(s), [moderator]) ⇒ Promise.<Array>

Instructs Bot to add person(s) to room.

Kind: instance method of Bot
Returns: Promise.<Array> - Array of emails added

Param Type Description
email(s) String | Array Email Address (or Array of Email Addresses) of Person(s) to add to room.
[moderator] Boolean Add as moderator.

Example

// add one person to room by email
bot.add('[email protected]');

Example

// add one person as moderator to room by email
bot.add('[email protected]', true)
  .catch(function(err) {
    // log error if unsuccessful
    console.log(err.message);
  });

Example

// add 3 people to room by email
bot.add(['[email protected]', '[email protected]', '[email protected]']);

bot.remove(email(s)) ⇒ Promise.<Array>

Instructs Bot to remove person from room.

Kind: instance method of Bot
Returns: Promise.<Array> - Array of emails removed

Param Type Description
email(s) String | Array Email Address (or Array of Email Addresses) of Person(s) to remove from room.

Example

// remove one person to room by email
bot.remove('[email protected]');

Example

// remove 3 people from room by email
bot.remove(['[email protected]', '[email protected]', '[email protected]']);

bot.getModerators() ⇒ Promise.<Array>

Get room moderators.

Kind: instance method of Bot
Example

bot.getModerators()
  .then(function(moderators) {
    console.log(moderators);
  });

bot.newRoom(name, emails) ⇒ Promise.<Bot>

Create new room with people by email

Kind: instance method of Bot

Param Type Description
name String Name of room.
emails Array Emails of people to add to room.

bot.newTeamRoom(name, emails) ⇒ Promise.<Bot>

Create new Team Room

Kind: instance method of Bot

Param Type Description
name String Name of room.
emails Array Emails of people to add to room.

bot.moderateRoom() ⇒ Promise.<Bot>

Enable Room Moderation.Enable.

Kind: instance method of Bot
Example

bot.moderateRoom()
  .then(function(err) {
    console.log(err.message)
  });

bot.unmoderateRoom() ⇒ Promise.<Bot>

Disable Room Moderation.

Kind: instance method of Bot
Example

bot.unmoderateRoom()
  .then(function(err) {
    console.log(err.message)
  });

bot.moderatorSet(email(s)) ⇒ Promise.<Bot>

Assign Moderator in Room

Kind: instance method of Bot

Param Type Description
email(s) String | Array Email Address (or Array of Email Addresses) of Person(s) to assign as moderator.

Example

bot.moderatorSet('[email protected]')
  .then(function(err) {
    console.log(err.message)
  });

bot.moderatorClear(email(s)) ⇒ Promise.<Bot>

Unassign Moderator in Room

Kind: instance method of Bot

Param Type Description
email(s) String | Array Email Address (or Array of Email Addresses) of Person(s) to unassign as moderator.

Example

bot.moderatorClear('[email protected]')
  .then(function(err) {
    console.log(err.message)
  });

bot.implode() ⇒ Promise.<Boolean>

Remove a room and all memberships.

Kind: instance method of Bot
Example

flint.hears('/implode', function(bot, trigger) {
  bot.implode();
});

bot.say([format], message) ⇒ Promise.<Message>

Send text with optional file to room.

Kind: instance method of Bot

Param Type Default Description
[format] String text Set message format. Valid options are 'text' or 'markdown'.
message String | Object Message to send to room. This can be a simple string, or a object for advanced use.

Example

// Simple example
flint.hears('/hello', function(bot, trigger) {
  bot.say('hello');
});

Example

// Simple example to send message and file
flint.hears('/file', function(bot, trigger) {
  bot.say({text: 'Here is your file!', file: 'http://myurl/file.doc'});
});

Example

// Markdown Method 1 - Define markdown as default
flint.messageFormat = 'markdown';
flint.hears('/hello', function(bot, trigger) {
  bot.say('**hello**, How are you today?');
});

Example

// Markdown Method 2 - Define message format as part of argument string
flint.hears('/hello', function(bot, trigger) {
  bot.say('markdown', '**hello**, How are you today?');
});

Example

// Mardown Method 3 - Use an object (use this method of bot.say() when needing to send a file in the same message as markdown text.
flint.hears('/hello', function(bot, trigger) {
  bot.say({markdown: '*Hello <@personEmail:' + trigger.personEmail + '|' + trigger.personDisplayName + '>*'});
});

bot.dm(email, [format], message) ⇒ Promise.<Message>

Send text with optional file in a direct message. This sends a message to a 1:1 room with the user (creates 1:1, if one does not already exist)

Kind: instance method of Bot

Param Type Default Description
email String Email of person to send Direct Message.
[format] String text Set message format. Valid options are 'text' or 'markdown'.
message String | Object Message to send to room. This can be a simple string, or a object for advanced use.

Example

// Simple example
flint.hears('/dm', function(bot, trigger) {
  bot.dm('[email protected]', 'hello');
});

Example

// Simple example to send message and file
flint.hears('/dm', function(bot, trigger) {
  bot.dm('[email protected]', {text: 'Here is your file!', file: 'http://myurl/file.doc'});
});

Example

// Markdown Method 1 - Define markdown as default
flint.messageFormat = 'markdown';
flint.hears('/dm', function(bot, trigger) {
  bot.dm('[email protected]', '**hello**, How are you today?');
});

Example

// Markdown Method 2 - Define message format as part of argument string
flint.hears('/dm', function(bot, trigger) {
  bot.dm('[email protected]', 'markdown', '**hello**, How are you today?');
});

Example

// Mardown Method 3 - Use an object (use this method of bot.dm() when needing to send a file in the same message as markdown text.
flint.hears('/dm', function(bot, trigger) {
  bot.dm('[email protected]', {markdown: '*Hello <@personEmail:' + trigger.personEmail + '|' + trigger.personDisplayName + '>*'});
});

bot.uploadStream(filename, stream) ⇒ Promise.<Message>

Upload a file to a room using a Readable Stream

Kind: instance method of Bot

Param Type Description
filename String File name used when uploading to room
stream Stream.Readable Stream Readable

Example

flint.hears('/file', function(bot, trigger) {

  // define filename used when uploading to room
  var filename = 'test.png';

  // create readable stream
  var stream = fs.createReadStream('/my/file/test.png');

  bot.uploadStream(filename, stream);
});

bot.upload(filepath) ⇒ Promise.<Message>

Upload a file to room.

Kind: instance method of Bot

Param Type Description
filepath String File Path to upload

Example

flint.hears('/file', function(bot, trigger) {
  bot.upload('test.png');
});

bot.censor(messageId) ⇒ Promise.<Message>

Remove Message By Id.

Kind: instance method of Bot

Param Type
messageId String

bot.roomRename(title) ⇒ Promise.<Room>

Set Title of Room.

Kind: instance method of Bot

Param Type
title String

Example

bot.roomRename('My Renamed Room')
  .then(function(err) {
    console.log(err.message)
  });

bot.getMessages(count) ⇒ Promise.<Array>

Get messages from room. Returned data has newest message at bottom.

Kind: instance method of Bot

Param Type
count Integer

Example

bot.getMessages(5).then(function(messages) {
  messages.forEach(function(message) {
    // display message text
    if(message.text) {
      console.log(message.text);
    }
  });
});

bot.store(id, key, value) ⇒ String | Number | Boolean | Array | Object

Store key/value data.

Kind: instance method of Bot

Param Type
id String
key String
value String | Number | Boolean | Array | Object

bot.recall(id, key) ⇒ String | Number | Boolean | Array | Object | undefined

Recall value of data stored by 'key'.

Kind: instance method of Bot

Param Type
id String
key String

bot.forget(id, [key]) ⇒ Boolean

Forget a key or entire store.

Kind: instance method of Bot

Param Type Description
id String
[key] String Optional key value to forget. If key is not passed, id is removed.

Message : object

Message Object

Kind: global namespace
Properties

Name Type Description
id string Message ID
personId string Person ID
personEmail string Person Email
personAvatar string PersonAvatar URL
personDomain string Person Domain Name
personDisplayName string Person Display Name
roomId string Room ID
text string Message text
files array Array of File objects
created date Date Message created

File : object

File Object

Kind: global namespace
Properties

Name Type Description
id string Spark API Content ID
name string File name
ext string File extension
type string Header [content-type] for file
binary buffer File contents as binary
base64 string File contents as base64 encoded string
personId string Person ID of who added file
personEmail string Person Email of who added file
personAvatar string PersonAvatar URL
personDomain string Person Domain Name
personDisplayName string Person Display Name
created date Date file was added to room

Trigger : object

Trigger Object

Kind: global namespace
Properties

Name Type Description
id string Message ID
phrase string | regex Matched lexicon phrase
text string Message Text (or false if no text)
raw string Unprocessed Message Text (or false if no text)
html string Message HTML (or false if no html)
markdown string Message Markdown (or false if no markdown)
mentionedPeople array Mentioned People (or false if no mentioned)
files array Message Files (or false if no files in trigger)
args array Filtered array of words in message text.
created date Message Created date
roomId string Room ID
roomTitle string Room Title
roomType string Room Type (group or direct)
roomIsLocked boolean Room Locked/Moderated status
personId string Person ID
personEmail string Person Email
personDisplayName string Person Display Name
personUsername string Person Username
personDomain string Person Domain name
personAvatar string Person Avatar URL
personMembership object Person Membership object for person

"log"

Flint log event.

Kind: event emitted
Properties

Name Type Description
message string Log Message

"stop"

Flint stop event.

Kind: event emitted
Properties

Name Type Description
id string Flint UUID

"start"

Flint start event.

Kind: event emitted
Properties

Name Type Description
id string Flint UUID

"initialized"

Flint initialized event.

Kind: event emitted
Properties

Name Type Description
id string Flint UUID

"roomLocked"

Room Locked event.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
id string Flint UUID

"roomUnocked"

Room Unocked event.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
id string Flint UUID

"personEnters"

Person Enter Room event.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
person object Person Object
id string Flint UUID

"botAddedAsModerator"

Bot Added as Room Moderator.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
id string Flint UUID

"botRemovedAsModerator"

Bot Removed as Room Moderator.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
id string Flint UUID

"personAddedAsModerator"

Person Added as Moderator.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
person object Person Object
id string Flint UUID

"personRemovedAsModerator"

Person Removed as Moderator.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
person object Person Object
id string Flint UUID

"personExits"

Person Exits Room.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
person object Person Object
id string Flint UUID

"mentioned"

Bot Mentioned.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
trigger object Trigger Object
id string Flint UUID

"message"

Message Recieved.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
trigger object Trigger Object
id string Flint UUID

"files"

File Recieved.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
trigger trigger Trigger Object
id string Flint UUID

"spawn"

Bot Spawned.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
id string Flint UUID

"despawn"

Bot Despawned.

Kind: event emitted
Properties

Name Type Description
bot object Bot Object
id string Flint UUID

License

The MIT License (MIT)

Copyright (c) 2016-2017

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

flint's People

Contributors

nmarus avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.