X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/765d839d3c25cf804d7c0f8dbf82ad5f04b09a12..1d9974511bf1e5b97c5b3d10daa03f985947732c:/modules/m_knock.c diff --git a/modules/m_knock.c b/modules/m_knock.c index e85cce39..8235c48a 100644 --- a/modules/m_knock.c +++ b/modules/m_knock.c @@ -36,6 +36,7 @@ #include "parse.h" #include "modules.h" #include "s_serv.h" +#include "supported.h" static int m_knock(struct Client *, struct Client *, int, const char **); @@ -44,8 +45,21 @@ struct Message knock_msgtab = { {mg_unreg, {m_knock, 2}, {m_knock, 2}, mg_ignore, mg_ignore, {m_knock, 2}} }; +static int +_modinit(void) +{ + add_isupport("KNOCK", isupport_boolean, &ConfigChannel.use_knock); + return 0; +} + +static void +_moddeinit(void) +{ + delete_isupport("KNOCK"); +} + mapi_clist_av1 knock_clist[] = { &knock_msgtab, NULL }; -DECLARE_MODULE_AV1(knock, NULL, NULL, knock_clist, NULL, NULL, "$Revision: 3570 $"); +DECLARE_MODULE_AV1(knock, _modinit, _moddeinit, knock_clist, NULL, NULL, "$Revision: 3570 $"); /* m_knock * parv[1] = channel @@ -94,8 +108,8 @@ m_knock(struct Client *client_p, struct Client *source_p, int parc, const char * return 0; } - if(!((chptr->mode.mode & MODE_INVITEONLY) || (*chptr->mode.key) || - (chptr->mode.limit && + if(!((chptr->mode.mode & MODE_INVITEONLY) || (*chptr->mode.key) || + (chptr->mode.limit && rb_dlink_list_length(&chptr->members) >= (unsigned long)chptr->mode.limit))) { sendto_one_numeric(source_p, ERR_CHANOPEN, @@ -111,7 +125,7 @@ m_knock(struct Client *client_p, struct Client *source_p, int parc, const char * return 0; } - + if(MyClient(source_p)) { /* don't allow a knock if the user is banned */ @@ -127,7 +141,7 @@ m_knock(struct Client *client_p, struct Client *source_p, int parc, const char * * allow one knock per user per knock_delay * allow one knock per channel per knock_delay_channel */ - if(!IsOper(source_p) && + if(!IsOper(source_p) && (source_p->localClient->last_knock + ConfigChannel.knock_delay) > rb_current_time()) { sendto_one(source_p, form_str(ERR_TOOMANYKNOCK),