+ if (validated)
+ return MOD_RES_PASSTHRU;
+
+ if (!ServerInstance->XLines->MatchesLine("SHUN", user))
+ {
+ /* Not shunned, don't touch. */
+ return MOD_RES_PASSTHRU;
+ }
+
+ if (!affectopers && IS_OPER(user))
+ {
+ /* Don't do anything if the user is an operator and affectopers isn't set */
+ return MOD_RES_PASSTHRU;
+ }
+
+ std::set<std::string>::iterator i = ShunEnabledCommands.find(command);
+
+ if (i == ShunEnabledCommands.end())
+ {
+ if (NotifyOfShun)
+ user->WriteServ("NOTICE %s :*** Command %s not processed, as you have been blocked from issuing commands (SHUN)", user->nick.c_str(), command.c_str());
+ return MOD_RES_DENY;
+ }
+
+ if (command == "QUIT")
+ {
+ /* Allow QUIT but dont show any quit message */
+ parameters.clear();
+ }
+ else if (command == "PART")