summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mode.h7
-rw-r--r--src/mode.cpp10
2 files changed, 16 insertions, 1 deletions
diff --git a/include/mode.h b/include/mode.h
index cbe20ff97..17d0ec64c 100644
--- a/include/mode.h
+++ b/include/mode.h
@@ -786,6 +786,13 @@ class CoreExport ModeParser : public fakederef<ModeParser>
* @return A map of mode handlers of the given type
*/
const ModeHandlerMap& GetModes(ModeType mt) const { return modehandlersbyname[mt]; }
+
+ /** Show the list of a list mode to a user. Modules can deny the listing.
+ * @param user User to show the list to.
+ * @param chan Channel to show the list of.
+ * @param mh List mode to show the list of.
+ */
+ void ShowListModeList(User* user, Channel* chan, ModeHandler* mh);
};
inline const std::string& ModeParser::GetModeListFor004Numeric()
diff --git a/src/mode.cpp b/src/mode.cpp
index ce4cb5b87..5642e35b6 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -603,11 +603,19 @@ void ModeParser::DisplayListModes(User* user, Channel* chan, const std::string&
if (!mh || !mh->IsListMode())
return;
+ ShowListModeList(user, chan, mh);
+ }
+}
+
+void ModeParser::ShowListModeList(User* user, Channel* chan, ModeHandler* mh)
+{
+ {
ModResult MOD_RESULT;
FIRST_MOD_RESULT(OnRawMode, MOD_RESULT, (user, chan, mh, "", true));
if (MOD_RESULT == MOD_RES_DENY)
- continue;
+ return;
+ unsigned char mletter = mh->GetModeChar();
bool display = true;
if (!user->HasPrivPermission("channels/auspex") && ServerInstance->Config->HideModeLists[mletter] && (chan->GetPrefixValue(user) < HALFOP_VALUE))
{