X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_deaf.cpp;h=80e50e07e6c0fb5581780b121fde54e3d51b59ca;hb=2f12f76ec9561a6c1d522e3e6d81723ed9a07356;hp=90412c5c1201d67e0256836e542ed0010f6504bf;hpb=87b1461e2a4710a38b32186c2582da9fe9bb3804;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_deaf.cpp b/src/modules/m_deaf.cpp index 90412c5c1..80e50e07e 100644 --- a/src/modules/m_deaf.cpp +++ b/src/modules/m_deaf.cpp @@ -1,10 +1,15 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2006, 2008 Craig Edwards + * Copyright (C) 2019 linuxdaemon + * Copyright (C) 2019 Matt Schatz + * Copyright (C) 2013, 2017, 2019 Sadie Powell + * Copyright (C) 2012-2014, 2016 Attila Molnar + * Copyright (C) 2012, 2019 Robby + * Copyright (C) 2009 Daniel De Graaf + * Copyright (C) 2008, 2010 Craig Edwards * Copyright (C) 2007 Robin Burchell * Copyright (C) 2006-2007 Dennis Friis - * Copyright (C) 2012 satmd * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -89,50 +94,58 @@ class ModuleDeaf : public Module ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE { - if (target.type == MessageTarget::TYPE_CHANNEL) + switch (target.type) { - Channel* chan = target.Get(); - 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; - - const Channel::MemberMap& ulist = chan->GetUsers(); - for (Channel::MemberMap::const_iterator i = ulist.begin(); i != ulist.end(); ++i) + case MessageTarget::TYPE_CHANNEL: { - // 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; - - // don't deliver message! - details.exemptions.insert(i->first); + Channel* chan = target.Get(); + 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; + + 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; + + // don't deliver message! + details.exemptions.insert(i->first); + } + break; } - } - else if (target.type == MessageTarget::TYPE_USER) - { - User* targ = target.Get(); - if (!targ->IsModeSet(privdeafmode)) - return MOD_RES_PASSTHRU; + case MessageTarget::TYPE_USER: + { + User* targ = target.Get(); + 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; @@ -140,7 +153,7 @@ class ModuleDeaf : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Provides user modes +d and +D to block channel and user messages/notices", VF_VENDOR); + return Version("Adds user mode d (deaf) which prevents users from receiving channel messages.", VF_VENDOR); } };