Files
zulip/static/js/zcommand.js
Steve Howell 47b4dd6bdb slash commands: Refine /day and /night.
These two slash commands now use zcommand to talk to
the server, so we have no Message overhead, and if you're
on a stream, you no longer spam people by accident.

The commands now also give reasonable messages
if you are already in the mode you ask for.

It should be noted that by moving these commands out of
widget.py, they are no longer behind the ALLOW_SUB_MESSAGES
setting guard.
2018-06-02 09:40:12 -07:00

102 lines
2.3 KiB
JavaScript

var zcommand = (function () {
var exports = {};
/*
What in the heck is a zcommand?
A zcommand is basically a specific type of slash
command where the client does almost no work and
the server just does something pretty simple like
flip a setting.
The first zcommand we wrote is for "/ping", and
the server just responds with a 200 for that.
Not all slash commands use zcommand under the hood.
For more exotic things like /poll see submessage.js
and widgetize.js
*/
exports.send = function (opts) {
var command = opts.command;
var on_success = opts.on_success;
var data = {
command: command,
};
channel.post({
url: '/json/zcommand',
data: data,
success: function (data) {
on_success(data);
},
error: function () {
exports.tell_user('server did not respond');
},
});
};
exports.tell_user = function (msg) {
// This is a bit hacky, but we don't have a super easy API now
// for just telling users stuff.
$('#compose-send-status').removeClass(common.status_classes)
.addClass('alert-error')
.stop(true).fadeTo(0, 1);
$('#compose-error-msg').text(msg);
};
function update_setting(command) {
exports.send({
command: command,
on_success: function (data) {
exports.tell_user(data.msg);
},
});
}
exports.process = function (message_content) {
var content = message_content.trim();
if (content === '/ping') {
var start_time = new Date();
exports.send({
command: 'ping',
on_success: function () {
var end_time = new Date();
var diff = end_time - start_time;
diff = Math.round(diff);
var msg = "ping time: " + diff + "ms";
exports.tell_user(msg);
},
});
return true;
}
if (content === '/day') {
update_setting('day');
return true;
}
if (content === '/night') {
update_setting('night');
return true;
}
// It is incredibly important here to return false
// if we don't see an actual zcommand, so that compose.js
// knows this is a normal message.
return false;
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = zcommand;
}