X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/65b8d06c7108b31553045e62f83ad146d643945b..b2c208be091670e3c5259eba77187bae6ac6eece:/modules/m_away.c?ds=sidebyside diff --git a/modules/m_away.c b/modules/m_away.c index 9a84ba24..5a0fdced 100644 --- a/modules/m_away.c +++ b/modules/m_away.c @@ -37,7 +37,6 @@ #include "s_serv.h" #include "packet.h" - static int m_away(struct Client *, struct Client *, int, const char **); struct Message away_msgtab = { @@ -69,7 +68,8 @@ DECLARE_MODULE_AV1(away, NULL, NULL, away_clist, NULL, NULL, "$Revision: 3370 $" static int m_away(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { - if(MyClient(source_p) && !IsFloodDone(source_p)) + if(MyClient(source_p) && source_p->localClient->next_away && + !IsFloodDone(source_p)) flood_endgrace(source_p); if(!IsClient(source_p)) @@ -93,6 +93,24 @@ m_away(struct Client *client_p, struct Client *source_p, int parc, const char *p return 0; } + /* Rate limit this because it is sent to common channels. */ + if (MyClient(source_p)) + { + if(!IsOper(source_p) && + source_p->localClient->next_away > rb_current_time()) + { + sendto_one(source_p, form_str(RPL_LOAD2HI), + me.name, source_p->name, "AWAY"); + return 0; + } + if(source_p->localClient->next_away < rb_current_time() - + ConfigFileEntry.away_interval) + source_p->localClient->next_away = rb_current_time(); + else + source_p->localClient->next_away = rb_current_time() + + ConfigFileEntry.away_interval; + } + if(source_p->user->away == NULL) allocate_away(source_p); if(strncmp(source_p->user->away, parv[1], AWAYLEN - 1)) @@ -108,10 +126,9 @@ m_away(struct Client *client_p, struct Client *source_p, int parc, const char *p source_p->host, source_p->user->away); } - + if(MyConnect(source_p)) sendto_one_numeric(source_p, RPL_NOWAWAY, form_str(RPL_NOWAWAY)); - return 0; }