]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_globalload.cpp
Change allocation of commands/modes
[user/henk/code/inspircd.git] / src / modules / m_globalload.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
6  * See: http://wiki.inspircd.org/Credits
7  *
8  * This program is free but copyrighted software; see
9  *            the file COPYING for details.
10  *
11  * ---------------------------------------------------
12  */
13
14 /* $ModDesc: Allows global loading of a module. */
15
16 #include "inspircd.h"
17
18 /** Handle /GLOADMODULE
19  */
20 class CommandGloadmodule : public Command
21 {
22  public:
23         CommandGloadmodule (InspIRCd* Instance) : Command(Instance,"GLOADMODULE", "o", 1)
24         {
25                 this->source = "m_globalload.so";
26                 syntax = "<modulename> [servermask]";
27                 TRANSLATE3(TR_TEXT, TR_TEXT, TR_END);
28         }
29
30         CmdResult Handle (const std::vector<std::string> &parameters, User *user)
31         {
32                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
33
34                 if (InspIRCd::Match(ServerInstance->Config->ServerName, servername))
35                 {
36                         if (ServerInstance->Modules->Load(parameters[0].c_str()))
37                         {
38                                 ServerInstance->SNO->WriteToSnoMask('a', "NEW MODULE '%s' GLOBALLY LOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
39                                 user->WriteNumeric(975, "%s %s :Module successfully loaded.",user->nick.c_str(), parameters[0].c_str());
40                         }
41                         else
42                         {
43                                 user->WriteNumeric(974, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
44                         }
45                 }
46                 else
47                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL LOAD BY '%s' (not loaded here)",parameters[0].c_str(), user->nick.c_str());
48
49                 return CMD_SUCCESS;
50         }
51 };
52
53 /** Handle /GUNLOADMODULE
54  */
55 class CommandGunloadmodule : public Command
56 {
57  public:
58         CommandGunloadmodule (InspIRCd* Instance) : Command(Instance,"GUNLOADMODULE", "o", 1)
59         {
60                 this->source = "m_globalload.so";
61                 syntax = "<modulename> [servermask]";
62         }
63
64         CmdResult Handle (const std::vector<std::string> &parameters, User *user)
65         {
66                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
67
68                 if (InspIRCd::Match(ServerInstance->Config->ServerName, servername))
69                 {
70                         if (ServerInstance->Modules->Unload(parameters[0].c_str()))
71                         {
72                                 ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBALLY UNLOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
73                                 user->WriteNumeric(973, "%s %s :Module successfully unloaded.",user->nick.c_str(), parameters[0].c_str());
74                         }
75                         else
76                         {
77                                 user->WriteNumeric(972, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
78                         }
79                 }
80                 else
81                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL UNLOAD BY '%s' (not unloaded here)",parameters[0].c_str(), user->nick.c_str());
82
83                 return CMD_SUCCESS;
84         }
85 };
86
87 /** Handle /GRELOADMODULE
88  */
89 class CommandGreloadmodule : public Command
90 {
91  public:
92         CommandGreloadmodule (InspIRCd* Instance) : Command(Instance, "GRELOADMODULE", "o", 1)
93         {
94                 this->source = "m_globalload.so";
95                 syntax = "<modulename> [servermask]";
96         }
97
98         CmdResult Handle(const std::vector<std::string> &parameters, User *user)
99         {
100                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
101
102                 if (InspIRCd::Match(ServerInstance->Config->ServerName, servername))
103                 {
104                         bool ok = true;
105                         if (!ServerInstance->Modules->Unload(parameters[0].c_str()))
106                         {
107                                 ok = false;
108                                 user->WriteNumeric(972, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
109                         }
110                         if (!ServerInstance->Modules->Load(parameters[0].c_str()))
111                         {
112                                 ok = false;
113                                 user->WriteNumeric(974, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
114                         }
115                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBALLY RELOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
116                         if (ok)
117                                 user->WriteNumeric(975, "%s %s :Module successfully loaded.",user->nick.c_str(), parameters[0].c_str());
118                 }
119                 else
120                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL RELOAD BY '%s' (not reloaded here)",parameters[0].c_str(), user->nick.c_str());
121
122                 return CMD_SUCCESS;
123         }
124 };
125
126 class ModuleGlobalLoad : public Module
127 {
128         CommandGloadmodule cmd1;
129         CommandGunloadmodule cmd2;
130         CommandGreloadmodule cmd3;
131
132  public:
133         ModuleGlobalLoad(InspIRCd* Me)
134                 : Module(Me), cmd1(Me), cmd2(Me), cmd3(Me)
135         {
136                 ServerInstance->AddCommand(&cmd1);
137                 ServerInstance->AddCommand(&cmd2);
138                 ServerInstance->AddCommand(&cmd3);
139         }
140
141         virtual ~ModuleGlobalLoad()
142         {
143         }
144
145         virtual Version GetVersion()
146         {
147                 return Version("$Id$", VF_COMMON | VF_VENDOR, API_VERSION);
148         }
149 };
150
151 MODULE_INIT(ModuleGlobalLoad)
152