The InspIRCd Project
Home | Developers | Wiki | Forums | Bug Tracker | SVN | Download | Blog | Stats
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

cmd_qline Class Reference

Handle /QLINE. More...

#include <cmd_qline.h>

Inheritance diagram for cmd_qline:

Inheritance graph
[legend]
Collaboration diagram for cmd_qline:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 cmd_qline (InspIRCd *Instance)
 Constructor for qline.
CmdResult Handle (const char **parameters, int pcnt, userrec *user)
 Handle command.

Detailed Description

Handle /QLINE.

These command handlers can be reloaded by the core, and handle basic RFC1459 commands. Commands within modules work the same way, however, they can be fully unloaded, where these may not.

Definition at line 27 of file cmd_qline.h.


Constructor & Destructor Documentation

cmd_qline::cmd_qline InspIRCd Instance  )  [inline]
 

Constructor for qline.

Definition at line 32 of file cmd_qline.h.

References command_t::syntax.

00032 : command_t(Instance,"QLINE",'o',1) { syntax = "<nick> [<duration> :<reason>]"; }


Member Function Documentation

CmdResult cmd_qline::Handle const char **  parameters,
int  pcnt,
userrec user
[virtual]
 

Handle command.

Parameters:
parameters The parameters to the comamnd
pcnt The number of parameters passed to teh command
user The user issuing the command
Returns:
A value from CmdResult to indicate command success or failure.

Implements command_t.

Definition at line 28 of file cmd_qline.cpp.

References XLineManager::add_qline(), XLineManager::apply_lines(), APPLY_PERM_ONLY, APPLY_QLINES, CMD_FAILURE, CMD_SUCCESS, XLineManager::del_qline(), InspIRCd::Duration(), FOREACH_MOD, I_OnAddQLine, I_OnDelQLine, userrec::nick, InspIRCd::NickMatchesEveryone(), command_t::ServerInstance, InspIRCd::SNO, InspIRCd::Time(), InspIRCd::TimeString(), userrec::WriteServ(), SnomaskManager::WriteToSnoMask(), and InspIRCd::XLines.

00029 {
00030         if (pcnt >= 3)
00031         {
00032                 if (ServerInstance->NickMatchesEveryone(parameters[0],user))
00033                         return CMD_FAILURE;
00034 
00035                 if (strchr(parameters[0],'@') || strchr(parameters[0],'!') || strchr(parameters[0],'.'))
00036                 {
00037                         user->WriteServ("NOTICE %s :*** A Q-Line only bans a nick pattern, not a nick!user@host pattern.",user->nick);
00038                         return CMD_FAILURE;
00039                 }
00040 
00041                 long duration = ServerInstance->Duration(parameters[1]);
00042                 if (ServerInstance->XLines->add_qline(duration,user->nick,parameters[2],parameters[0]))
00043                 {
00044                         int to_apply = APPLY_QLINES;
00045                         FOREACH_MOD(I_OnAddQLine,OnAddQLine(duration, user, parameters[2], parameters[0]));
00046                         if (!duration)
00047                         {
00048                                 to_apply |= APPLY_PERM_ONLY;
00049                                 ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent Q-line for %s.",user->nick,parameters[0]);
00050                         }
00051                         else
00052                         {
00053                                 time_t c_requires_crap = duration + ServerInstance->Time();
00054                                 ServerInstance->SNO->WriteToSnoMask('x',"%s added timed Q-line for %s, expires on %s",user->nick,parameters[0],
00055                                           ServerInstance->TimeString(c_requires_crap).c_str());
00056                         }
00057                         ServerInstance->XLines->apply_lines(to_apply);
00058                 }
00059                 else
00060                 {
00061                         user->WriteServ("NOTICE %s :*** Q-Line for %s already exists",user->nick,parameters[0]);
00062                 }
00063         }
00064         else
00065         {
00066                 if (ServerInstance->XLines->del_qline(parameters[0]))
00067                 {
00068                         FOREACH_MOD(I_OnDelQLine,OnDelQLine(user, parameters[0]));
00069                         ServerInstance->SNO->WriteToSnoMask('x',"%s Removed Q-line on %s.",user->nick,parameters[0]);
00070                 }
00071                 else
00072                 {
00073                         user->WriteServ("NOTICE %s :*** Q-Line %s not found in list, try /stats q.",user->nick,parameters[0]);
00074                         return CMD_FAILURE;
00075                 }
00076         }
00077 
00078         return CMD_SUCCESS;
00079 }


The documentation for this class was generated from the following files: