From 454bce0e6bd4a8172f380c9fb2498be9428e3bac Mon Sep 17 00:00:00 2001 From: w00t Date: Sun, 17 Jun 2007 12:32:25 +0000 Subject: m_chgname. How it works: CHGNAME will be routed to user's local server. There, the user's name is changed, and FNAME is sent back across the network so the name change is actually done. d3mon, this means you can stop bugging us now ;p. Feel free to QA this. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7339 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_chgname.cpp | 102 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/modules/m_chgname.cpp (limited to 'src/modules') diff --git a/src/modules/m_chgname.cpp b/src/modules/m_chgname.cpp new file mode 100644 index 000000000..d25e51426 --- /dev/null +++ b/src/modules/m_chgname.cpp @@ -0,0 +1,102 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#include "inspircd.h" +#include "users.h" +#include "modules.h" + +/* $ModDesc: Provides support for the CHGNAME command */ + +/** Handle /CHGNAME + */ +class cmd_chgname : public command_t +{ + public: + cmd_chgname (InspIRCd* Instance) : command_t(Instance,"CHGNAME", 'o', 2) + { + this->source = "m_chgname.so"; + syntax = " "; + } + + CmdResult Handle(const char** parameters, int pcnt, userrec *user) + { + userrec* dest = ServerInstance->FindNick(parameters[0]); + + if (!dest) + { + user->WriteServ("401 %s %s :No such nick/channel", user->nick, parameters[0]); + return CMD_FAILURE; + } + + if (IS_LOCAL(dest)) + { + dest->ChangeName(parameters[1]); + ServerInstance->WriteOpers("%s used CHGNAME to change %s's real name to '%s'", user->nick, dest->nick, dest->fullname); + return CMD_LOCALONLY; /* name change routed by FNAME in spanningtree now */ + } + + /* route it! */ + return CMD_SUCCESS; + } +}; + + +class ModuleChgName : public Module +{ + cmd_chgname* mycommand; + + +public: + ModuleChgName(InspIRCd* Me) : Module(Me) + { + mycommand = new cmd_chgname(ServerInstance); + ServerInstance->AddCommand(mycommand); + } + + virtual ~ModuleChgName() + { + } + + virtual Version GetVersion() + { + return Version(1,1,0,0,VF_VENDOR,API_VERSION); + } + +}; + +// stuff down here is the module-factory stuff. For basic modules you can ignore this. + +class ModuleChgNameFactory : public ModuleFactory +{ + public: + ModuleChgNameFactory() + { + } + + ~ModuleChgNameFactory() + { + } + + virtual Module * CreateModule(InspIRCd* Me) + { + return new ModuleChgName(Me); + } + +}; + + +extern "C" DllExport void * init_module( void ) +{ + return new ModuleChgNameFactory; +} + -- cgit v1.2.3