X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_timedbans.cpp;h=3783590ccd135235f0a57ef6252854e5dd2d7306;hb=2e52ff280dca14d1598b84fab7a8c2e93fa30910;hp=08da114a694999056c6c53d9f3d98382e3ee8aed;hpb=29fd51d6f76a639fbd909e7bf7489eb92e9f90db;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_timedbans.cpp b/src/modules/m_timedbans.cpp index 08da114a6..3783590cc 100644 --- a/src/modules/m_timedbans.cpp +++ b/src/modules/m_timedbans.cpp @@ -23,14 +23,13 @@ using namespace std; #include "users.h" #include "channels.h" #include "modules.h" - #include "hashcomp.h" #include "configreader.h" #include "inspircd.h" - - +/** Holds a timed ban + */ class TimedBan : public classbase { public: @@ -42,6 +41,8 @@ class TimedBan : public classbase typedef std::vector timedbans; timedbans TimedBanList; +/** Handle /TBAN + */ class cmd_tban : public command_t { public: @@ -51,7 +52,7 @@ class cmd_tban : public command_t syntax = " "; } - void Handle (const char** parameters, int pcnt, userrec *user) + CmdResult Handle (const char** parameters, int pcnt, userrec *user) { chanrec* channel = ServerInstance->FindChan(parameters[0]); if (channel) @@ -62,12 +63,15 @@ class cmd_tban : public command_t if (!ServerInstance->IsValidMask(parameters[2])) { user->WriteServ("NOTICE "+std::string(user->nick)+" :Invalid ban mask"); - return; + return CMD_FAILURE; } - if (channel->IsBanned(user)) + for (BanList::iterator i = channel->bans.begin(); i != channel->bans.end(); i++) { - user->WriteServ("NOTICE "+std::string(user->nick)+" :The ban "+std::string(parameters[2])+" is already on the banlist of "+std::string(parameters[0])); - return; + if (!strcasecmp(i->data,parameters[2])) + { + user->WriteServ("NOTICE "+std::string(user->nick)+" :The ban "+std::string(parameters[2])+" is already on the banlist of "+std::string(parameters[0])); + return CMD_FAILURE; + } } TimedBan T; std::string channelname = parameters[0]; @@ -75,7 +79,7 @@ class cmd_tban : public command_t if (ServerInstance->Duration(parameters[1]) < 1) { user->WriteServ("NOTICE "+std::string(user->nick)+" :Invalid ban time"); - return; + return CMD_FAILURE; } char duration[MAXBUF]; snprintf(duration,MAXBUF,"%lu",ServerInstance->Duration(parameters[1])); @@ -99,13 +103,15 @@ class cmd_tban : public command_t T.expire = expire; TimedBanList.push_back(T); channel->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :%s added a timed ban on %s lasting for %s seconds.", channel->name, user->nick, mask.c_str(), duration); + return CMD_SUCCESS; } - return; + return CMD_FAILURE; } else user->WriteServ("482 %s %s :You must be at least a half-operator to change modes on this channel",user->nick, channel->name); - return; + return CMD_FAILURE; } user->WriteServ("401 %s %s :No such channel",user->nick, parameters[0]); + return CMD_FAILURE; } }; @@ -199,7 +205,7 @@ class ModuleTimedBans : public Module virtual Version GetVersion() { - return Version(1,0,0,0,VF_VENDOR); + return Version(1,1,0,0,VF_VENDOR,API_VERSION); } };