diff options
author | special <special@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-16 05:27:39 +0000 |
---|---|---|
committer | special <special@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-16 05:27:39 +0000 |
commit | 3bbc954b77db81a17049ca348e0ab1431c5d015f (patch) | |
tree | 43feefe40097befd55cdd63e3c7a2d145d6102ca | |
parent | 2f02a16a12f448d9bdfe15b4f0a9d1c3299f66c8 (diff) |
Fixed bug #390 (broken m_chanprotect noservices)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7730 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | src/modules/m_chanprotect.cpp | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/modules/m_chanprotect.cpp b/src/modules/m_chanprotect.cpp index 87bc1ca4c..6d99ed10b 100644 --- a/src/modules/m_chanprotect.cpp +++ b/src/modules/m_chanprotect.cpp @@ -320,7 +320,7 @@ class ModuleChanProtect : public Module void Implements(char* List) { - List[I_OnUserKick] = List[I_OnUserPart] = List[I_OnRehash] = List[I_OnUserJoin] = List[I_OnAccessCheck] = List[I_OnSyncChannel] = 1; + List[I_OnUserKick] = List[I_OnUserPart] = List[I_OnRehash] = List[I_OnUserPreJoin] = List[I_OnPostJoin] = List[I_OnAccessCheck] = List[I_OnSyncChannel] = 1; } virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason, bool &silent) @@ -372,26 +372,29 @@ class ModuleChanProtect : public Module } } - virtual void OnUserJoin(userrec* user, chanrec* channel, bool &silent) + virtual int OnUserPreJoin(userrec *user, chanrec *chan, const char *cname, std::string &privs) { // if the user is the first user into the channel, mark them as the founder, but only if // the config option for it is set - if (FirstInGetsFounder) - { - if (channel->GetUserCounter() == 1) - { - // we're using Extensible::Extend to add data into user objects. - // this way is best as it adds data thats accessible to other modules - // (so long as you document your code properly) without breaking anything - // because its encapsulated neatly in a map. - - // Change requested by katsklaw... when the first in is set to get founder, - // to make it clearer that +q has been given, send that one user the +q notice - // so that their client's syncronization and their sanity are left intact. - user->WriteServ("MODE %s +q %s",channel->name,user->nick); - user->Extend("cm_founder_"+std::string(channel->name),fakevalue); - } - } + + if (FirstInGetsFounder && !chan) + privs = "~@"; + + return 0; + } + + virtual void OnPostJoin(userrec *user, chanrec *channel) + { + // This *must* be in PostJoin, not UserJoin - the former will make it appear to happen + // before the client is in the channel + + // This notice was here originally because it was all done prior to the creation of + // privs in OnUserPreJoin. I've left it because it might still be wanted, but i'm + // not sure it really should be here - ops don't get shown, obviously, and the prefix + // will appear in the names list for the user.. remove if desired -Special + + if (FirstInGetsFounder && channel->GetUserCounter() == 1) + user->WriteServ("MODE %s +q %s", channel->name, user->nick); } virtual int OnAccessCheck(userrec* source,userrec* dest,chanrec* channel,int access_type) |