/* * InspIRCd -- Internet Relay Chat Daemon * * Copyright (C) 2018, 2020 Sadie Powell * Copyright (C) 2012 Robby * Copyright (C) 2009 Robin Burchell * Copyright (C) 2009 Daniel De Graaf * Copyright (C) 2007 Dennis Friis * Copyright (C) 2006, 2010 Craig Edwards * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public * License as published by the Free Software Foundation, version 2. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "inspircd.h" CommandBase::CommandBase(Module* mod, const std::string& cmd, unsigned int minpara, unsigned int maxpara) : ServiceProvider(mod, cmd, SERVICE_COMMAND) , min_params(minpara) , max_params(maxpara) { } void CommandBase::EncodeParameter(std::string& parameter, unsigned int index) { } RouteDescriptor CommandBase::GetRouting(User* user, const Params& parameters) { return ROUTE_LOCALONLY; } Command::Command(Module* mod, const std::string& cmd, unsigned int minpara, unsigned int maxpara) : CommandBase(mod, cmd, minpara, maxpara) { } Command::~Command() { ServerInstance->Parser.RemoveCommand(this); } void Command::RegisterService() { if (!ServerInstance->Parser.AddCommand(this)) throw ModuleException("Command already exists: " + name); } void Command::TellNotEnoughParameters(LocalUser* user, const Params& parameters) { user->WriteNumeric(ERR_NEEDMOREPARAMS, name, "Not enough parameters."); if (ServerInstance->Config->SyntaxHints && user->registered == REG_ALL) for (const std::string& syntaxline : this->syntax) user->WriteNumeric(RPL_SYNTAX, name, syntaxline); } void Command::TellNotRegistered(LocalUser* user, const Params& parameters) { user->WriteNumeric(ERR_NOTREGISTERED, name, "You have not registered."); } SplitCommand::SplitCommand(Module* me, const std::string& cmd, unsigned int minpara, unsigned int maxpara) : Command(me, cmd, minpara, maxpara) { } CmdResult SplitCommand::Handle(User* user, const Params& parameters) { switch (user->usertype) { case User::TYPE_LOCAL: return HandleLocal(static_cast(user), parameters); case User::TYPE_REMOTE: return HandleRemote(static_cast(user), parameters); case User::TYPE_SERVER: return HandleServer(static_cast(user), parameters); } ServerInstance->Logs.Log("COMMAND", LOG_DEFAULT, "Unknown user type %u in command (uuid=%s)!", static_cast(user->usertype), user->uuid.c_str()); return CmdResult::INVALID; } CmdResult SplitCommand::HandleLocal(LocalUser* user, const Params& parameters) { return CmdResult::INVALID; } CmdResult SplitCommand::HandleRemote(RemoteUser* user, const Params& parameters) { return CmdResult::INVALID; } CmdResult SplitCommand::HandleServer(FakeUser* user, const Params& parameters) { return CmdResult::INVALID; }