UNPKG

smartslack

Version:

SmartSlack is a node.js module for Slack's Real Time Messaging API

205 lines (175 loc) 5.4 kB
'use strict'; var _ = require('lodash'); var api = require('./api'); var cache = require('../cache'); var errors = require('../errors'); var slackTypes = require('./types'); /** * Gets a channel object from the local cache * @param {string} match The channel id or name * @param {function} callback(err,result) */ function getChannel(match, callback) { if (!_.isFunction(callback)) { throw new Error(errors.callback_type); } if (!_.isString(match)) { return callback(new Error(errors.missing_required_arg), null); } cache.search(slackTypes.CHANNEL, match, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } /** * Gets the last message posted to a channel * @param {string} channel The channel id * @param {function} callback(err,result) */ function getLastChannelMessage(channel, callback) { if (!_.isFunction(callback)) { throw new Error(errors.callback_type); } if (!_.isString(channel)) { return callback(new Error(errors.missing_required_arg), null); } if (!channel.match(/^(C0)/)) { return callback(new Error(errors.invalid_channel_id)); } api.post('channels.history', {channel: channel, count: 1}, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } /** * Gets the channels history * @param {string} channel The channel id * @param {object} args The additional method arguments * @param {function} callback(err,result) */ function getHistory(channel, args, callback) { if (_.isFunction(args)) { callback = args; args = null; } if (!_.isFunction(callback)) { throw new Error(errors.callback_type); } if (!_.isString(channel)) { return callback(new Error(errors.missing_required_arg), null); } if (!channel.match(/^(C0)/)) { return callback(new Error(errors.invalid_channel_id)); } api.post('channels.history', {channel: channel}, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } /** * Gets the channels information from the api * @param {string} channel The channel id * @param {function} callback(err,result) */ function getInfo(channel, callback) { if (!_.isFunction(callback)) { throw new Error(errors.callback_type); } if (!_.isString(channel)) { return callback(new Error(errors.missing_required_arg), null); } if (!channel.match(/^(C0)/)) { return callback(new Error(errors.invalid_channel_id)); } api.post('channels.info', {channel: channel}, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } /** * Gets channel list from API, excluding archived channels * @param {function} callback(err,result) */ function getList(callback) { if (!_.isFunction(callback)) { throw new Error(errors.callback_type); } api.post('channels.list', {exclude_archived: "1"}, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } /** * Moves the read cursor in a channel. * @param {string} channel The channel id * @param {string} timestamp Time of most recently seen message * @param {function} callback(err,result) */ function mark(channel, timestamp, callback) { callback = (_.isFunction(callback)) ? callback : _.noop; if (!_.isString(channel) && !_.isString(timestamp)) { return callback(new Error(errors.missing_required_arg), null); } api.post('channels.mark', {channel: channel, timestamp: timestamp}, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } /** * Set the channels's purpose * @param {string} channel The channel id * @param {string} purpose The new channel purpose * @param {function} callback(err,result) */ function setPurpose(channel, purpose, callback) { callback = (_.isFunction(callback)) ? callback : _.noop; if (!_.isString(channel) && !_.isString(purpose)) { return callback(new Error(errors.missing_required_arg), null); } api.post('channels.setPurpose', {channel: channel, purpose: purpose}, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } /** * Set the channel's topic * @param {string} channel The channel id * @param {string} topic The new channel topic * @param {function} callback(err,result) */ function setTopic(channel, topic, callback) { callback = (_.isFunction(callback)) ? callback : _.noop; if (!_.isString(channel) && !_.isString(topic)) { return callback(new Error(errors.missing_required_arg), null); } api.post('channels.setTopic', {channel: channel, topic: topic}, function (err, result) { if (err) { return callback(err); } callback(null, result); }); } module.exports = { getChannel: getChannel, getHistory: getHistory, getInfo: getInfo, getLastChannelMessage: getLastChannelMessage, getList: getList, mark: mark, setPurpose: setPurpose, setTopic: setTopic };