summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2007-06-17 12:32:25 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2007-06-17 12:32:25 +0000
commit454bce0e6bd4a8172f380c9fb2498be9428e3bac (patch)
tree34c6d6b450ee0b7dc2e0b661e54d8dd311d2b251
parentdcbee32889e3b4e8c56c26dfa728d40f95c213f7 (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
-rw-r--r--src/modules/m_chgname.cpp102
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;
+}
+