* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2008 InspIRCd Development Team
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
*/
#include "inspircd.h"
-#include "users.h"
-#include "channels.h"
-#include "modules.h"
/* $ModDesc: Provides channel mode +f (message flood protection) */
int secs;
int lines;
time_t reset;
- std::map<userrec*,int> counters;
+ std::map<User*,int> counters;
floodsettings() : ban(0), secs(0), lines(0) {};
floodsettings(bool a, int b, int c) : ban(a), secs(b), lines(c)
reset = time(NULL) + secs;
};
- void addmessage(userrec* who)
+ void addmessage(User* who)
{
- std::map<userrec*,int>::iterator iter = counters.find(who);
+ std::map<User*,int>::iterator iter = counters.find(who);
if (iter != counters.end())
{
iter->second++;
}
}
- bool shouldkick(userrec* who)
+ bool shouldkick(User* who)
{
- std::map<userrec*,int>::iterator iter = counters.find(who);
+ std::map<User*,int>::iterator iter = counters.find(who);
if (iter != counters.end())
{
return (iter->second >= this->lines);
else return false;
}
- void clear(userrec* who)
+ void clear(User* who)
{
- std::map<userrec*,int>::iterator iter = counters.find(who);
+ std::map<User*,int>::iterator iter = counters.find(who);
if (iter != counters.end())
{
counters.erase(iter);
public:
MsgFlood(InspIRCd* Instance) : ModeHandler(Instance, 'f', 1, 0, false, MODETYPE_CHANNEL, false) { }
- ModePair ModeSet(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter)
+ ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string ¶meter)
{
floodsettings* x;
if (channel->GetExt("flood",x))
return std::make_pair(false, parameter);
}
- bool CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, chanrec* channel)
+ bool CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, Channel* channel)
{
/* When TS is equal, the alphabetically later one wins */
return (their_param < our_param);
}
- ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)
+ ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)
{
floodsettings *f;
{
if (channel->GetExt("flood", f))
{
- DELETE(f);
+ delete f;
channel->Shrink("flood");
channel->SetMode('f', false);
return MODEACTION_ALLOW;
{
mf = new MsgFlood(ServerInstance);
- if (!ServerInstance->AddMode(mf, 'f'))
+ if (!ServerInstance->Modes->AddMode(mf))
throw ModuleException("Could not add new modes!");
+ Implementation eventlist[] = { I_OnChannelDelete, I_OnUserPreNotice, I_OnUserPreMessage };
+ ServerInstance->Modules->Attach(eventlist, this, 3);
}
- int ProcessMessages(userrec* user,chanrec* dest, const std::string &text)
+ int ProcessMessages(User* user,Channel* dest, const std::string &text)
{
if (!IS_LOCAL(user) || CHANOPS_EXEMPT(ServerInstance, 'f') && dest->GetStatus(user) == STATUS_OP)
{
return 0;
}
- virtual int OnUserPreMessage(userrec *user, void *dest, int target_type, std::string &text, char status, CUList &exempt_list)
+ virtual int OnUserPreMessage(User *user, void *dest, int target_type, std::string &text, char status, CUList &exempt_list)
{
if (target_type == TYPE_CHANNEL)
- return ProcessMessages(user,(chanrec*)dest,text);
+ return ProcessMessages(user,(Channel*)dest,text);
return 0;
}
- virtual int OnUserPreNotice(userrec *user, void *dest, int target_type, std::string &text, char status, CUList &exempt_list)
+ virtual int OnUserPreNotice(User *user, void *dest, int target_type, std::string &text, char status, CUList &exempt_list)
{
if (target_type == TYPE_CHANNEL)
- return ProcessMessages(user,(chanrec*)dest,text);
+ return ProcessMessages(user,(Channel*)dest,text);
return 0;
}
- void OnChannelDelete(chanrec* chan)
+ void OnChannelDelete(Channel* chan)
{
floodsettings* f;
if (chan->GetExt("flood", f))
{
- DELETE(f);
+ delete f;
chan->Shrink("flood");
}
}
- void Implements(char* List)
- {
- List[I_OnChannelDelete] = List[I_OnUserPreNotice] = List[I_OnUserPreMessage] = 1;
- }
virtual ~ModuleMsgFlood()
{
ServerInstance->Modes->DelMode(mf);
- DELETE(mf);
+ delete mf;
}
virtual Version GetVersion()