@@ -166,10 +166,15 @@ IrcClient* Bridge::find_irc_client(const std::string& hostname) const
|
||||
}
|
||||
}
|
||||
|
||||
bool Bridge::join_irc_channel(const Iid& iid, const std::string& nickname, const std::string& password,
|
||||
bool Bridge::join_irc_channel(const Iid& iid, std::string nickname, const std::string& password,
|
||||
const std::string& resource, HistoryLimit history_limit)
|
||||
{
|
||||
const auto& hostname = iid.get_server();
|
||||
#ifdef USE_DATABASE
|
||||
auto soptions = Database::get_irc_server_options(this->get_bare_jid(), hostname);
|
||||
if (!soptions.col<Database::Nick>().empty())
|
||||
nickname = soptions.col<Database::Nick>();
|
||||
#endif
|
||||
IrcClient* irc = this->make_irc_client(hostname, nickname);
|
||||
irc->history_limit = history_limit;
|
||||
this->add_resource_to_server(hostname, resource);
|
||||
|
||||
@@ -75,7 +75,7 @@ public:
|
||||
* Try to join an irc_channel, does nothing and return true if the channel
|
||||
* was already joined.
|
||||
*/
|
||||
bool join_irc_channel(const Iid& iid, const std::string& nickname, const std::string& password, const std::string& resource, HistoryLimit history_limit);
|
||||
bool join_irc_channel(const Iid& iid, std::string nickname, const std::string& password, const std::string& resource, HistoryLimit history_limit);
|
||||
|
||||
void send_channel_message(const Iid& iid, const std::string& body, std::string id);
|
||||
void send_private_message(const Iid& iid, const std::string& body, const std::string& type="PRIVMSG");
|
||||
|
||||
@@ -92,7 +92,7 @@ class Database
|
||||
using GlobalOptionsTable = Table<Id, Owner, MaxHistoryLength, RecordHistory, GlobalPersistent>;
|
||||
using GlobalOptions = GlobalOptionsTable::RowType;
|
||||
|
||||
using IrcServerOptionsTable = Table<Id, Owner, Server, Pass, TlsPorts, Ports, Username, Realname, VerifyCert, TrustedFingerprint, EncodingOut, EncodingIn, MaxHistoryLength, Address>;
|
||||
using IrcServerOptionsTable = Table<Id, Owner, Server, Pass, TlsPorts, Ports, Username, Realname, VerifyCert, TrustedFingerprint, EncodingOut, EncodingIn, MaxHistoryLength, Address, Nick>;
|
||||
using IrcServerOptions = IrcServerOptionsTable::RowType;
|
||||
|
||||
using IrcChannelOptionsTable = Table<Id, Owner, Server, Channel, EncodingOut, EncodingIn, MaxHistoryLength, Persistent, RecordHistoryOptional>;
|
||||
|
||||
@@ -293,6 +293,20 @@ void ConfigureIrcServerStep1(XmppComponent&, AdhocSession& session, XmlNode& com
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
XmlSubNode field(x, "field");
|
||||
field["var"] = "nick";
|
||||
field["type"] = "text-single";
|
||||
field["label"] = "Nickname";
|
||||
field["desc"] = "If set, will override the nickname provided in the initial presence sent to join the first server channel";
|
||||
if (!options.col<Database::Nick>().empty())
|
||||
{
|
||||
XmlSubNode value(field, "value");
|
||||
value.set_inner(options.col<Database::Nick>());
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
XmlSubNode pass(x, "field");
|
||||
pass["var"] = "pass";
|
||||
@@ -427,6 +441,8 @@ void ConfigureIrcServerStep2(XmppComponent&, AdhocSession& session, XmlNode& com
|
||||
|
||||
#endif // BOTAN_FOUND
|
||||
|
||||
else if (field->get_tag("var") == "nick" && value)
|
||||
options.col<Database::Nick>() = value->get_inner();
|
||||
else if (field->get_tag("var") == "pass" && value)
|
||||
options.col<Database::Pass>() = value->get_inner();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user