]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_samode.cpp
(Bigger than it looks, i did this with perl inplace edit) -- commands now take an...
[user/henk/code/inspircd.git] / src / modules / m_samode.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
6  *                       E-mail:
7  *                <brain@chatspike.net>
8  *                <Craig@chatspike.net>
9  *     
10  * Written by Craig Edwards, Craig McLure, and others.
11  * This program is free but copyrighted software; see
12  *            the file COPYING for details.
13  *
14  * ---------------------------------------------------
15  */
16
17 using namespace std;
18
19 /*
20  * SAMODE module for InspIRCd
21  *  Co authored by Brain and w00t
22  *
23  *  Syntax: /SAMODE <#chan/nick> +/-<modes> [parameters for modes]
24  * 
25  */
26
27 /* $ModDesc: Povides more advanced UnrealIRCd SAMODE command */
28
29 /*
30  * ToDo:
31  *   Err... not a lot really.
32  */ 
33
34 #include <stdio.h>
35 #include "users.h"
36 #include "channels.h"
37 #include "modules.h"
38 #include "inspircd.h"
39
40
41 extern InspIRCd* ServerInstance;
42          
43 class cmd_samode : public command_t
44 {
45  public:
46  cmd_samode (InspIRCd* Instance) : command_t(Instance,"SAMODE", 'o', 2)
47         {
48                 this->source = "m_samode.so";
49                 syntax = "<target> <modes> {<mode-parameters>}";
50         }
51
52         void Handle (const char** parameters, int pcnt, userrec *user)
53         {
54                 /*
55                  * Handles an SAMODE request. Notifies all +s users.
56                  */
57                 std::string result;
58                 log(DEBUG,"SAMODE: Being handled");
59                 userrec* n = new userrec(ServerInstance);
60                 n->fd = FD_MAGIC_NUMBER;
61                 ServerInstance->SendMode(parameters,pcnt,n);
62                 delete n;
63                 log(DEBUG,"SAMODE: Modechange handled");
64                 result = std::string(user->nick);
65                 result.append(" used SAMODE");
66                 for (int n = 0; n < pcnt; n++)
67                 {
68                         result.append(" ");
69                         result.append(parameters[n]);
70                 }
71                 ServerInstance->WriteOpers(result);
72         }
73 };
74
75 class ModuleSaMode : public Module
76 {
77         cmd_samode*     mycommand;
78  public:
79         ModuleSaMode(InspIRCd* Me)
80                 : Module::Module(Me)
81         {
82                 
83                 mycommand = new cmd_samode(ServerInstance);
84                 ServerInstance->AddCommand(mycommand);
85         }
86         
87         virtual ~ModuleSaMode()
88         {
89         }
90         
91         virtual Version GetVersion()
92         {
93                 return Version(1,0,2,2,VF_VENDOR);
94         }
95 };
96
97
98 class ModuleSaModeFactory : public ModuleFactory
99 {
100  public:
101         ModuleSaModeFactory()
102         {
103         }
104         
105         ~ModuleSaModeFactory()
106         {
107         }
108         
109         virtual Module * CreateModule(InspIRCd* Me)
110         {
111                 return new ModuleSaMode(Me);
112         }
113         
114 };
115
116
117 extern "C" void * init_module( void )
118 {
119         return new ModuleSaModeFactory;
120 }