]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_samode.cpp
3e6c256a0a33727f97163324f1e3e7ca760c5a14
[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 static Server *Srv;
41          
42 class cmd_samode : public command_t
43 {
44  public:
45         cmd_samode () : command_t("SAMODE", 'o', 2)
46         {
47                 this->source = "m_samode.so";
48                 syntax = "<target> <modes> {<mode-parameters>}";
49         }
50
51         void Handle (const char** parameters, int pcnt, userrec *user)
52         {
53                 /*
54                  * Handles an SAMODE request. Notifies all +s users.
55                  */
56                 std::string result;
57                 Srv->Log(DEBUG,"SAMODE: Being handled");
58                 userrec* n = new userrec();
59                 n->fd = FD_MAGIC_NUMBER;
60                 Srv->SendMode(parameters,pcnt,n);
61                 delete n;
62                 Srv->Log(DEBUG,"SAMODE: Modechange handled");
63                 result = std::string(user->nick);
64                 result.append(" used SAMODE");
65                 for (int n = 0; n < pcnt; n++)
66                 {
67                         result.append(" ");
68                         result.append(parameters[n]);
69                 }
70                 Srv->SendOpers(result);
71         }
72 };
73
74 class ModuleSaMode : public Module
75 {
76         cmd_samode*     mycommand;
77  public:
78         ModuleSaMode(Server* Me)
79                 : Module::Module(Me)
80         {
81                 Srv = Me;
82                 mycommand = new cmd_samode();
83                 Srv->AddCommand(mycommand);
84         }
85         
86         virtual ~ModuleSaMode()
87         {
88         }
89         
90         virtual Version GetVersion()
91         {
92                 return Version(1,0,2,2,VF_VENDOR);
93         }
94 };
95
96
97 class ModuleSaModeFactory : public ModuleFactory
98 {
99  public:
100         ModuleSaModeFactory()
101         {
102         }
103         
104         ~ModuleSaModeFactory()
105         {
106         }
107         
108         virtual Module * CreateModule(Server* Me)
109         {
110                 return new ModuleSaMode(Me);
111         }
112         
113 };
114
115
116 extern "C" void * init_module( void )
117 {
118         return new ModuleSaModeFactory;
119 }