X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fchannels.cpp;h=0b9eb1cc478d1681ecfcb1a8fd59b6915f046844;hb=d1f2a430501aec8bc893647dc1049b8499e1caf6;hp=b0951c8ccb52947eb51027491ac8f22002ce0f42;hpb=dd2ace5916a8bb24801e74aa8b209d396e012d9b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/channels.cpp b/src/channels.cpp index b0951c8cc..0b9eb1cc4 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * InspIRCd: (C) 2002-2010 InspIRCd Development Team * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see @@ -81,29 +81,26 @@ std::string Channel::GetModeParameter(ModeHandler* mode) int Channel::SetTopic(User *u, std::string &ntopic, bool forceset) { - if (u) + if (!u) + u = ServerInstance->FakeClient; + if (IS_LOCAL(u) && !forceset) { - if(!forceset) - { - ModResult res; - /* 0: check status, 1: don't, -1: disallow change silently */ - - FIRST_MOD_RESULT(OnPreTopicChange, res, (u,this,ntopic)); + ModResult res; + FIRST_MOD_RESULT(OnPreTopicChange, res, (u,this,ntopic)); - if (res == MOD_RES_DENY) + if (res == MOD_RES_DENY) + return CMD_FAILURE; + if (res != MOD_RES_ALLOW) + { + 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 (res != MOD_RES_ALLOW) + } + if ((this->IsModeSet('t')) && (this->GetPrefixValue(u) < HALFOP_VALUE)) { - 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->GetPrefixValue(u) < HALFOP_VALUE)) - { - 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; - } + u->WriteNumeric(482, "%s %s :You do not have access to change the topic on this channel", u->nick.c_str(), this->name.c_str()); + return CMD_FAILURE; } } } @@ -122,11 +119,7 @@ int Channel::SetTopic(User *u, std::string &ntopic, bool forceset) this->topicset = ServerInstance->Time(); - // XXX: this check for 'u' is probably pre-fake-user, and it fucking sucks anyway. we need to change this. - if (u) - { - FOREACH_MOD(I_OnPostTopicChange,OnPostTopicChange(u, this, this->topic)); - } + FOREACH_MOD(I_OnPostTopicChange,OnPostTopicChange(u, this, this->topic)); return CMD_SUCCESS; }