- continue; /* deliver message */
-
- bool is_a_uline = i->first->server->IsULine();
- /* matched a U-line only bypass */
- if (is_bypasschar_uline && is_a_uline)
- continue; /* deliver message */
- /* matched a regular bypass */
- if (is_bypasschar && !is_a_uline)
- continue; /* deliver message */
-
- /* don't deliver message! */
- details.exemptions.insert(i->first);
+ 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);
+ }
+ }
+ else if (target.type == 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 (!user->HasPrivPermission("users/privdeaf-override"))
+ return MOD_RES_DENY;