diff options
author | Attila Molnar <attilamolnar@hush.com> | 2014-04-20 14:05:21 +0200 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2014-04-20 14:05:21 +0200 |
commit | 5ebb49de65a3f53730177665b5922dc3a62a94eb (patch) | |
tree | da4aa808e0ede345e26e28cd9a39e1509b83ca25 | |
parent | 67e0e32b86885df705a92cdc971a6085c4a7c1ba (diff) |
Change the OnNamesListItem() hook to return ModResult
Return MOD_RES_DENY to exclude the user from the NAMES list
-rw-r--r-- | include/modules.h | 5 | ||||
-rw-r--r-- | src/channels.cpp | 7 | ||||
-rw-r--r-- | src/modules.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_auditorium.cpp | 13 | ||||
-rw-r--r-- | src/modules/m_delayjoin.cpp | 10 | ||||
-rw-r--r-- | src/modules/m_namesx.cpp | 12 | ||||
-rw-r--r-- | src/modules/m_uhnames.cpp | 11 |
7 files changed, 26 insertions, 34 deletions
diff --git a/include/modules.h b/include/modules.h index 9c0b22b6c..671785410 100644 --- a/include/modules.h +++ b/include/modules.h @@ -1041,10 +1041,9 @@ class CoreExport Module : public classbase, public usecountbase #endif /** Called for every item in a NAMES list, so that modules may reformat portions of it as they see fit. - * For example NAMESX, channel mode +u and +I, and UHNAMES. If the nick is set to an empty string by any - * module, then this will cause the nickname not to be displayed at all. + * For example NAMESX, channel mode +u and +I, and UHNAMES. */ - virtual void OnNamesListItem(User* issuer, Membership* item, std::string &prefixes, std::string &nick); + virtual ModResult OnNamesListItem(User* issuer, Membership* item, std::string& prefixes, std::string& nick); virtual ModResult OnNumeric(User* user, unsigned int numeric, const std::string &text); diff --git a/src/channels.cpp b/src/channels.cpp index 46f9cfe89..a98b4ff87 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -653,10 +653,11 @@ void Channel::UserList(User* user, bool has_user) prefixlist.push_back(prefix); nick = i->first->nick; - FOREACH_MOD(OnNamesListItem, (user, memb, prefixlist, nick)); + ModResult res; + FIRST_MOD_RESULT(OnNamesListItem, res, (user, memb, prefixlist, nick)); - /* Nick was nuked, a module wants us to skip it */ - if (nick.empty()) + // See if a module wants us to exclude this user from NAMES + if (res == MOD_RES_DENY) continue; if (list.size() + prefixlist.length() + nick.length() + 1 > maxlen) diff --git a/src/modules.cpp b/src/modules.cpp index c27147820..839686657 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -151,7 +151,7 @@ void Module::OnBuildNeighborList(User*, IncludeChanList&, std::map<User*,bool>& void Module::OnGarbageCollect() { DetachEvent(I_OnGarbageCollect); } ModResult Module::OnSetConnectClass(LocalUser* user, ConnectClass* myclass) { DetachEvent(I_OnSetConnectClass); return MOD_RES_PASSTHRU; } void Module::OnText(User*, void*, int, const std::string&, char, CUList&) { DetachEvent(I_OnText); } -void Module::OnNamesListItem(User*, Membership*, std::string&, std::string&) { DetachEvent(I_OnNamesListItem); } +ModResult Module::OnNamesListItem(User*, Membership*, std::string&, std::string&) { DetachEvent(I_OnNamesListItem); return MOD_RES_PASSTHRU; } ModResult Module::OnNumeric(User*, unsigned int, const std::string&) { DetachEvent(I_OnNumeric); return MOD_RES_PASSTHRU; } ModResult Module::OnAcceptConnection(int, ListenSocket*, irc::sockets::sockaddrs*, irc::sockets::sockaddrs*) { DetachEvent(I_OnAcceptConnection); return MOD_RES_PASSTHRU; } void Module::OnSendWhoLine(User*, const std::vector<std::string>&, User*, Membership*, std::string&) { DetachEvent(I_OnSendWhoLine); } diff --git a/src/modules/m_auditorium.cpp b/src/modules/m_auditorium.cpp index 8ec80ef46..60bdd2582 100644 --- a/src/modules/m_auditorium.cpp +++ b/src/modules/m_auditorium.cpp @@ -85,19 +85,16 @@ class ModuleAuditorium : public Module return false; } - void OnNamesListItem(User* issuer, Membership* memb, std::string &prefixes, std::string &nick) CXX11_OVERRIDE + ModResult OnNamesListItem(User* issuer, Membership* memb, std::string& prefixes, std::string& nick) CXX11_OVERRIDE { - // Some module already hid this from being displayed, don't bother - if (nick.empty()) - return; - if (IsVisible(memb)) - return; + return MOD_RES_PASSTHRU; if (CanSee(issuer, memb)) - return; + return MOD_RES_PASSTHRU; - nick.clear(); + // Don't display this user in the NAMES list + return MOD_RES_DENY; } /** Build CUList for showing this join/part/kick */ diff --git a/src/modules/m_delayjoin.cpp b/src/modules/m_delayjoin.cpp index dd07710bd..b3165c7be 100644 --- a/src/modules/m_delayjoin.cpp +++ b/src/modules/m_delayjoin.cpp @@ -45,7 +45,7 @@ class ModuleDelayJoin : public Module } Version GetVersion() CXX11_OVERRIDE; - void OnNamesListItem(User* issuer, Membership*, std::string &prefixes, std::string &nick) CXX11_OVERRIDE; + ModResult OnNamesListItem(User* issuer, Membership*, std::string& prefixes, std::string& nick) CXX11_OVERRIDE; void OnUserJoin(Membership*, bool, bool, CUList&) CXX11_OVERRIDE; void CleanUser(User* user); void OnUserPart(Membership*, std::string &partmessage, CUList&) CXX11_OVERRIDE; @@ -80,15 +80,17 @@ Version ModuleDelayJoin::GetVersion() return Version("Allows for delay-join channels (+D) where users don't appear to join until they speak", VF_VENDOR); } -void ModuleDelayJoin::OnNamesListItem(User* issuer, Membership* memb, std::string &prefixes, std::string &nick) +ModResult ModuleDelayJoin::OnNamesListItem(User* issuer, Membership* memb, std::string& prefixes, std::string& nick) { /* don't prevent the user from seeing themself */ if (issuer == memb->user) - return; + return MOD_RES_PASSTHRU; /* If the user is hidden by delayed join, hide them from the NAMES list */ if (unjoined.get(memb)) - nick.clear(); + return MOD_RES_DENY; + + return MOD_RES_PASSTHRU; } static void populate(CUList& except, Membership* memb) diff --git a/src/modules/m_namesx.cpp b/src/modules/m_namesx.cpp index 4dc5ff468..f211b01d8 100644 --- a/src/modules/m_namesx.cpp +++ b/src/modules/m_namesx.cpp @@ -59,16 +59,12 @@ class ModuleNamesX : public Module return MOD_RES_PASSTHRU; } - void OnNamesListItem(User* issuer, Membership* memb, std::string &prefixes, std::string &nick) CXX11_OVERRIDE + ModResult OnNamesListItem(User* issuer, Membership* memb, std::string& prefixes, std::string& nick) CXX11_OVERRIDE { - if (!cap.ext.get(issuer)) - return; - - /* Some module hid this from being displayed, dont bother */ - if (nick.empty()) - return; + if (cap.ext.get(issuer)) + prefixes = memb->GetAllPrefixChars(); - prefixes = memb->GetAllPrefixChars(); + return MOD_RES_PASSTHRU; } void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, Membership* memb, std::string& line) CXX11_OVERRIDE diff --git a/src/modules/m_uhnames.cpp b/src/modules/m_uhnames.cpp index 2534afb97..0a171c4dc 100644 --- a/src/modules/m_uhnames.cpp +++ b/src/modules/m_uhnames.cpp @@ -59,15 +59,12 @@ class ModuleUHNames : public Module return MOD_RES_PASSTHRU; } - void OnNamesListItem(User* issuer, Membership* memb, std::string &prefixes, std::string &nick) CXX11_OVERRIDE + ModResult OnNamesListItem(User* issuer, Membership* memb, std::string& prefixes, std::string& nick) CXX11_OVERRIDE { - if (!cap.ext.get(issuer)) - return; + if (cap.ext.get(issuer)) + nick = memb->user->GetFullHost(); - if (nick.empty()) - return; - - nick = memb->user->GetFullHost(); + return MOD_RES_PASSTHRU; } void OnEvent(Event& ev) CXX11_OVERRIDE |