mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Add an option to allow disengaging joinflood after a netsplit.
This commit is contained in:
parent
219f8e6262
commit
2a3b6ba9e2
@ -1268,8 +1268,15 @@
|
|||||||
# Closes the channel for N seconds if X users join in Y seconds.
|
# Closes the channel for N seconds if X users join in Y seconds.
|
||||||
#<module name="joinflood">
|
#<module name="joinflood">
|
||||||
#
|
#
|
||||||
# The number of seconds to close the channel for:
|
# duration: The number of seconds to close a channel for when it is
|
||||||
#<joinflood duration="1m">
|
# being flooded with joins.
|
||||||
|
#
|
||||||
|
# splitwait: The number of seconds to disengage joinflood for after
|
||||||
|
# a server splits. This allows users to reconnect without
|
||||||
|
# being throttled by joinflood.
|
||||||
|
#
|
||||||
|
#<joinflood duration="1m"
|
||||||
|
# splitwait="30s">
|
||||||
|
|
||||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||||
# Anti auto rejoin: Adds support for prevention of auto-rejoin (+J).
|
# Anti auto rejoin: Adds support for prevention of auto-rejoin (+J).
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "inspircd.h"
|
#include "inspircd.h"
|
||||||
|
#include "modules/server.h"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -131,13 +132,23 @@ class JoinFlood : public ParamMode<JoinFlood, SimpleExtItem<joinfloodsettings> >
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ModuleJoinFlood : public Module
|
class ModuleJoinFlood
|
||||||
|
: public Module
|
||||||
|
, public ServerProtocol::LinkEventListener
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
JoinFlood jf;
|
JoinFlood jf;
|
||||||
|
time_t ignoreuntil;
|
||||||
|
unsigned long splitwait;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
// Stop GCC warnings about the deprecated OnServerSplit event.
|
||||||
|
using ServerProtocol::LinkEventListener::OnServerSplit;
|
||||||
|
|
||||||
ModuleJoinFlood()
|
ModuleJoinFlood()
|
||||||
: jf(this)
|
: ServerProtocol::LinkEventListener(this)
|
||||||
|
, jf(this)
|
||||||
|
, ignoreuntil(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,6 +156,13 @@ class ModuleJoinFlood : public Module
|
|||||||
{
|
{
|
||||||
ConfigTag* tag = ServerInstance->Config->ConfValue("joinflood");
|
ConfigTag* tag = ServerInstance->Config->ConfValue("joinflood");
|
||||||
duration = tag->getDuration("duration", 60, 10, 600);
|
duration = tag->getDuration("duration", 60, 10, 600);
|
||||||
|
splitwait = tag->getDuration("splitwait", 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnServerSplit(const Server* server, bool error) CXX11_OVERRIDE
|
||||||
|
{
|
||||||
|
if (splitwait)
|
||||||
|
ignoreuntil = ServerInstance->Time() + splitwait;
|
||||||
}
|
}
|
||||||
|
|
||||||
ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE
|
ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE
|
||||||
@ -164,7 +182,7 @@ class ModuleJoinFlood : public Module
|
|||||||
void OnUserJoin(Membership* memb, bool sync, bool created, CUList& excepts) CXX11_OVERRIDE
|
void OnUserJoin(Membership* memb, bool sync, bool created, CUList& excepts) CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
/* We arent interested in JOIN events caused by a network burst */
|
/* We arent interested in JOIN events caused by a network burst */
|
||||||
if (sync)
|
if (sync || ignoreuntil > ServerInstance->Time())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
joinfloodsettings *f = jf.ext.get(memb->chan);
|
joinfloodsettings *f = jf.ext.get(memb->chan);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user