summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h5
-rw-r--r--src/configreader.cpp1
-rw-r--r--src/users.cpp4
3 files changed, 9 insertions, 1 deletions
diff --git a/include/configreader.h b/include/configreader.h
index 57134390a..02ed3d561 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -491,6 +491,11 @@ class CoreExport ServerConfig
*/
bool CycleHosts;
+ /** If set to true, the CycleHosts mode change will be sourced from the user,
+ * rather than the server
+ */
+ bool CycleHostsFromUser;
+
/** If set to true, prefixed channel NOTICEs and PRIVMSGs will have the prefix
* added to the outgoing text for undernet style msg prefixing.
*/
diff --git a/src/configreader.cpp b/src/configreader.cpp
index d63377bbe..c2c66fc31 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -479,6 +479,7 @@ void ServerConfig::Fill()
NoUserDns = ConfValue("performance")->getBool("nouserdns");
SyntaxHints = options->getBool("syntaxhints");
CycleHosts = options->getBool("cyclehosts");
+ CycleHostsFromUser = options->getBool("cyclehostsfromuser");
UndernetMsgPrefix = options->getBool("ircumsgprefix");
FullHostInTopic = options->getBool("hostintopic");
MaxTargets = security->getInt("maxtargets", 20);
diff --git a/src/users.cpp b/src/users.cpp
index d30526186..8aeb4a1f6 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -1393,7 +1393,9 @@ void User::DoHostCycle(const std::string &quitline)
{
for(unsigned int i=0; i < memb->modes.length(); i++)
modeline.append(" ").append(nick);
- snprintf(buffer, MAXBUF, ":%s MODE %s +%s", GetFullHost().c_str(), c->name.c_str(), modeline.c_str());
+ snprintf(buffer, MAXBUF, ":%s MODE %s +%s",
+ ServerInstance->Config->CycleHostsFromUser ? GetFullHost().c_str() : ServerInstance->Config->ServerName.c_str(),
+ c->name.c_str(), modeline.c_str());
modeline = buffer;
}