hubot-schedule-msg
Version:
Message scheduler for hubot, fit with RocketChat
140 lines (108 loc) • 4.27 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _nodeSchedule = require('node-schedule');
var _nodeSchedule2 = _interopRequireDefault(_nodeSchedule);
var _cron = require('cron');
var _hubot = require('hubot');
var _helpers = require('./helpers');
var _helpers2 = _interopRequireDefault(_helpers);
var _config = require('./config');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Job = function () {
function Job(jobId, time, timeOrigin, user, room, message, callback) {
(0, _classCallCheck3.default)(this, Job);
this.id = jobId;
this.timePattern = time;
this.timeOrigin = timeOrigin;
if (_helpers2.default.isTimeCronPattern(time)) {
// get cron pattern & timezone
var _timePattern$split = this.timePattern.split(','),
_timePattern$split2 = (0, _slicedToArray3.default)(_timePattern$split, 2),
pattern = _timePattern$split2[0],
timezone = _timePattern$split2[1];
pattern = pattern.replace(/\./gi, '*');
this.timePattern = pattern.trim();
if (timezone && timezone.trim()) {
this.timePattern += ', ' + timezone.trim();
}
}
this.user = {
id: user.id,
team_id: user.team_id,
name: user.name,
room: room || user.room,
currentRoom: user.room,
roomName: room,
roomType: user.roomType
};
this.callback = callback;
this.message = message;
this.job;
}
(0, _createClass3.default)(Job, [{
key: 'start',
value: function start(robot) {
// Cron Pattern
if (_helpers2.default.isTimeCronPattern(this.timePattern)) {
var _timePattern$split3 = this.timePattern.split(','),
_timePattern$split4 = (0, _slicedToArray3.default)(_timePattern$split3, 2),
pattern = _timePattern$split4[0],
timezone = _timePattern$split4[1]; // get cron pattern & timezone
var offsetConfig = timezone ? timezone : _config.envConfig.utcOffset;
var utcOffset = offsetConfig ? offsetConfig : _helpers2.default.getUTCOffset(new Date());
return this.job = new _cron.CronJob(pattern, this.sendingHandler.bind(this, robot), null, true, null, null, null, utcOffset);
} else {
// Normal Date
return this.job = _nodeSchedule2.default.scheduleJob(this.timePattern, this.sendingHandler.bind(this, robot));
}
}
}, {
key: 'sendingHandler',
value: function sendingHandler(robot) {
var isDirect = this.user.room.indexOf('@');
var roomName = this.user.room.trim().replace(/(#|@)/gi, '');
var envelope = {
user: this.user,
room: roomName
// Direct message
};if (isDirect > -1 || roomName === 'me') {
var finalMsg = this.message;
if (roomName !== 'me' && roomName !== this.user.name) {
envelope.user.name = roomName;
finalMsg = ' @' + this.user.name + ' *sends a schedule message to you:*\n' + this.message;
}
robot.adapter.sendDirect(envelope, 'Schedule: ' + finalMsg);
} else {
robot.send(envelope, 'Schedule: ' + this.message);
}
if (_config.envConfig.chainReceiver === '1') {
robot.adapter.receive(new _hubot.TextMessage(this.user, this.message));
}
return typeof this.callback === 'function' ? this.callback() : null;
}
}, {
key: 'cancelSchedule',
value: function cancelSchedule() {
if (this.job) {
_nodeSchedule2.default.cancelJob(this.job);
}
return typeof this.callback === 'function' ? this.callback() : null;
}
}, {
key: 'serialize',
value: function serialize() {
return [this.timePattern, this.user, this.message];
}
}]);
return Job;
}();
exports.default = Job;
module.exports = exports.default;