]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_nonicks.cpp
d465251525d7f5d02efca9b59509e8e2b92fc05d
[user/henk/code/inspircd.git] / src / modules / m_nonicks.cpp
1 #include <stdio.h>
2 #include <string>
3 #include "users.h"
4 #include "channels.h"
5 #include "modules.h"
6
7 /* $ModDesc: Provides support for unreal-style GLOBOPS and umode +g */
8
9 Server *Srv;
10
11 class ModuleNoNickChange : public Module
12 {
13  public:
14         ModuleNoNickChange()
15         {
16                 Srv = new Server;
17                 
18                 Srv->AddExtendedMode('N',MT_CHANNEL,false,0,0);
19         }
20         
21         virtual ~ModuleNoNickChange()
22         {
23                 delete Srv;
24         }
25         
26         virtual Version GetVersion()
27         {
28                 return Version(1,0,0,1);
29         }
30         
31         virtual int OnUserPreNick(userrec* user, std::string newnick)
32         {
33                 if (!strcasecmp(user->server,Srv->GetServerName().c_str()))
34                 {
35                         for (int i =0; i != MAXCHANS; i++)
36                         {
37                                 if (user->chans[i].channel != NULL)
38                                 {
39                                         chanrec* curr = user->chans[i].channel;
40                                         if (curr->IsCustomModeSet('N'))
41                                         {
42                                                 // don't allow the nickchange, theyre on at least one channel with +N set
43                                                 WriteServ(user->fd,"447 %s :Can't change nickname while on %s (+N is set)",user->nick,curr->name);
44                                                 return 1;
45                                         }
46                                 }
47                         }
48                 }
49                 return 0;
50         }
51         
52         virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params)
53         {
54                 // check if this is our mode character...
55                 if ((modechar == 'N') && (type == MT_CHANNEL))
56                 {
57                         return 1;
58                 }
59                 else
60                 {
61                         return 0;
62                 }
63         }
64
65 };
66
67 // stuff down here is the module-factory stuff. For basic modules you can ignore this.
68
69 class ModuleNoNickChangeFactory : public ModuleFactory
70 {
71  public:
72         ModuleNoNickChangeFactory()
73         {
74         }
75         
76         ~ModuleNoNickChangeFactory()
77         {
78         }
79         
80         virtual Module * CreateModule()
81         {
82                 return new ModuleNoNickChange;
83         }
84         
85 };
86
87
88 extern "C" void * init_module( void )
89 {
90         return new ModuleNoNickChangeFactory;
91 }
92