diff options
-rw-r--r-- | include/modules.h | 12 | ||||
-rw-r--r-- | src/InspIRCd.layout | 102 | ||||
-rw-r--r-- | src/commands.cpp | 18 | ||||
-rw-r--r-- | src/modules.cpp | 4 | ||||
-rw-r--r-- | src/modules/m_blockcolor.cpp | 4 | ||||
-rw-r--r-- | src/modules/m_filter.cpp | 12 | ||||
-rw-r--r-- | src/modules/m_noctcp.cpp | 4 | ||||
-rw-r--r-- | src/modules/m_nonotice.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_services.cpp | 4 |
9 files changed, 88 insertions, 74 deletions
diff --git a/include/modules.h b/include/modules.h index caea6e421..dc17b99c0 100644 --- a/include/modules.h +++ b/include/modules.h @@ -263,7 +263,7 @@ class Module : public classbase * you must cast dest to a userrec* otherwise you must cast it to a chanrec*, this is the details * of where the message is destined to be sent. */ - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text); + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text); /** Called whenever a user is about to NOTICE A user or a channel, before any processing is done. * Returning any nonzero value from this function stops the process immediately, causing no @@ -272,8 +272,11 @@ class Module : public classbase * target_type can be one of TYPE_USER or TYPE_CHANNEL. If the target_type value is a user, * you must cast dest to a userrec* otherwise you must cast it to a chanrec*, this is the details * of where the message is destined to be sent. + * You may alter the message text as you wish before relinquishing control to the next module + * in the chain, and if no other modules block the text this altered form of the text will be sent out + * to the user and possibly to other servers. */ - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text); + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text); /** Called before any nickchange, local or remote. This can be used to implement Q-lines etc. * Please note that although you can see remote nickchanges through this function, you should @@ -281,6 +284,9 @@ class Module : public classbase * check user->server before taking any action (including returning nonzero from the method). * If your method returns nonzero, the nickchange is silently forbidden, and it is down to your * module to generate some meaninful output. + * You may alter the message text as you wish before relinquishing control to the next module + * in the chain, and if no other modules block the text this altered form of the text will be sent out + * to the user and possibly to other servers. */ virtual int OnUserPreNick(userrec* user, std::string newnick); @@ -305,8 +311,8 @@ class Module : public classbase * AC_GENERAL_MODE type, as it may inadvertently override the behaviour of other modules. When the access_type * is AC_GENERAL_MODE, the destination of the mode will be NULL (as it has not yet been determined). */ - virtual int OnAccessCheck(userrec* source,userrec* dest,chanrec* channel,int access_type); + /** Called during a netburst to sync user data. * This is called during the netburst on a per-user basis. You should use this call to up any special * user-related things which are implemented by your module, e.g. sending listmodes. You may return diff --git a/src/InspIRCd.layout b/src/InspIRCd.layout index ed04817c7..fa44b4a6e 100644 --- a/src/InspIRCd.layout +++ b/src/InspIRCd.layout @@ -1,5 +1,5 @@ [Editors] -Focused=-1 +Focused=43 Order=2,4,6,3,7,25,5,24,39,42,43,1,46,0,49,-1 [Editor_0] @@ -13,9 +13,9 @@ LeftChar=1 [Editor_1] Open=1 Top=0 -CursorCol=17 -CursorRow=11 -TopLine=1 +CursorCol=26 +CursorRow=2974 +TopLine=2920 LeftChar=1 [Editor_2] @@ -37,9 +37,9 @@ LeftChar=1 [Editor_4] Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=13 +CursorRow=315 +TopLine=276 LeftChar=1 [Editor_5] @@ -55,7 +55,7 @@ Open=1 Top=0 CursorCol=1 CursorRow=16 -TopLine=1 +TopLine=59 LeftChar=1 [Editor_7] @@ -139,11 +139,11 @@ TopLine=1 LeftChar=1 [Editor_17] -Open=0 +Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=44 +CursorRow=78 +TopLine=23 LeftChar=1 [Editor_18] @@ -163,11 +163,11 @@ TopLine=1 LeftChar=1 [Editor_20] -Open=0 +Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=14 +CursorRow=276 +TopLine=245 LeftChar=1 [Editor_21] @@ -179,7 +179,7 @@ TopLine=1 LeftChar=1 [Editor_22] -Open=0 +Open=1 Top=0 CursorCol=1 CursorRow=16 @@ -251,11 +251,11 @@ CursorRow=16 TopLine=1 LeftChar=1 [Editor_32] -Open=0 +Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=86 +CursorRow=65 +TopLine=18 LeftChar=1 [Editor_33] Open=0 @@ -323,16 +323,16 @@ LeftChar=1 [Editor_42] Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=42 +CursorRow=287 +TopLine=256 LeftChar=1 [Editor_43] Open=1 -Top=0 -CursorCol=4 -CursorRow=435 -TopLine=387 +Top=1 +CursorCol=32 +CursorRow=601 +TopLine=552 LeftChar=1 [Editor_44] Open=0 @@ -356,11 +356,11 @@ CursorRow=16 TopLine=1 LeftChar=1 [Editor_47] -Open=0 +Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=86 +CursorRow=88 +TopLine=69 LeftChar=1 [Editor_48] Open=0 @@ -384,11 +384,11 @@ CursorRow=16 TopLine=1 LeftChar=1 [Editor_51] -Open=0 +Open=1 Top=0 CursorCol=1 -CursorRow=16 -TopLine=1 +CursorRow=89 +TopLine=35 LeftChar=1 [Editor_52] Open=0 @@ -412,11 +412,11 @@ CursorRow=16 TopLine=1 LeftChar=1 [Editor_55] -Open=0 +Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=85 +CursorRow=35 +TopLine=19 LeftChar=1 [Editor_56] Open=0 @@ -426,18 +426,18 @@ CursorRow=16 TopLine=1 LeftChar=1 [Editor_57] -Open=0 +Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=85 +CursorRow=56 +TopLine=11 LeftChar=1 [Editor_58] -Open=0 +Open=1 Top=0 -CursorCol=1 -CursorRow=16 -TopLine=1 +CursorCol=85 +CursorRow=54 +TopLine=10 LeftChar=1 [Editor_59] Open=0 @@ -448,8 +448,8 @@ TopLine=1 LeftChar=1 [Editor_60] Open=1 -Top=1 -CursorCol=1 -CursorRow=1 -TopLine=33 +Top=0 +CursorCol=22 +CursorRow=50 +TopLine=12 LeftChar=1 diff --git a/src/commands.cpp b/src/commands.cpp index 5b3c14f98..5144d7ae5 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -560,10 +560,12 @@ void handle_privmsg(char **parameters, int pcnt, userrec *user) int MOD_RESULT = 0; - FOREACH_RESULT(OnUserPreMessage(user,chan,TYPE_CHANNEL,std::string(parameters[1]))); + std::string temp = parameters[1]; + FOREACH_RESULT(OnUserPreMessage(user,chan,TYPE_CHANNEL,temp)); if (MOD_RESULT) { return; } + parameters[1] = (char*)temp.c_str(); ChanExceptSender(chan, user, "PRIVMSG %s :%s", chan->name, parameters[1]); @@ -591,10 +593,12 @@ void handle_privmsg(char **parameters, int pcnt, userrec *user) int MOD_RESULT = 0; - FOREACH_RESULT(OnUserPreMessage(user,dest,TYPE_USER,std::string(parameters[1]))); + std::string temp = parameters[1]; + FOREACH_RESULT(OnUserPreMessage(user,dest,TYPE_USER,temp)); if (MOD_RESULT) { return; } + parameters[1] = (char*)temp.c_str(); @@ -643,11 +647,13 @@ void handle_notice(char **parameters, int pcnt, userrec *user) } int MOD_RESULT = 0; - - FOREACH_RESULT(OnUserPreNotice(user,chan,TYPE_CHANNEL,std::string(parameters[1]))); + + std::string temp = parameters[1]; + FOREACH_RESULT(OnUserPreNotice(user,chan,TYPE_CHANNEL,temp)); if (MOD_RESULT) { return; } + parameters[1] = (char*)temp.c_str(); ChanExceptSender(chan, user, "NOTICE %s :%s", chan->name, parameters[1]); @@ -669,10 +675,12 @@ void handle_notice(char **parameters, int pcnt, userrec *user) { int MOD_RESULT = 0; - FOREACH_RESULT(OnUserPreNotice(user,dest,TYPE_USER,std::string(parameters[1]))); + std::string temp = parameters[1]; + FOREACH_RESULT(OnUserPreNotice(user,dest,TYPE_USER,temp)); if (MOD_RESULT) { return; } + parameters[1] = (char*)temp.c_str(); if (!strcmp(dest->server,user->server)) { diff --git a/src/modules.cpp b/src/modules.cpp index 7477fe518..56a1d2621 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -311,8 +311,8 @@ void Module::OnOper(userrec* user) { }; void Module::OnInfo(userrec* user) { }; void Module::OnWhois(userrec* source, userrec* dest) { }; int Module::OnUserPreInvite(userrec* source,userrec* dest,chanrec* channel) { return 0; }; -int Module::OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text) { return 0; }; -int Module::OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text) { return 0; }; +int Module::OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { return 0; }; +int Module::OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { return 0; }; int Module::OnUserPreNick(userrec* user, std::string newnick) { return 0; }; int Module::OnAccessCheck(userrec* source,userrec* dest,chanrec* channel,int access_type) { return ACR_DEFAULT; }; string_list Module::OnUserSync(userrec* user) { string_list empty; return empty; } diff --git a/src/modules/m_blockcolor.cpp b/src/modules/m_blockcolor.cpp index a4e5acc1d..7f9d8716d 100644 --- a/src/modules/m_blockcolor.cpp +++ b/src/modules/m_blockcolor.cpp @@ -32,7 +32,7 @@ class ModuleBlockColor : public Module Srv->AddExtendedMode('c',MT_CHANNEL,false,0,0); } - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { @@ -51,7 +51,7 @@ class ModuleBlockColor : public Module return 0; } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { diff --git a/src/modules/m_filter.cpp b/src/modules/m_filter.cpp index 8d121ac0e..679df66bc 100644 --- a/src/modules/m_filter.cpp +++ b/src/modules/m_filter.cpp @@ -62,13 +62,13 @@ class ModuleFilter : public Module // format of a config entry is <keyword pattern="*glob*" reason="Some reason here" action="kill/block"> - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { - text = text + " "; + std::string text2 = text + " "; for (int index = 0; index < MyConf->Enumerate("keyword"); index++) { std::string pattern = MyConf->ReadValue("keyword","pattern",index); - if (Srv->MatchText(text,pattern)) + if (Srv->MatchText(text2,pattern)) { std::string target = ""; std::string reason = MyConf->ReadValue("keyword","reason",index); @@ -111,13 +111,13 @@ class ModuleFilter : public Module return 0; } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { - text = text + " "; + std::string text2 = text + " "; for (int index = 0; index < MyConf->Enumerate("keyword"); index++) { std::string pattern = MyConf->ReadValue("keyword","pattern",index); - if (Srv->MatchText(text,pattern)) + if (Srv->MatchText(text2,pattern)) { std::string target = ""; std::string reason = MyConf->ReadValue("keyword","reason",index); diff --git a/src/modules/m_noctcp.cpp b/src/modules/m_noctcp.cpp index 8d597d1b8..4d58151f0 100644 --- a/src/modules/m_noctcp.cpp +++ b/src/modules/m_noctcp.cpp @@ -33,7 +33,7 @@ class ModuleNoCTCP : public Module Srv->AddExtendedMode('C',MT_CHANNEL,false,0,0); } - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { @@ -53,7 +53,7 @@ class ModuleNoCTCP : public Module return 0; } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { diff --git a/src/modules/m_nonotice.cpp b/src/modules/m_nonotice.cpp index a5fa2b61c..89a619590 100644 --- a/src/modules/m_nonotice.cpp +++ b/src/modules/m_nonotice.cpp @@ -32,7 +32,7 @@ class ModuleNoNotice : public Module Srv->AddExtendedMode('T',MT_CHANNEL,false,0,0); } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp index 74c2bf2dc..95d0436e1 100644 --- a/src/modules/m_services.cpp +++ b/src/modules/m_services.cpp @@ -85,7 +85,7 @@ class ModuleServices : public Module return 0; } - virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { @@ -120,7 +120,7 @@ class ModuleServices : public Module return 0; } - virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text) + virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { if (target_type == TYPE_CHANNEL) { |