mirror of
https://github.com/inspircd/inspircd.git
synced 2025-04-01 13:50:04 -04:00
Fixed for new API
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4222 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
7b4b3f5d11
commit
1e25e3d54a
@ -6,6 +6,7 @@
|
|||||||
#include "channels.h"
|
#include "channels.h"
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
#include "helperfuncs.h"
|
#include "helperfuncs.h"
|
||||||
|
#include "inspircd.h"
|
||||||
|
|
||||||
/* $ModDesc: Provides channel mode +J (delay rejoin after kick) */
|
/* $ModDesc: Provides channel mode +J (delay rejoin after kick) */
|
||||||
|
|
||||||
@ -19,9 +20,39 @@ inline int strtoint(const std::string &str)
|
|||||||
|
|
||||||
typedef std::map<userrec*, time_t> delaylist;
|
typedef std::map<userrec*, time_t> delaylist;
|
||||||
|
|
||||||
|
class KickRejoin : public ModeHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KickRejoin() : ModeHandler('J', 1, 0, false, MODETYPE_CHANNEL, false) { }
|
||||||
|
|
||||||
|
ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)
|
||||||
|
{
|
||||||
|
if (!adding)
|
||||||
|
{
|
||||||
|
// Taking the mode off, we need to clean up.
|
||||||
|
delaylist* dl = (delaylist*)channel->GetExt("norejoinusers");
|
||||||
|
|
||||||
|
if (dl)
|
||||||
|
{
|
||||||
|
DELETE(dl);
|
||||||
|
channel->Shrink("norejoinusers");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((!adding) || (atoi(parameter.c_str()) > 0))
|
||||||
|
{
|
||||||
|
return MODEACTION_ALLOW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return MODEACTION_DENY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class ModuleKickNoRejoin : public Module
|
class ModuleKickNoRejoin : public Module
|
||||||
{
|
{
|
||||||
Server *Srv;
|
Server *Srv;
|
||||||
|
KickRejoin* kr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -29,31 +60,8 @@ public:
|
|||||||
: Module::Module(Me)
|
: Module::Module(Me)
|
||||||
{
|
{
|
||||||
Srv = Me;
|
Srv = Me;
|
||||||
|
kr = new KickRejoin();
|
||||||
Srv->AddExtendedMode('J', MT_CHANNEL, false, 1, 0);
|
Srv->AddMode(kr, 'J');
|
||||||
}
|
|
||||||
|
|
||||||
virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms)
|
|
||||||
{
|
|
||||||
if ((modechar == 'J') && (type == MT_CHANNEL))
|
|
||||||
{
|
|
||||||
if (!mode_on)
|
|
||||||
{
|
|
||||||
// Taking the mode off, we need to clean up.
|
|
||||||
chanrec* c = (chanrec*)target;
|
|
||||||
|
|
||||||
delaylist* dl = (delaylist*)c->GetExt("norejoinusers");
|
|
||||||
|
|
||||||
if (dl)
|
|
||||||
{
|
|
||||||
DELETE(dl);
|
|
||||||
c->Shrink("norejoinusers");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Don't allow negative or 0 +J value */
|
|
||||||
return ((!mode_on) || (atoi(params[0].c_str()) > 0));
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname)
|
virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname)
|
||||||
@ -139,7 +147,7 @@ public:
|
|||||||
|
|
||||||
virtual void Implements(char* List)
|
virtual void Implements(char* List)
|
||||||
{
|
{
|
||||||
List[I_OnCleanup] = List[I_On005Numeric] = List[I_OnExtendedMode] = List[I_OnChannelDelete] = List[I_OnUserPreJoin] = List[I_OnUserKick] = 1;
|
List[I_OnCleanup] = List[I_On005Numeric] = List[I_OnChannelDelete] = List[I_OnUserPreJoin] = List[I_OnUserKick] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void On005Numeric(std::string &output)
|
virtual void On005Numeric(std::string &output)
|
||||||
@ -149,6 +157,7 @@ public:
|
|||||||
|
|
||||||
virtual ~ModuleKickNoRejoin()
|
virtual ~ModuleKickNoRejoin()
|
||||||
{
|
{
|
||||||
|
DELETE(kr);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Version GetVersion()
|
virtual Version GetVersion()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user