]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_ircv3.cpp
Add optional oper override umode +O.
[user/henk/code/inspircd.git] / src / modules / m_ircv3.cpp
index c99d920bae297f9fd4d08c561c141ea6e353b426..543fb49a40d9c3a275434abe47fec2b3fa67e77e 100644 (file)
 #include "inspircd.h"
 #include "modules/account.h"
 #include "modules/cap.h"
-
-class WriteNeighborsWithCap : public User::ForEachNeighborHandler
-{
-       const Cap::Capability& cap;
-       const std::string& msg;
-
-       void Execute(LocalUser* user) CXX11_OVERRIDE
-       {
-               if (cap.get(user))
-                       user->Write(msg);
-       }
-
- public:
-       WriteNeighborsWithCap(User* user, const std::string& message, const Cap::Capability& capability)
-               : cap(capability)
-               , msg(message)
-       {
-               user->ForEachNeighbor(*this, false);
-       }
-};
+#include "modules/ircv3.h"
 
 class ModuleIRCv3 : public Module, public AccountEventListener
 {
@@ -76,7 +57,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
                else
                        line += newaccount;
 
-               WriteNeighborsWithCap(user, line, cap_accountnotify);
+               IRCv3::WriteNeighborsWithCap(user, line, cap_accountnotify);
        }
 
        void OnUserJoin(Membership* memb, bool sync, bool created, CUList& excepts) CXX11_OVERRIDE
@@ -162,7 +143,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
                        if (!awaymsg.empty())
                                line += " :" + awaymsg;
 
-                       WriteNeighborsWithCap(user, line, cap_awaynotify);
+                       IRCv3::WriteNeighborsWithCap(user, line, cap_awaynotify);
                }
                return MOD_RES_PASSTHRU;
        }
@@ -179,7 +160,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
                {
                        // Send the away notify line if the current member is local, has the away-notify cap and isn't excepted
                        User* member = IS_LOCAL(it->first);
-                       if ((member) && (cap_awaynotify.get(member)) && (last_excepts.find(member) == last_excepts.end()))
+                       if ((member) && (cap_awaynotify.get(member)) && (last_excepts.find(member) == last_excepts.end()) && (it->second != memb))
                        {
                                member->Write(line);
                        }
@@ -188,7 +169,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
                last_excepts.clear();
        }
 
-       void Prioritize()
+       void Prioritize() CXX11_OVERRIDE
        {
                ServerInstance->Modules->SetPriority(this, I_OnUserJoin, PRIORITY_LAST);
        }