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 ¶meter, bool adding);
};
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)
/* 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());
}