summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-09-03 14:15:18 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-09-03 14:15:18 +0200
commit8d066e557eeabaea40634dec8d6f5cd4d39cfe60 (patch)
treea21de266d8acdc51ebca36da865f1288c441a94b
parentf3e803f5b9d8478e1f4d490a2f59ba7fca10a6b9 (diff)
Pass the modes to the OnMode hook as a Modes::ChangeList, pass ModeProcessFlags too
-rw-r--r--include/modules.h11
-rw-r--r--src/mode.cpp2
-rw-r--r--src/modules.cpp2
3 files changed, 8 insertions, 7 deletions
diff --git a/include/modules.h b/include/modules.h
index 4f363b2a6..de0faf6d4 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -598,15 +598,16 @@ class CoreExport Module : public classbase, public usecountbase
/** Called after every MODE command sent from a user
* Either the usertarget or the chantarget variable contains the target of the modes,
* the actual target will have a non-NULL pointer.
- * The modes vector contains the remainder of the mode string after the target,
- * e.g.: "+wsi" or ["+ooo", "nick1", "nick2", "nick3"].
+ * All changed modes are available in the changelist object.
* @param user The user sending the MODEs
* @param usertarget The target user of the modes, NULL if the target is a channel
* @param chantarget The target channel of the modes, NULL if the target is a user
- * @param modes The actual modes and their parameters if any
- * @param translate The translation types of the mode parameters
+ * @param changelist The changed modes.
+ * @param processflags Flags passed to ModeParser::Process(), see ModeParser::ModeProcessFlags
+ * for the possible flags.
+ * @param output_mode Changed modes, including '+' and '-' characters, not including any parameters
*/
- virtual void OnMode(User* user, User* usertarget, Channel* chantarget, const std::vector<std::string>& modes, const std::vector<TranslateType>& translate);
+ virtual void OnMode(User* user, User* usertarget, Channel* chantarget, const Modes::ChangeList& changelist, ModeParser::ModeProcessFlag processflags, const std::string& output_mode);
/** Allows modules to synchronize data which relates to users during a netburst.
* When this function is called, it will be called from the module which implements
diff --git a/src/mode.cpp b/src/mode.cpp
index b684af885..66ce313f4 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -503,7 +503,7 @@ void ModeParser::Process(const std::vector<std::string>& parameters, User* user,
else
targetuser->WriteFrom(user, "MODE " + LastParse);
- FOREACH_MOD(OnMode, (user, targetuser, targetchannel, LastParseParams, LastParseTranslate));
+ FOREACH_MOD(OnMode, (user, targetuser, targetchannel, LastChangeList, flags, output_mode));
}
else if (targetchannel && parameters.size() == 2)
{
diff --git a/src/modules.cpp b/src/modules.cpp
index cb5b9c32c..7e932ed72 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -86,7 +86,7 @@ void Module::OnUserPart(Membership*, std::string&, CUList&) { DetachEvent(I_OnU
void Module::OnPreRehash(User*, const std::string&) { DetachEvent(I_OnPreRehash); }
void Module::OnModuleRehash(User*, const std::string&) { DetachEvent(I_OnModuleRehash); }
ModResult Module::OnUserPreJoin(LocalUser*, Channel*, const std::string&, std::string&, const std::string&) { DetachEvent(I_OnUserPreJoin); return MOD_RES_PASSTHRU; }
-void Module::OnMode(User*, User*, Channel*, const std::vector<std::string>&, const std::vector<TranslateType>&) { DetachEvent(I_OnMode); }
+void Module::OnMode(User*, User*, Channel*, const Modes::ChangeList&, ModeParser::ModeProcessFlag, const std::string&) { DetachEvent(I_OnMode); }
void Module::OnOper(User*, const std::string&) { DetachEvent(I_OnOper); }
void Module::OnPostOper(User*, const std::string&, const std::string &) { DetachEvent(I_OnPostOper); }
void Module::OnInfo(User*) { DetachEvent(I_OnInfo); }