diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-04-23 23:33:13 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-04-23 23:33:13 +0000 |
commit | ddc514e66dacdaf475d9dddc33441498be985fa0 (patch) | |
tree | bab2bebf50264dc8386245f5c0b3266fb037223f | |
parent | 69fea681a2ee63bde7b59a43174b8010c193549e (diff) |
Added global oper monitoring through modules and global connect monitoring through modules
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1177 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/modules.h | 14 | ||||
-rw-r--r-- | src/commands.cpp | 11 | ||||
-rw-r--r-- | src/mode.cpp | 4 | ||||
-rw-r--r-- | src/modules.cpp | 2 |
4 files changed, 28 insertions, 3 deletions
diff --git a/include/modules.h b/include/modules.h index 57a7a1e04..78cc2553d 100644 --- a/include/modules.h +++ b/include/modules.h @@ -627,6 +627,20 @@ class Module : public classbase * to do nothing. */ virtual int OnOperCompare(std::string password, std::string input); + + /** Called whenever a user is given usermode +o, anywhere on the network. + * You cannot override this and prevent it from happening as it is already happened and + * such a task must be performed by another server. You can however bounce modes by sending + * servermodes out to reverse mode changes. + */ + virtual void OnGlobalOper(userrec* user); + + /** Called whenever a user connects, anywhere on the network. + * This event is informational only. You should not change any user information in this + * event. To do so, use the OnUserConnect method to change the state of local users. + */ + virtual void OnGlobalConnect(userrec* user); + }; diff --git a/src/commands.cpp b/src/commands.cpp index 98a5809f6..fa51713d4 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -2212,9 +2212,14 @@ void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* clientlist[nick]->idle_lastmsg = TIME; // this is unrealiable and wont actually be used locally for (int i = 0; i < MAXCHANS; i++) { - clientlist[nick]->chans[i].channel = NULL; - clientlist[nick]->chans[i].uc_modes = 0; - } + clientlist[nick]->chans[i].channel = NULL; + clientlist[nick]->chans[i].uc_modes = 0; + } + FOREACH_MOD OnGlobalConnect(clientlist[nick]); + if (strchr(clientlist[nick]->modes,'o')) + { + FOREACH_MOD OnGlobalOper(clientlist[nick]); + } } void handle_F(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) diff --git a/src/mode.cpp b/src/mode.cpp index aab5a403a..6f06027e4 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -1288,6 +1288,10 @@ void handle_mode(char **parameters, int pcnt, userrec *user) dmodes[strlen(dmodes)] = parameters[1][i]; outpars[strlen(outpars)+1]='\0'; outpars[strlen(outpars)] = parameters[1][i]; + if (parameters[1][i] == 'o') + { + FOREACH_MOD OnGlobalOper(dest); + } } } } diff --git a/src/modules.cpp b/src/modules.cpp index 83abb6e57..2f45ad0d0 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -406,6 +406,8 @@ int Module::OnMeshToken(char token,string_list params,serverrec* source,serverre void Module::OnEvent(Event* event) { return; }; char* Module::OnRequest(Request* request) { return NULL; }; int Module::OnOperCompare(std::string password, std::string input) { return 0; }; +void Module::OnGlobalOper(userrec* user) { }; +void Module::OnGlobalConnect(userrec* user) { }; // server is a wrapper class that provides methods to all of the C-style // exports in the core |