diff options
author | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-08-04 17:43:15 +0000 |
---|---|---|
committer | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-08-04 17:43:15 +0000 |
commit | fe4001942d2b82566133099388c0908e10223c87 (patch) | |
tree | 72580b3937b4cd2b251d74e36408fe76c2e83bbf /src | |
parent | 333b19d80c2255044cefc67148a19c06e13695bf (diff) |
Add optional 3rd parameter to Channel::SetTopic() which overrides all access checks.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10085 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/channels.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/channels.cpp b/src/channels.cpp index a0ba81a5f..2dc668f31 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -73,27 +73,31 @@ std::string Channel::GetModeParameter(char mode) return ""; } -int Channel::SetTopic(User *u, std::string &ntopic) +int Channel::SetTopic(User *u, std::string &ntopic, bool forceset) { if (IS_LOCAL(u)) { - int MOD_RESULT = 0; - /* 0: check status, 1: don't, -1: disallow change silently */ - - FOREACH_RESULT(I_OnLocalTopicChange,OnLocalTopicChange(u,this,ntopic)); - if (MOD_RESULT == 1) - return CMD_FAILURE; - else if (MOD_RESULT == 0) + if(!forceset) { - if (!this->HasUser(u)) - { - u->WriteNumeric(442, "%s %s :You're not on that channel!",u->nick.c_str(), this->name.c_str()); + int MOD_RESULT = 0; + /* 0: check status, 1: don't, -1: disallow change silently */ + + FOREACH_RESULT(I_OnLocalTopicChange,OnLocalTopicChange(u,this,ntopic)); + + if (MOD_RESULT == 1) return CMD_FAILURE; - } - if ((this->IsModeSet('t')) && (this->GetStatus(u) < STATUS_HOP)) + else if (MOD_RESULT == 0) { - u->WriteNumeric(482, "%s %s :You must be at least a half-operator to change the topic on this channel", u->nick.c_str(), this->name.c_str()); - return CMD_FAILURE; + if (!this->HasUser(u)) + { + u->WriteNumeric(442, "%s %s :You're not on that channel!",u->nick.c_str(), this->name.c_str()); + return CMD_FAILURE; + } + if ((this->IsModeSet('t')) && (this->GetStatus(u) < STATUS_HOP)) + { + u->WriteNumeric(482, "%s %s :You must be at least a half-operator to change the topic on this channel", u->nick.c_str(), this->name.c_str()); + return CMD_FAILURE; + } } } |