summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/conf/inspircd.conf.example4
-rw-r--r--src/coremods/core_list.cpp20
2 files changed, 20 insertions, 4 deletions
diff --git a/docs/conf/inspircd.conf.example b/docs/conf/inspircd.conf.example
index 4c56db448..c9691b857 100644
--- a/docs/conf/inspircd.conf.example
+++ b/docs/conf/inspircd.conf.example
@@ -661,6 +661,10 @@
# link with servers running 2.0. Defaults to yes.
allowzerolimit="no"
+ # modesinlist: If enabled then the current channel modes will be shown
+ # in the /LIST response. Defaults to yes.
+ modesinlist="no"
+
# exemptchanops: Allows users with with a status mode to be exempt
# from various channel restrictions. Possible restrictions are:
# - anticaps Channel mode +B - blocks messages with too many capital
diff --git a/src/coremods/core_list.cpp b/src/coremods/core_list.cpp
index d925e7c82..68a41e9ea 100644
--- a/src/coremods/core_list.cpp
+++ b/src/coremods/core_list.cpp
@@ -47,8 +47,9 @@ class CommandList : public Command
}
public:
- /** Constructor for list.
- */
+ // Whether to show modes in the LIST response.
+ bool showmodes;
+
CommandList(Module* parent)
: Command(parent,"LIST", 0, 0)
, secretmode(creator, "secret")
@@ -185,11 +186,16 @@ CmdResult CommandList::Handle(User* user, const Params& parameters)
// Channel is private (+p) and user is outside/not privileged
user->WriteNumeric(RPL_LIST, '*', users, "");
}
- else
+ else if (showmodes)
{
- /* User is in the channel/privileged, channel is not +s */
+ // Show the list response with the modes and topic.
user->WriteNumeric(RPL_LIST, chan->name, users, InspIRCd::Format("[+%s] %s", chan->ChanModes(n), chan->topic.c_str()));
}
+ else
+ {
+ // Show the list response with just the modes.
+ user->WriteNumeric(RPL_LIST, chan->name, users, chan->topic);
+ }
}
}
user->WriteNumeric(RPL_LISTEND, "End of channel list.");
@@ -208,6 +214,12 @@ class CoreModList : public Module
{
}
+ void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
+ {
+ ConfigTag* tag = ServerInstance->Config->ConfValue("options");
+ cmd.showmodes = tag->getBool("modesinlist", true);
+ }
+
void On005Numeric(std::map<std::string, std::string>& tokens) CXX11_OVERRIDE
{
tokens["ELIST"] = "CMNTU";