Add an ad-hoc configure command on IRC channels

Include encodingIn and encodingOut options, unused at the moment
This commit is contained in:
Florent Le Coz
2016-01-04 13:47:26 +01:00
parent 421c960df5
commit 1fc3fa1bd8
4 changed files with 109 additions and 1 deletions
+15 -1
View File
@@ -43,7 +43,8 @@ static std::set<std::string> kickable_errors{
BiboumiComponent::BiboumiComponent(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& secret):
XmppComponent(poller, hostname, secret),
irc_server_adhoc_commands_handler(*this)
irc_server_adhoc_commands_handler(*this),
irc_channel_adhoc_commands_handler(*this)
{
this->stanza_handlers.emplace("presence",
std::bind(&BiboumiComponent::handle_presence, this,std::placeholders::_1));
@@ -65,6 +66,9 @@ BiboumiComponent::BiboumiComponent(std::shared_ptr<Poller> poller, const std::st
{"configure", AdhocCommand({&ConfigureIrcServerStep1, &ConfigureIrcServerStep2}, "Configure a few settings for that IRC server", false)},
#endif
};
this->irc_channel_adhoc_commands_handler.get_commands() = {
{"configure", AdhocCommand({&ConfigureIrcChannelStep1, &ConfigureIrcChannelStep2}, "Configure a few settings for that IRC channel", false)},
};
}
void BiboumiComponent::shutdown()
@@ -331,6 +335,8 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
AdhocCommandsHandler* adhoc_handler;
if (!to.local.empty() && !iid.is_user && !iid.is_channel)
adhoc_handler = &this->irc_server_adhoc_commands_handler;
else if (!to.local.empty() && iid.is_channel)
adhoc_handler = &this->irc_channel_adhoc_commands_handler;
else
adhoc_handler = &this->adhoc_commands_handler;
@@ -407,6 +413,14 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
this->irc_server_adhoc_commands_handler);
stanza_error.disable();
}
else if (!iid.is_user && iid.is_channel)
{ // Get the channel's adhoc commands
this->send_adhoc_commands_list(id, from, to_str,
(Config::get("admin", "") ==
from_jid.bare()),
this->irc_channel_adhoc_commands_handler);
stanza_error.disable();
}
}
else if (node.empty() && !iid.is_user && !iid.is_channel)
{ // Disco on an IRC server: get the list of channels