+ if (c->modes[CM_INVITEONLY])
+ {
+ c->WriteChannelWithServ((char*)ServerInstance->Config->ServerName, "NOTICE %s :User %s is KNOCKing on %s (%s)", c->name, user->nick, c->name, line.c_str());
+ user->WriteServ("NOTICE %s :KNOCKing on %s",user->nick,c->name);
+ return CMD_SUCCESS;
+ }
+ else
+ {
+ user->WriteServ("480 %s :Can't KNOCK on %s, channel is not invite only so knocking is pointless!",user->nick, c->name);
+ return CMD_FAILURE;
+ }
+
+ return CMD_SUCCESS;
+ }
+};
+
+/** Handles channel mode +K
+ */
+class Knock : public ModeHandler
+{
+ public:
+ Knock(InspIRCd* Instance) : ModeHandler(Instance, 'K', 0, 0, false, MODETYPE_CHANNEL, false) { }
+
+ ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)
+ {
+ if (adding)