/*********************************************** * Copyright 2006-2007 Bracco Jordan * Copyright 2006-2007 irrealia.org ***********************************************/ #include "users.h" #include "channels.h" #include "modules.h" #include "inspircd.h" #include "wildcard.h" /* $ModDesc: Provides the /tracea, an advanced /trace command. */ /** Handle /TRACEA */ class cmd_tracea : public command_t { public: cmd_tracea (InspIRCd* Instance) : command_t(Instance,"TRACEA", 'o', 0) { this->source = "m_tracea.so"; syntax = ""; } CmdResult Handle (const char** parameters, int pcnt, userrec *user) { std::string checkstr; std::string chliststr; checkstr = "205 " + std::string(user->nick) + " :TRACEA"; ServerInstance->WriteOpers("*** Oper %s used TRACEA command to view all users on the network.",user->nick); user->WriteServ(checkstr + " START "); for (user_hash::iterator i = ServerInstance->clientlist.begin(); i != ServerInstance->clientlist.end(); i++) { if (i->second) { if (ServerInstance->IsNick(i->second->nick)) { if (*i->second->oper) { /* NICK (REALNAME) @ HOST (REALHOST) (Server) */ user->WriteServ("205 %s :Oper 0 %s (%s) %s (%s) (Connected on: %s)",user->nick,i->second->nick,i->second->fullname,i->second->GetFullHost(),i->second->host,i->second->server); } else { user->WriteServ("204 %s :User 0 %s (%s) %s (%s) (Connected on: %s)",user->nick,i->second->nick,i->second->fullname,i->second->GetFullHost(),i->second->host,i->second->server); } } else { user->WriteServ("203 %s :???? 0 %s (%s) %s (%s) (Connected on: %s)",user->nick,i->second->nick,i->second->fullname,i->second->GetFullHost(),i->second->host,i->second->server); } } } user->WriteServ(checkstr + " END "); return CMD_SUCCESS; } }; class ModuleTracea : public Module { private: cmd_tracea *mycommand; public: ModuleTracea(InspIRCd* Me) : Module::Module(Me) { mycommand = new cmd_tracea(ServerInstance); ServerInstance->AddCommand(mycommand); } virtual ~ModuleTracea() { } virtual Version GetVersion() { return Version(1, 1, 0, 0, 0, API_VERSION); } void Implements(char* List) { /* we don't hook anything, nothing required */ } }; class ModuleTraceaFactory : public ModuleFactory { public: ModuleTraceaFactory() { } ~ModuleTraceaFactory() { } virtual Module * CreateModule(InspIRCd* Me) { return new ModuleTracea(Me); } }; extern "C" void * init_module( void ) { return new ModuleTraceaFactory; }