summaryrefslogtreecommitdiff
path: root/src/modules/m_rline.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_rline.cpp')
-rw-r--r--src/modules/m_rline.cpp106
1 files changed, 58 insertions, 48 deletions
diff --git a/src/modules/m_rline.cpp b/src/modules/m_rline.cpp
index 7397beebd..5036423a1 100644
--- a/src/modules/m_rline.cpp
+++ b/src/modules/m_rline.cpp
@@ -111,75 +111,85 @@ class CoreExport RLineFactory : public XLineFactory
}
};
-/*
- if (pcnt >= 3)
+/** Handle /RLINE
+ * Syntax is same as other lines: RLINE regex_goes_here 1d :reason
+ */
+class CommandRLine : public Command
+{
+ public:
+ CommandRLine (InspIRCd* Instance) : Command(Instance,"DALINFO", 1, 'o')
{
- IdentHostPair ih;
- User* find = ServerInstance->FindNick(parameters[0]);
- if (find)
- {
- ih.first = "*";
- ih.second = find->GetIPString();
- }
- else
- ih = ServerInstance->XLines->IdentSplit(parameters[0]);
-
- if (ServerInstance->HostMatchesEveryone(ih.first+"@"+ih.second,user))
- return CMD_FAILURE;
+ this->source = "m_rline.so";
+ }
- if (!strchr(parameters[0],'@'))
- {
- user->WriteServ("NOTICE %s :*** G-Line must contain a username, e.g. *@%s",user->nick,parameters[0]);
- return CMD_FAILURE;
- }
- else if (strchr(parameters[0],'!'))
+ CmdResult Handle (const char** parameters, int pcnt, User *user)
+ {
+ if (pcnt >= 3)
{
- user->WriteServ("NOTICE %s :*** G-Line cannot contain a nickname!",user->nick);
- return CMD_FAILURE;
- }
+ // Adding - XXX todo make this respect <insane> tag perhaps..
- long duration = ServerInstance->Duration(parameters[1]);
- GLine* gl = new GLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2], ih.first.c_str(), ih.second.c_str());
- if (ServerInstance->XLines->AddLine(gl, user))
- {
- if (!duration)
+ long duration = ServerInstance->Duration(parameters[1]);
+ RLine *r = NULL;
+
+ try
{
- ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent G-line for %s.",user->nick,parameters[0]);
+ r = new RLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2], parameters[0]);
}
- else
+ catch (...)
{
- time_t c_requires_crap = duration + ServerInstance->Time();
- ServerInstance->SNO->WriteToSnoMask('x',"%s added timed G-line for %s, expires on %s",user->nick,parameters[0],
- ServerInstance->TimeString(c_requires_crap).c_str());
+ ; // Do nothing. If we get here, the regex was fucked up, and they already got told it fucked up.
}
- ServerInstance->XLines->ApplyLines();
+ if (r)
+ {
+ if (ServerInstance->XLines->AddLine(r, user))
+ {
+ if (!duration)
+ {
+ ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent R-Line for %s.", user->nick, parameters[0]);
+ }
+ else
+ {
+ time_t c_requires_crap = duration + ServerInstance->Time();
+ ServerInstance->SNO->WriteToSnoMask('x', "%s added timed R-Line for %s, expires on %s", user->nick, parameters[0],
+ ServerInstance->TimeString(c_requires_crap).c_str());
+ }
+
+ ServerInstance->XLines->ApplyLines();
+ }
+ else
+ {
+ delete r;
+ user->WriteServ("NOTICE %s :*** R-Line for %s already exists", user->nick, parameters[0]);
+ }
+ }
}
else
{
- delete gl;
- user->WriteServ("NOTICE %s :*** G-Line for %s already exists",user->nick,parameters[0]);
+ if (ServerInstance->XLines->DelLine(parameters[0],"G",user))
+ {
+ ServerInstance->SNO->WriteToSnoMask('x',"%s Removed G-line on %s.",user->nick,parameters[0]);
+ }
+ else
+ {
+ user->WriteServ("NOTICE %s :*** G-line %s not found in list, try /stats g.",user->nick,parameters[0]);
+ }
}
+ return CMD_SUCCESS;
}
- else
- {
- if (ServerInstance->XLines->DelLine(parameters[0],"G",user))
- {
- ServerInstance->SNO->WriteToSnoMask('x',"%s Removed G-line on %s.",user->nick,parameters[0]);
- }
- else
- {
- user->WriteServ("NOTICE %s :*** G-line %s not found in list, try /stats g.",user->nick,parameters[0]);
- }
- }
-*/
+};
class ModuleRLine : public Module
{
+ private:
+ CommandRLine *r;
public:
ModuleRLine(InspIRCd* Me) : Module(Me)
{
+ // Create a new command
+ r = new CommandRLine(ServerInstance);
+ ServerInstance->AddCommand(r);
}
virtual ~ModuleRLine()