+ return true;
+ }
+
+ void add(User* user)
+ {
+ // One user can be in the list multiple times if the user gets kicked, force joins
+ // (skipping OnUserPreJoin) and gets kicked again, but that's okay because canjoin()
+ // works correctly in this case as well
+ kicked.push_back(KickedUser(user, delay));
+ }
+};
+
+/** Handles channel mode +J
+ */
+class KickRejoin : public ParamMode<KickRejoin, SimpleExtItem<KickRejoinData> >
+{
+ const unsigned int max;
+ public:
+ KickRejoin(Module* Creator)
+ : ParamMode<KickRejoin, SimpleExtItem<KickRejoinData> >(Creator, "kicknorejoin", 'J')
+ , max(60)
+ {
+ }
+
+ ModeAction OnSet(User* source, Channel* channel, std::string& parameter)
+ {
+ int v = ConvToInt(parameter);
+ if (v <= 0)