diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-06-17 12:32:25 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-06-17 12:32:25 +0000 |
commit | 454bce0e6bd4a8172f380c9fb2498be9428e3bac (patch) | |
tree | 34c6d6b450ee0b7dc2e0b661e54d8dd311d2b251 /src | |
parent | dcbee32889e3b4e8c56c26dfa728d40f95c213f7 (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_chgname.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
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 = "<nick> <newname>"; + } + + 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; +} + |