]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Minor improvements to the codepage module.
[user/henk/code/inspircd.git] / src / channels.cpp
index c9816db4b006795fc0dde9faef88ade67a6d07b7..5baaf03ee1aabb696ecb78ed345966a41c173ec0 100644 (file)
@@ -40,7 +40,8 @@ Channel::Channel(const std::string &cname, time_t ts)
 
 void Channel::SetMode(ModeHandler* mh, bool on)
 {
-       modes[mh->GetId()] = on;
+       if (mh && mh->GetId() != ModeParser::MODEID_MAX)
+               modes[mh->GetId()] = on;
 }
 
 void Channel::SetTopic(User* u, const std::string& ntopic, time_t topicts, const std::string* setter)
@@ -175,9 +176,11 @@ Channel* Channel::JoinUser(LocalUser* user, std::string cname, bool override, co
        if (!override)
        {
                unsigned int maxchans = user->GetClass()->maxchans;
+               if (!maxchans)
+                       maxchans = ServerInstance->Config->MaxChans;
                if (user->IsOper())
                {
-                       unsigned int opermaxchans = ConvToInt(user->oper->getConfig("maxchans"));
+                       unsigned int opermaxchans = ConvToNum<unsigned int>(user->oper->getConfig("maxchans"));
                        // If not set, use 2.0's <channels:opers>, if that's not set either, use limit from CC
                        if (!opermaxchans && user->HasPrivPermission("channels/high-join-limit"))
                                opermaxchans = ServerInstance->Config->OperMaxChans;
@@ -241,7 +244,7 @@ Channel* Channel::JoinUser(LocalUser* user, std::string cname, bool override, co
                        {
                                if (chan->IsBanned(user))
                                {
-                                       user->WriteNumeric(ERR_BANNEDFROMCHAN, chan->name, "Cannot join channel (You're banned)");
+                                       user->WriteNumeric(ERR_BANNEDFROMCHAN, chan->name, "Cannot join channel (you're banned)");
                                        return NULL;
                                }
                        }
@@ -270,8 +273,8 @@ Membership* Channel::ForceJoin(User* user, const std::string* privs, bool bursti
 
        if (privs)
        {
-               // 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
+               // If the user was granted prefix modes (in the OnUserPreJoin hook, or they're a
+               // remote user and their own server set the modes), then set them internally now
                for (std::string::const_iterator i = privs->begin(); i != privs->end(); ++i)
                {
                        PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(*i);
@@ -435,7 +438,7 @@ void Channel::Write(ClientProtocol::Event& protoev, char status, const CUList& e
        }
 }
 
-const char* Channel::ChanModes(bool showkey)
+const char* Channel::ChanModes(bool showsecret)
 {
        static std::string scratch;
        std::string sparam;
@@ -454,9 +457,9 @@ const char* Channel::ChanModes(bool showkey)
                        if (!pm)
                                continue;
 
-                       if (n == 'k' - 65 && !showkey)
+                       if (pm->IsParameterSecret() && !showsecret)
                        {
-                               sparam += " <key>";
+                               sparam += " <" + pm->name + ">";
                        }
                        else
                        {
@@ -470,10 +473,11 @@ const char* Channel::ChanModes(bool showkey)
        return scratch.c_str();
 }
 
-void Channel::WriteNotice(const std::string& text)
+void Channel::WriteNotice(const std::string& text, char status)
 {
-       ClientProtocol::Messages::Privmsg privmsg(ClientProtocol::Messages::Privmsg::nocopy, ServerInstance->FakeClient, this, text, MSG_NOTICE);
+       ClientProtocol::Messages::Privmsg privmsg(ClientProtocol::Messages::Privmsg::nocopy, ServerInstance->FakeClient, this, text, MSG_NOTICE, status);
        Write(ServerInstance->GetRFCEvents().privmsg, privmsg);
+       ServerInstance->PI->SendMessage(this, status, text, MSG_NOTICE);
 }
 
 /* returns the status character for a given user on a channel, e.g. @ for op,