diff options
-rw-r--r-- | include/modules.h | 9 | ||||
-rw-r--r-- | src/channels.cpp | 4 | ||||
-rw-r--r-- | src/modules.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_override.cpp | 6 |
4 files changed, 11 insertions, 10 deletions
diff --git a/include/modules.h b/include/modules.h index 4af979118..3f779fe80 100644 --- a/include/modules.h +++ b/include/modules.h @@ -422,7 +422,7 @@ enum Implementation I_OnUserPostNick, I_OnAccessCheck, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule, I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite, I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckExtBan, I_OnCheckStringExtBan, - I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnLocalTopicChange, + I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnPreTopicChange, I_OnPostTopicChange, I_OnEvent, I_OnRequest, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan, I_OnDelBan, I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete, @@ -1210,17 +1210,18 @@ class CoreExport Module : public Extensible */ virtual ModResult OnChangeLocalUserGECOS(User* user, const std::string &newhost); - /** Called whenever a topic is changed by a local user. + /** Called before a topic is changed. * Return 1 to deny the topic change, 0 to check details on the change, -1 to let it through with no checks + * As with other 'pre' events, you should only ever block a local event. * @param user The user changing the topic * @param chan The channels who's topic is being changed * @param topic The actual topic text * @param 1 to block the topic change, 0 to allow */ - virtual ModResult OnLocalTopicChange(User* user, Channel* chan, const std::string &topic); + virtual ModResult OnPreTopicChange(User* user, Channel* chan, const std::string &topic); /** Called whenever a topic has been changed. - * To block topic changes you must use OnLocalTopicChange instead. + * To block topic changes you must use OnPreTopicChange instead. * @param user The user changing the topic * @param chan The channels who's topic is being changed * @param topic The actual topic text diff --git a/src/channels.cpp b/src/channels.cpp index e559f399f..4915b1614 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -63,14 +63,14 @@ std::string Channel::GetModeParameter(char mode) int Channel::SetTopic(User *u, std::string &ntopic, bool forceset) { - if (u && IS_LOCAL(u)) + if (u) { if(!forceset) { ModResult res; /* 0: check status, 1: don't, -1: disallow change silently */ - FIRST_MOD_RESULT(ServerInstance, OnLocalTopicChange, res, (u,this,ntopic)); + FIRST_MOD_RESULT(ServerInstance, OnPreTopicChange, res, (u,this,ntopic)); if (res == MOD_RES_DENY) return CMD_FAILURE; diff --git a/src/modules.cpp b/src/modules.cpp index fe7f3fb02..59b52b5b1 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -151,7 +151,7 @@ ModResult Module::OnCheckStringExtBan(const std::string &s, Channel *c, char typ ModResult Module::OnStats(char, User*, string_list&) { return MOD_RES_PASSTHRU; } ModResult Module::OnChangeLocalUserHost(User*, const std::string&) { return MOD_RES_PASSTHRU; } ModResult Module::OnChangeLocalUserGECOS(User*, const std::string&) { return MOD_RES_PASSTHRU; } -ModResult Module::OnLocalTopicChange(User*, Channel*, const std::string&) { return MOD_RES_PASSTHRU; } +ModResult Module::OnPreTopicChange(User*, Channel*, const std::string&) { return MOD_RES_PASSTHRU; } void Module::OnEvent(Event*) { return; } const char* Module::OnRequest(Request*) { return NULL; } ModResult Module::OnPassCompare(Extensible* ex, const std::string &password, const std::string &input, const std::string& hashtype) { return MOD_RES_PASSTHRU; } diff --git a/src/modules/m_override.cpp b/src/modules/m_override.cpp index ae18803d3..d0ec5d8fe 100644 --- a/src/modules/m_override.cpp +++ b/src/modules/m_override.cpp @@ -41,7 +41,7 @@ class ModuleOverride : public Module } OverriddenMode = OverOther = false; OverOps = OverDeops = OverVoices = OverDevoices = OverHalfops = OverDehalfops = 0; - Implementation eventlist[] = { I_OnRehash, I_OnAccessCheck, I_On005Numeric, I_OnUserPreJoin, I_OnUserPreKick, I_OnPostCommand, I_OnLocalTopicChange, I_OnRequest }; + Implementation eventlist[] = { I_OnRehash, I_OnAccessCheck, I_On005Numeric, I_OnUserPreJoin, I_OnUserPreKick, I_OnPostCommand, I_OnPreTopicChange, I_OnRequest }; ServerInstance->Modules->Attach(eventlist, this, 8); } @@ -116,9 +116,9 @@ class ModuleOverride : public Module } - virtual ModResult OnLocalTopicChange(User *source, Channel *channel, const std::string &topic) + virtual ModResult OnPreTopicChange(User *source, Channel *channel, const std::string &topic) { - if (IS_OPER(source) && CanOverride(source, "TOPIC")) + if (IS_LOCAL(source) && IS_OPER(source) && CanOverride(source, "TOPIC")) { if (!channel->HasUser(source) || (channel->IsModeSet('t') && channel->GetStatus(source) < STATUS_HOP)) { |