]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
m_spanningtree Remove duplicate code for sending channel messages from RouteCommand()
[user/henk/code/inspircd.git] / src / channels.cpp
index d82ad6c233b4345d838d61b41113df96c72c503d..afc56990923434372947b37822f90c01d945cfad 100644 (file)
@@ -40,15 +40,10 @@ namespace
 }
 
 Channel::Channel(const std::string &cname, time_t ts)
+       : name(cname), age(ts), topicset(0)
 {
        if (!ServerInstance->chanlist->insert(std::make_pair(cname, this)).second)
                throw CoreException("Cannot create duplicate channel " + cname);
-
-       this->name = cname;
-       this->age = ts ? ts : ServerInstance->Time();
-
-       topicset = 0;
-       modes.reset();
 }
 
 void Channel::SetMode(ModeHandler* mh, bool on)
@@ -162,6 +157,9 @@ void Channel::SetDefaultModes()
                ModeHandler* mode = ServerInstance->Modes->FindMode(*n, MODETYPE_CHANNEL);
                if (mode)
                {
+                       if (mode->GetPrefixRank())
+                               continue;
+
                        if (mode->GetNumParams(true))
                                list.GetToken(parameter);
                        else
@@ -223,7 +221,7 @@ Channel* Channel::JoinUser(LocalUser* user, std::string cname, bool override, co
 
        if (!chan)
        {
-               privs = "o";
+               privs = ServerInstance->Config->DefaultModes.substr(0, ServerInstance->Config->DefaultModes.find(' '));
 
                if (override == false)
                {
@@ -339,11 +337,10 @@ void Channel::ForceJoin(User* user, const std::string* privs, bool bursting, boo
        {
                // If the user was granted prefix modes (in the OnUserPreJoin hook, or he's a
                // remote user and his own server set the modes), then set them internally now
-               memb->modes = *privs;
                for (std::string::const_iterator i = privs->begin(); i != privs->end(); ++i)
                {
                        ModeHandler* mh = ServerInstance->Modes->FindMode(*i, MODETYPE_CHANNEL);
-                       if (mh)
+                       if (mh && mh->GetPrefixRank())
                        {
                                std::string nick = user->nick;
                                /* Set, and make sure that the mode handler knows this mode was now set */