mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
slash commands: Add /ping command (via zcommand).
This adds a /ping command that will be useful for users to see what the round trip to the Zulip server is (including only a tiny bit of actual server time to basically give a 200). It also introduce the "/zcommand" endpoint and zcommand.js module.
This commit is contained in:
82
static/js/zcommand.js
Normal file
82
static/js/zcommand.js
Normal file
@@ -0,0 +1,82 @@
|
||||
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);
|
||||
};
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user