]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_chghost.cpp
Decide that it wasn't quite appropriate :(
[user/henk/code/inspircd.git] / src / modules / m_chghost.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
6  *                       E-mail:
7  *                <brain@chatspike.net>
8  *                <Craig@chatspike.net>
9  *     
10  * Written by Craig Edwards, Craig McLure, and others.
11  * This program is free but copyrighted software; see
12  *            the file COPYING for details.
13  *
14  * ---------------------------------------------------
15  */
16
17 using namespace std;
18
19 #include <stdio.h>
20 #include <string>
21 #include "users.h"
22 #include "channels.h"
23 #include "modules.h"
24 #include "helperfuncs.h"
25
26 /* $ModDesc: Provides support for the CHGHOST command */
27
28 Server *Srv;
29
30
31 class cmd_chghost : public command_t
32 {
33  public:
34          cmd_chghost () : command_t("CHGHOST",'o',2)
35          {
36                  this->source = "m_chghost.so";
37          }
38          
39         void Handle(char **parameters, int pcnt, userrec *user)
40         {
41                 if (strlen(parameters[1]) > 64)
42                 {
43                         WriteServ(user->fd,"NOTICE %s :*** CHGHOST: Host too long",user->nick);
44                         return;
45                 }
46                 for (unsigned int x = 0; x < strlen(parameters[1]); x++)
47                 {
48                         if (((tolower(parameters[1][x]) < 'a') || (tolower(parameters[1][x]) > 'z')) && (parameters[1][x] != '.'))
49                         {
50                                 if (((parameters[1][x] < '0') || (parameters[1][x]> '9')) && (parameters[1][x] != '-'))
51                                 {
52                                         Srv->SendTo(NULL,user,"NOTICE "+std::string(user->nick)+" :*** Invalid characters in hostname");
53                                         return;
54                                 }
55                         }
56                 }       
57                 userrec* dest = Srv->FindNick(std::string(parameters[0]));
58                 if (dest)
59                 {
60                         Srv->ChangeHost(dest,parameters[1]);
61                         if (!Srv->IsUlined(user->server))
62                         {
63                                 // fix by brain - ulines set hosts silently
64                                 Srv->SendOpers(std::string(user->nick)+" used CHGHOST to make the displayed host of "+std::string(dest->nick)+" become "+std::string(parameters[1]));
65                         }
66                 }
67         }
68 };
69
70
71 class ModuleChgHost : public Module
72 {
73         cmd_chghost* mycommand;
74  public:
75         ModuleChgHost(Server* Me)
76                 : Module::Module(Me)
77         {
78                 Srv = Me;
79                 mycommand = new cmd_chghost();
80                 Srv->AddCommand(mycommand);
81         }
82
83         void Implements(char* List)
84         {
85         }
86         
87         virtual ~ModuleChgHost()
88         {
89         }
90         
91         virtual Version GetVersion()
92         {
93                 return Version(1,2,0,1,VF_VENDOR);
94         }
95         
96 };
97
98 // stuff down here is the module-factory stuff. For basic modules you can ignore this.
99
100 class ModuleChgHostFactory : public ModuleFactory
101 {
102  public:
103         ModuleChgHostFactory()
104         {
105         }
106         
107         ~ModuleChgHostFactory()
108         {
109         }
110         
111         virtual Module * CreateModule(Server* Me)
112         {
113                 return new ModuleChgHost(Me);
114         }
115         
116 };
117
118
119 extern "C" void * init_module( void )
120 {
121         return new ModuleChgHostFactory;
122 }
123