]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_nonicks.cpp
6328e5ee2b2a8ba4b8184b00091745057258bbea
[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')) && (user->chans[i].uc_modes < STATUS_HOP))
41                                         {
42                                                 // don't allow the nickchange, theyre on at least one channel with +N set
43                                                 // and theyre not a (H)OP on the channel
44                                                 WriteServ(user->fd,"447 %s :Can't change nickname while on %s (+N is set)",user->nick,curr->name);
45                                                 return 1;
46                                         }
47                                 }
48                         }
49                 }
50                 return 0;
51         }
52         
53         virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params)
54         {
55                 // check if this is our mode character...
56                 if ((modechar == 'N') && (type == MT_CHANNEL))
57                 {
58                         return 1;
59                 }
60                 else
61                 {
62                         return 0;
63                 }
64         }
65
66 };
67
68 // stuff down here is the module-factory stuff. For basic modules you can ignore this.
69
70 class ModuleNoNickChangeFactory : public ModuleFactory
71 {
72  public:
73         ModuleNoNickChangeFactory()
74         {
75         }
76         
77         ~ModuleNoNickChangeFactory()
78         {
79         }
80         
81         virtual Module * CreateModule()
82         {
83                 return new ModuleNoNickChange;
84         }
85         
86 };
87
88
89 extern "C" void * init_module( void )
90 {
91         return new ModuleNoNickChangeFactory;
92 }
93