diff options
| author | 2019-07-16 15:11:21 +0100 | |
|---|---|---|
| committer | 2019-07-16 16:48:18 +0100 | |
| commit | cd8b456f979733525941284639d8bf899173b429 (patch) | |
| tree | f1d26962e61c74c5acb076662a909beafbe8e5fd /src/modules/m_deaf.cpp | |
| parent | Replace socketengine_{pthread,win32} with C++11 threads. (diff) | |
| parent | ssl_gnutls: remove PackageInfo directives for EOL Debian versions. (diff) | |
Merge branch 'insp3' into master.
Diffstat (limited to 'src/modules/m_deaf.cpp')
| -rw-r--r-- | src/modules/m_deaf.cpp | 80 |
1 files changed, 44 insertions, 36 deletions
diff --git a/src/modules/m_deaf.cpp b/src/modules/m_deaf.cpp index 6f5df2cda..07255d442 100644 --- a/src/modules/m_deaf.cpp +++ b/src/modules/m_deaf.cpp @@ -89,50 +89,58 @@ class ModuleDeaf : public Module ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) override { - if (target.type == MessageTarget::TYPE_CHANNEL) + switch (target.type) { - Channel* chan = target.Get<Channel>(); - bool is_bypasschar = (deaf_bypasschars.find(details.text[0]) != std::string::npos); - bool is_bypasschar_uline = (deaf_bypasschars_uline.find(details.text[0]) != std::string::npos); + case MessageTarget::TYPE_CHANNEL: + { + Channel* chan = target.Get<Channel>(); + bool is_bypasschar = (deaf_bypasschars.find(details.text[0]) != std::string::npos); + bool is_bypasschar_uline = (deaf_bypasschars_uline.find(details.text[0]) != std::string::npos); - // If we have no bypasschars_uline in config, and this is a bypasschar (regular) - // Then it is obviously going to get through +d, no exemption list required - if (deaf_bypasschars_uline.empty() && is_bypasschar) - return MOD_RES_PASSTHRU; - // If it matches both bypasschar and bypasschar_uline, it will get through. - if (is_bypasschar && is_bypasschar_uline) - return MOD_RES_PASSTHRU; + // If we have no bypasschars_uline in config, and this is a bypasschar (regular) + // Then it is obviously going to get through +d, no exemption list required + if (deaf_bypasschars_uline.empty() && is_bypasschar) + return MOD_RES_PASSTHRU; + // If it matches both bypasschar and bypasschar_uline, it will get through. + if (is_bypasschar && is_bypasschar_uline) + return MOD_RES_PASSTHRU; - const Channel::MemberMap& ulist = chan->GetUsers(); - for (Channel::MemberMap::const_iterator i = ulist.begin(); i != ulist.end(); ++i) - { - // not +d - if (!i->first->IsModeSet(deafmode)) - continue; + const Channel::MemberMap& ulist = chan->GetUsers(); + for (Channel::MemberMap::const_iterator i = ulist.begin(); i != ulist.end(); ++i) + { + // not +d + if (!i->first->IsModeSet(deafmode)) + continue; - bool is_a_uline = i->first->server->IsULine(); - // matched a U-line only bypass - if (is_bypasschar_uline && is_a_uline) - continue; - // matched a regular bypass - if (is_bypasschar && !is_a_uline) - continue; + bool is_a_uline = i->first->server->IsULine(); + // matched a U-line only bypass + if (is_bypasschar_uline && is_a_uline) + continue; + // matched a regular bypass + if (is_bypasschar && !is_a_uline) + continue; - // don't deliver message! - details.exemptions.insert(i->first); + // don't deliver message! + details.exemptions.insert(i->first); + } + break; } - } - else if (target.type == MessageTarget::TYPE_USER) - { - User* targ = target.Get<User>(); - if (!targ->IsModeSet(privdeafmode)) - return MOD_RES_PASSTHRU; + case MessageTarget::TYPE_USER: + { + User* targ = target.Get<User>(); + if (!targ->IsModeSet(privdeafmode)) + return MOD_RES_PASSTHRU; + + if (!privdeafuline && user->server->IsULine()) + return MOD_RES_DENY; - if (!privdeafuline && user->server->IsULine()) - return MOD_RES_DENY; + if (!user->HasPrivPermission("users/ignore-privdeaf")) + return MOD_RES_DENY; - if (!user->HasPrivPermission("users/ignore-privdeaf")) - return MOD_RES_DENY; + break; + } + case MessageTarget::TYPE_SERVER: + break; } return MOD_RES_PASSTHRU; |
