]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_nokicks.cpp
Added m_nokicks and chanmode +Q
[user/henk/code/inspircd.git] / src / modules / m_nokicks.cpp
1 #include <stdio.h>
2
3 #include "users.h"
4 #include "channels.h"
5 #include "modules.h"
6
7 /* $ModDesc: Provides support for unreal-style channel mode +Q */
8
9 class ModuleNoKicks : public Module
10 {
11         Server *Srv;
12         bool NoisyNoKicks;
13         ConfigReader *Conf;
14         
15  public:
16  
17         ModuleNoKicks()
18         {
19                 Srv = new Server;
20                 Srv->AddExtendedMode('Q',MT_CHANNEL,false,0,0);
21         }
22         
23         virtual int OnAccessCheck(userrec* source,userrec* dest,chanrec* channel,int access_type)
24         {
25                 if (access_type == AC_KICK)
26                 {
27                         if (channel->IsCustomModeSet('Q'))
28                         {
29                                 if ((Srv->IsUlined(source->nick)) || (Srv->IsUlined(source->server)) || (!strcmp(source->server,"")))
30                                 {
31                                         // ulines can still kick with +Q in place
32                                         return ACR_ALLOW;
33                                 }
34                                 else
35                                 {
36                                         // nobody else can (not even opers with override, and founders)
37                                         return ACR_DENY;
38                                 }
39                         }
40                 }
41                 return ACR_DEFAULT;
42         }
43         
44         virtual ~ModuleNoKicks()
45         {
46                 delete Srv;
47         }
48         
49         virtual Version GetVersion()
50         {
51                 return Version(1,0,0,0);
52         }
53 };
54
55
56 class ModuleNoKicksFactory : public ModuleFactory
57 {
58  public:
59         ModuleNoKicksFactory()
60         {
61         }
62         
63         ~ModuleNoKicksFactory()
64         {
65         }
66         
67         virtual Module * CreateModule()
68         {
69                 return new ModuleNoKicks;
70         }
71         
72 };
73
74
75 extern "C" void * init_module( void )
76 {
77         return new ModuleNoKicksFactory;
78 }
79