]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_services.cpp
Added <options noservices> behaviour for m_chanprotect.so as suggested by Craig
[user/henk/code/inspircd.git] / src / modules / m_services.cpp
1 #include <stdio.h>
2
3 #include "users.h"
4 #include "channels.h"
5 #include "modules.h"
6 #include <string>
7
8
9 /* $ModDesc: Povides support for services +r user/chan modes and more */
10
11 Server *Srv;
12          
13
14 class ModuleServices : public Module
15 {
16  public:
17         ModuleServices()
18         {
19                 Srv = new Server;
20
21                 Srv->AddExtendedMode('r',MT_CHANNEL,false,0,0);
22                 Srv->AddExtendedMode('r',MT_CLIENT,false,0,0);
23         }
24         
25         virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params)
26         {
27                 
28                 if (modechar != 'r') {
29                         return 0;
30                 }
31                 
32                 if (type == MT_CHANNEL)
33                 {
34                         // only a u-lined server may add or remove the +r mode.
35                         if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)))
36                         {
37                                 return 1;
38                         }
39                         else
40                         {
41                                 Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a U-Lined server may modify the +r channel mode");
42                         }
43                 }
44                 else
45                 {
46                         if (!strcmp(user->server,""))
47                         {
48                                 return 1;
49                         }
50                         else
51                         {
52                                 Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a server may modify the +r user mode");
53                         }
54                 }
55
56                 return 0;
57         }
58         
59         virtual ~ModuleServices()
60         {
61                 delete Srv;
62         }
63         
64         virtual Version GetVersion()
65         {
66                 return Version(1,0,0,0);
67         }
68         
69         virtual void OnUserConnect(userrec* user)
70         {
71         }
72
73 };
74
75
76 class ModuleServicesFactory : public ModuleFactory
77 {
78  public:
79         ModuleServicesFactory()
80         {
81         }
82         
83         ~ModuleServicesFactory()
84         {
85         }
86         
87         virtual Module * CreateModule()
88         {
89                 return new ModuleServices;
90         }
91         
92 };
93
94
95 extern "C" void * init_module( void )
96 {
97         return new ModuleServicesFactory;
98 }
99