]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_delayjoin.cpp
Introduce "X" snomask for remote *:line messages [patch by jackmcbarn]
[user/henk/code/inspircd.git] / src / modules / m_delayjoin.cpp
index f182e18d0f4c74e7b3d1db521ce78a39ec464b2e..c79fa03810197562bd8e72c533695c99bbb37ba8 100644 (file)
@@ -19,7 +19,10 @@ class DelayJoinMode : public ModeHandler
  private:
        CUList empty;
  public:
-       DelayJoinMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Instance, Parent, 'D', 0, 0, false, MODETYPE_CHANNEL, false, 0, '@') {};
+       DelayJoinMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Parent, 'D', PARAM_NONE, MODETYPE_CHANNEL)
+       {
+               levelrequired = OP_VALUE;
+       }
 
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
 };
@@ -125,8 +128,17 @@ void ModuleDelayJoin::OnUserKick(User* source, Membership* memb, const std::stri
 
 ModResult ModuleDelayJoin::OnHostCycle(User* user)
 {
-       // TODO
-       return MOD_RES_DENY;
+       for (UCListIter f = user->chans.begin(); f != user->chans.end(); f++)
+       {
+               Channel* chan = *f;
+               Membership* memb = chan->GetUser(user);
+
+               if (memb && unjoined.get(memb))
+               {
+                       return MOD_RES_DENY;
+               }
+       }
+       return MOD_RES_PASSTHRU;
 }
 
 void ModuleDelayJoin::OnUserQuit(User* user, const std::string &reason, const std::string &oper_message)
@@ -166,7 +178,7 @@ void ModuleDelayJoin::OnText(User* user, void* dest, int target_type, const std:
        /* Display the join to everyone else (the user who joined got it earlier) */
        channel->WriteAllExceptSender(user, false, 0, "JOIN %s", channel->name.c_str());
 
-       std::string n = this->ServerInstance->Modes->ModeString(user, channel);
+       std::string n = ServerInstance->Modes->ModeString(user, channel);
        if (n.length() > 0)
                channel->WriteAllExceptSender(user, false, 0, "MODE %s +%s", channel->name.c_str(), n.c_str());
 }