@@ -1,5 +1,6 @@
|
||||
#include <bridge/bridge.hpp>
|
||||
#include <bridge/colors.hpp>
|
||||
#include <bridge/list_element.hpp>
|
||||
#include <xmpp/xmpp_component.hpp>
|
||||
#include <xmpp/xmpp_stanza.hpp>
|
||||
#include <irc/irc_message.hpp>
|
||||
@@ -285,6 +286,43 @@ void Bridge::send_irc_nick_change(const Iid& iid, const std::string& new_nick)
|
||||
irc->send_nick_command(new_nick);
|
||||
}
|
||||
|
||||
void Bridge::send_irc_channel_list_request(const Iid& iid, const std::string& iq_id,
|
||||
const std::string& to_jid)
|
||||
{
|
||||
IrcClient* irc = this->get_irc_client(iid.get_server());
|
||||
|
||||
if (!irc)
|
||||
return;
|
||||
|
||||
irc->send_list_command();
|
||||
irc_responder_callback_t cb = [this, iid, iq_id, to_jid](const std::string& irc_hostname,
|
||||
const IrcMessage& message) -> bool
|
||||
{
|
||||
static std::vector<ListElement> list;
|
||||
|
||||
if (irc_hostname != iid.get_server())
|
||||
return false;
|
||||
if (message.command == "263" || message.command == "RPL_TRYAGAIN")
|
||||
{ // TODO send an error iq
|
||||
return true;
|
||||
}
|
||||
else if (message.command == "322" || message.command == "RPL_LIST")
|
||||
{ // Add element to list
|
||||
if (message.arguments.size() == 4)
|
||||
list.emplace_back(message.arguments[1], message.arguments[2],
|
||||
message.arguments[3]);
|
||||
return false;
|
||||
}
|
||||
else if (message.command == "323" || message.command == "RPL_LISTEND")
|
||||
{ // Send the iq response with the content of the list
|
||||
this->xmpp->send_iq_room_list_result(iq_id, to_jid, std::to_string(iid), list);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
this->add_waiting_irc(std::move(cb));
|
||||
}
|
||||
|
||||
void Bridge::send_irc_kick(const Iid& iid, const std::string& target, const std::string& reason,
|
||||
const std::string& iq_id, const std::string& to_jid)
|
||||
{
|
||||
|
||||
@@ -72,6 +72,8 @@ public:
|
||||
void send_irc_version_request(const std::string& irc_hostname, const std::string& target,
|
||||
const std::string& iq_id, const std::string& to_jid,
|
||||
const std::string& from_jid);
|
||||
void send_irc_channel_list_request(const Iid& iid, const std::string& iq_id,
|
||||
const std::string& to_jid);
|
||||
void forward_affiliation_role_change(const Iid& iid, const std::string& nick,
|
||||
const std::string& affiliation, const std::string& role);
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef LIST_ELEMENT_HPP_INCLUDED
|
||||
#define LIST_ELEMENT_HPP_INCLUDED
|
||||
|
||||
#include <string>
|
||||
|
||||
struct ListElement
|
||||
{
|
||||
ListElement(const std::string& channel, const std::string& nb_users,
|
||||
const std::string& topic):
|
||||
channel(channel),
|
||||
nb_users(nb_users),
|
||||
topic(topic){}
|
||||
|
||||
std::string channel;
|
||||
std::string nb_users;
|
||||
std::string topic;
|
||||
};
|
||||
|
||||
#endif /* LIST_ELEMENT_HPP_INCLUDED */
|
||||
Reference in New Issue
Block a user