]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_nokicks.cpp
Added m_blockcolor, implements unreal-style mode +c for color blocking
[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         
13  public:
14  
15         ModuleNoKicks()
16         {
17                 Srv = new Server;
18                 Srv->AddExtendedMode('Q',MT_CHANNEL,false,0,0);
19         }
20         
21         virtual int OnAccessCheck(userrec* source,userrec* dest,chanrec* channel,int access_type)
22         {
23                 if (access_type == AC_KICK)
24                 {
25                         if (channel->IsCustomModeSet('Q'))
26                         {
27                                 if ((Srv->IsUlined(source->nick)) || (Srv->IsUlined(source->server)) || (!strcmp(source->server,"")))
28                                 {
29                                         // ulines can still kick with +Q in place
30                                         return ACR_ALLOW;
31                                 }
32                                 else
33                                 {
34                                         // nobody else can (not even opers with override, and founders)
35                                         WriteServ(source->fd,"484 %s %s :Can't kick user %s from channel (+Q set)",source->nick, channel->name,dest->nick);
36                                         return ACR_DENY;
37                                 }
38                         }
39                 }
40                 return ACR_DEFAULT;
41         }
42         
43         virtual ~ModuleNoKicks()
44         {
45                 delete Srv;
46         }
47         
48         virtual Version GetVersion()
49         {
50                 return Version(1,0,0,0);
51         }
52 };
53
54
55 class ModuleNoKicksFactory : public ModuleFactory
56 {
57  public:
58         ModuleNoKicksFactory()
59         {
60         }
61         
62         ~ModuleNoKicksFactory()
63         {
64         }
65         
66         virtual Module * CreateModule()
67         {
68                 return new ModuleNoKicks;
69         }
70         
71 };
72
73
74 extern "C" void * init_module( void )
75 {
76         return new ModuleNoKicksFactory;
77 }
78