X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fchannels.cpp;h=b8195ee9f6c4475c8b64a6fae8c2310b8daedce3;hb=4d42d544584875d0d71dab99f6785ac98324b971;hp=7374f091e80997f1abbe9d6939b5abfd90a7a3ab;hpb=dd82cae06eaf6a1ca522a567fe49a656405bc19b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/channels.cpp b/src/channels.cpp index 7374f091e..b8195ee9f 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team + * InspIRCd: (C) 2002-2009 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -25,8 +25,7 @@ Channel::Channel(InspIRCd* Instance, const std::string &cname, time_t ts) : Serv (*(ServerInstance->chanlist))[cname.c_str()] = this; this->name.assign(cname, 0, ServerInstance->Config->Limits.ChanMax); - this->created = ts ? ts : ServerInstance->Time(); - this->age = this->created; + this->age = ts ? ts : ServerInstance->Time(); maxbans = topicset = 0; modes.reset(); @@ -82,7 +81,7 @@ int Channel::SetTopic(User *u, std::string &ntopic, bool forceset) /* 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) @@ -297,6 +296,7 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool strlcpy(cname, cn, Instance->Config->Limits.ChanMax); Ptr = Instance->FindChan(cname); + bool created_by_local = false; if (!Ptr) { @@ -311,6 +311,7 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool else { privs = "@"; + created_by_local = true; } if (IS_LOCAL(user) && override == false) @@ -413,15 +414,17 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool } } - /* As spotted by jilles, dont bother to set this on remote users */ - if (IS_LOCAL(user) && Ptr->GetUserCounter() == 0) + if (created_by_local) + { + /* As spotted by jilles, dont bother to set this on remote users */ Ptr->SetDefaultModes(); + } return Channel::ForceChan(Instance, Ptr, user, privs, bursting); } Channel* Channel::ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const std::string &privs, bool bursting) -{ +{ std::string nick = user->nick; bool silent = false; @@ -1198,4 +1201,3 @@ void Channel::RemoveAllPrefixes(User* user) prefixes.erase(n); } } -