Rewrite the MUC commands to not use strophe.muc. updates #307
Also added 3 new commands, /member, /revoke, /admin
This commit is contained in:
parent
acd3463abd
commit
c893a51ac5
104
converse.js
104
converse.js
@ -2434,54 +2434,124 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setAffiliation: function(room, jid, affiliation, reason, onSuccess, onError) {
|
||||||
|
var item = $build("item", {jid: jid, affiliation: affiliation});
|
||||||
|
var iq = $iq({to: room, type: "set"}).c("query", {xmlns: Strophe.NS.MUC_ADMIN}).cnode(item.node);
|
||||||
|
if (reason !== null) { iq.c("reason", reason); }
|
||||||
|
return converse.connection.sendIQ(iq.tree(), onSuccess, onError);
|
||||||
|
},
|
||||||
|
|
||||||
|
modifyRole: function(room, nick, role, reason, onSuccess, onError) {
|
||||||
|
var item = $build("item", {nick: nick, role: role});
|
||||||
|
var iq = $iq({to: room, type: "set"}).c("query", {xmlns: Strophe.NS.MUC_ADMIN}).cnode(item.node);
|
||||||
|
if (reason !== null) { iq.c("reason", reason); }
|
||||||
|
return converse.connection.sendIQ(iq.tree(), onSuccess, onError);
|
||||||
|
},
|
||||||
|
|
||||||
|
member: function(room, jid, reason, handler_cb, error_cb) {
|
||||||
|
return this.setAffiliation(room, jid, 'member', reason, handler_cb, error_cb);
|
||||||
|
},
|
||||||
|
revoke: function(room, jid, reason, handler_cb, error_cb) {
|
||||||
|
return this.setAffiliation(room, jid, 'none', reason, handler_cb, error_cb);
|
||||||
|
},
|
||||||
|
owner: function(room, jid, reason, handler_cb, error_cb) {
|
||||||
|
return this.setAffiliation(room, jid, 'owner', reason, handler_cb, error_cb);
|
||||||
|
},
|
||||||
|
admin: function(room, jid, reason, handler_cb, error_cb) {
|
||||||
|
return this.setAffiliation(room, jid, 'admin', reason, handler_cb, error_cb);
|
||||||
|
},
|
||||||
|
|
||||||
sendChatRoomMessage: function (text) {
|
sendChatRoomMessage: function (text) {
|
||||||
var match = text.replace(/^\s*/, "").match(/^\/(.*?)(?: (.*))?$/) || [false], args;
|
var match = text.replace(/^\s*/, "").match(/^\/(.*?)(?: (.*))?$/) || [false, '', ''];
|
||||||
|
var args = match[2].splitOnce(' ');
|
||||||
switch (match[1]) {
|
switch (match[1]) {
|
||||||
|
case 'admin':
|
||||||
|
this.setAffiliation(
|
||||||
|
this.model.get('jid'), args[0], 'admin', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
|
break;
|
||||||
case 'ban':
|
case 'ban':
|
||||||
args = match[2].splitOnce(' ');
|
this.setAffiliation(
|
||||||
converse.connection.muc.ban(this.model.get('jid'), args[0], args[1], undefined, $.proxy(this.onCommandError, this));
|
this.model.get('jid'), args[0], 'outcast', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
break;
|
break;
|
||||||
case 'clear':
|
case 'clear':
|
||||||
this.clearChatRoomMessages();
|
this.clearChatRoomMessages();
|
||||||
break;
|
break;
|
||||||
case 'deop':
|
case 'deop':
|
||||||
args = match[2].splitOnce(' ');
|
this.modifyRole(
|
||||||
converse.connection.muc.deop(this.model.get('jid'), args[0], args[1], undefined, $.proxy(this.onCommandError, this));
|
this.model.get('jid'), args[0], 'participant', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
break;
|
break;
|
||||||
case 'help':
|
case 'help':
|
||||||
this.showHelpMessages([
|
this.showHelpMessages([
|
||||||
|
'<strong>/admin</strong>: ' +__("Change user's affiliation to admin"),
|
||||||
'<strong>/ban</strong>: ' +__('Ban user from room'),
|
'<strong>/ban</strong>: ' +__('Ban user from room'),
|
||||||
'<strong>/clear</strong>: ' +__('Remove messages'),
|
'<strong>/clear</strong>: ' +__('Remove messages'),
|
||||||
|
'<strong>/deop</strong>: ' +__('Change user role to participant'),
|
||||||
'<strong>/help</strong>: ' +__('Show this menu'),
|
'<strong>/help</strong>: ' +__('Show this menu'),
|
||||||
'<strong>/kick</strong>: ' +__('Kick user from room'),
|
'<strong>/kick</strong>: ' +__('Kick user from room'),
|
||||||
'<strong>/me</strong>: ' +__('Write in 3rd person'),
|
'<strong>/me</strong>: ' +__('Write in 3rd person'),
|
||||||
|
'<strong>/member</strong>: '+__('Grant membership to a user'),
|
||||||
'<strong>/mute</strong>: ' +__("Remove user's ability to post messages"),
|
'<strong>/mute</strong>: ' +__("Remove user's ability to post messages"),
|
||||||
'<strong>/nick</strong>: ' +__('Change your nickname'),
|
'<strong>/nick</strong>: ' +__('Change your nickname'),
|
||||||
|
'<strong>/op</strong>: ' +__('Grant moderator role to user'),
|
||||||
|
'<strong>/owner</strong>: ' +__('Grant ownership of this room'),
|
||||||
|
'<strong>/revoke</strong>: '+__("Revoke user's membership"),
|
||||||
'<strong>/topic</strong>: ' +__('Set room topic'),
|
'<strong>/topic</strong>: ' +__('Set room topic'),
|
||||||
'<strong>/voice</strong>: ' +__('Allow muted user to post messages')
|
'<strong>/voice</strong>: ' +__('Allow muted user to post messages')
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
case 'kick':
|
case 'kick':
|
||||||
args = match[2].splitOnce(' ');
|
this.modifyRole(
|
||||||
converse.connection.muc.kick(this.model.get('jid'), args[0], args[1], undefined, $.proxy(this.onCommandError, this));
|
this.model.get('jid'), args[0], 'none', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
break;
|
break;
|
||||||
case 'mute':
|
case 'mute':
|
||||||
args = match[2].splitOnce(' ');
|
this.modifyRole(
|
||||||
converse.connection.muc.mute(this.model.get('jid'), args[0], args[1], undefined, $.proxy(this.onCommandError, this));
|
this.model.get('jid'), args[0], 'visitor', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
|
break;
|
||||||
|
case 'member':
|
||||||
|
this.setAffiliation(
|
||||||
|
this.model.get('jid'), args[0], 'member', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
break;
|
break;
|
||||||
case 'nick':
|
case 'nick':
|
||||||
converse.connection.muc.changeNick(this.model.get('jid'), match[2]);
|
converse.connection.send($pres({
|
||||||
|
from: converse.connection.jid,
|
||||||
|
to: this.getRoomJID(match[2]),
|
||||||
|
id: converse.connection.getUniqueId()
|
||||||
|
}).tree());
|
||||||
|
break;
|
||||||
|
case 'owner':
|
||||||
|
this.setAffiliation(
|
||||||
|
this.model.get('jid'), args[0], 'owner', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
break;
|
break;
|
||||||
case 'op':
|
case 'op':
|
||||||
args = match[2].splitOnce(' ');
|
this.modifyRole(
|
||||||
converse.connection.muc.op(this.model.get('jid'), args[0], args[1], undefined, $.proxy(this.onCommandError, this));
|
this.model.get('jid'), args[0], 'moderator', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
|
break;
|
||||||
|
case 'revoke':
|
||||||
|
this.setAffiliation(
|
||||||
|
this.model.get('jid'), args[0], 'none', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
break;
|
break;
|
||||||
case 'topic':
|
case 'topic':
|
||||||
converse.connection.muc.setTopic(this.model.get('jid'), match[2]);
|
converse.connection.send(
|
||||||
|
$msg({
|
||||||
|
to: this.model.get('jid'),
|
||||||
|
from: converse.connection.jid,
|
||||||
|
type: "groupchat"
|
||||||
|
}).c("subject", {xmlns: "jabber:client"}).t(match[2]).tree()
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case 'voice':
|
case 'voice':
|
||||||
args = match[2].splitOnce(' ');
|
this.modifyRole(
|
||||||
converse.connection.muc.voice(this.model.get('jid'), args[0], args[1], undefined, $.proxy(this.onCommandError, this));
|
this.model.get('jid'), args[0], 'participant', args[1],
|
||||||
|
undefined, $.proxy(this.onCommandError, this));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
this.createChatRoomMessage(text);
|
this.createChatRoomMessage(text);
|
||||||
@ -2512,9 +2582,9 @@
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
getRoomJID: function () {
|
getRoomJID: function (nick) {
|
||||||
|
nick = nick || this.model.get('nick');
|
||||||
var room = this.model.get('jid');
|
var room = this.model.get('jid');
|
||||||
var nick = this.model.get('nick');
|
|
||||||
var node = Strophe.escapeNode(Strophe.getNodeFromJid(room));
|
var node = Strophe.escapeNode(Strophe.getNodeFromJid(room));
|
||||||
var domain = Strophe.getDomainFromJid(room);
|
var domain = Strophe.getDomainFromJid(room);
|
||||||
return node + "@" + domain + (nick !== null ? "/" + nick : "");
|
return node + "@" + domain + (nick !== null ? "/" + nick : "");
|
||||||
|
Loading…
Reference in New Issue
Block a user