From 8d066e557eeabaea40634dec8d6f5cd4d39cfe60 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Wed, 3 Sep 2014 14:15:18 +0200 Subject: [PATCH] Pass the modes to the OnMode hook as a Modes::ChangeList, pass ModeProcessFlags too --- include/modules.h | 11 ++++++----- src/mode.cpp | 2 +- src/modules.cpp | 2 +- 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& modes, const std::vector& 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& 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&, const std::vector&) { 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); } -- 2.39.2