diff --git a/client/index.html b/client/index.html index 44b8efed..47f26142 100644 --- a/client/index.html +++ b/client/index.html @@ -787,10 +787,13 @@
- /part + /part [channel]
-

Close the current channel or private message window.

+

+ Close the specified channel or private message window, or the + current channel if channel is ommitted. +

Aliases: /close, /leave

diff --git a/src/plugins/inputs/part.js b/src/plugins/inputs/part.js index 88a46563..0763ee77 100644 --- a/src/plugins/inputs/part.js +++ b/src/plugins/inputs/part.js @@ -9,7 +9,17 @@ exports.commands = ["close", "leave", "part"]; exports.allowDisconnected = true; exports.input = function(network, chan, cmd, args) { - if (chan.type === Chan.Type.LOBBY) { + let target = args.length === 0 ? chan : _.find(network.channels, {name: args[0]}); + let partMessage = args.length <= 1 ? Helper.config.leaveMessage : args.slice(1).join(" "); + + if (typeof target === "undefined") { + // In this case, we assume that the word args[0] is part of the leave + // message and we part the current chan. + target = chan; + partMessage = args.join(" "); + } + + if (target.type === Chan.Type.LOBBY) { chan.pushMessage(this, new Msg({ type: Msg.Type.ERROR, text: "You can not part from networks, use /quit instead." @@ -17,18 +27,17 @@ exports.input = function(network, chan, cmd, args) { return; } - network.channels = _.without(network.channels, chan); - chan.destroy(); + network.channels = _.without(network.channels, target); + target.destroy(); this.emit("part", { - chan: chan.id + chan: target.id }); - if (chan.type === Chan.Type.CHANNEL) { + if (target.type === Chan.Type.CHANNEL) { this.save(); if (network.irc) { - const partMessage = args[0] ? args.join(" ") : Helper.config.leaveMessage; - network.irc.part(chan.name, partMessage); + network.irc.part(target.name, partMessage); } }