+ ~ModuleDelayJoin();
+ Version GetVersion();
+ void OnNamesListItem(User* issuer, Membership*, std::string &prefixes, std::string &nick);
+ void OnUserJoin(Membership*, bool, bool, CUList&);
+ void CleanUser(User* user);
+ void OnUserPart(Membership*, std::string &partmessage, CUList&);
+ void OnUserKick(User* source, Membership*, const std::string &reason, CUList&);
+ void OnBuildNeighborList(User* source, UserChanList &include, std::map<User*,bool> &exception);
+ void OnText(User* user, void* dest, int target_type, const std::string &text, char status, CUList &exempt_list);
+};
+
+/* $ModDesc: Allows for delay-join channels (+D) where users dont appear to join until they speak */
+
+ModeAction DelayJoinMode::OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)
+{
+ /* no change */
+ if (channel->IsModeSet('D') == adding)
+ return MODEACTION_DENY;