public:
/** Constructor for modules.
*/
- CommandModules ( Module* parent) : Command(parent,"MODULES",0,0) { syntax = "[server]"; }
+ CommandModules(Module* parent) : Command(parent,"MODULES",0,0)
+ {
+ Penalty = 4;
+ syntax = "[<servername>]";
+ }
+
/** Handle command.
* @param parameters The parameters to the comamnd
* @param pcnt The number of parameters passed to teh command
/** Handle /MODULES
*/
-CmdResult CommandModules::Handle (const std::vector<std::string>&, User *user)
+CmdResult CommandModules::Handle (const std::vector<std::string>& parameters, User *user)
{
+ // Don't ask remote servers about their modules unless the local user asking is an oper
+ // 2.0 asks anyway, so let's handle that the same way
+ bool for_us = (parameters.empty() || parameters[0] == ServerInstance->Config->ServerName);
+ if ((!for_us) || (!IS_LOCAL(user)))
+ {
+ if (!user->IsOper())
+ {
+ user->WriteNotice("*** You cannot check what modules other servers have loaded.");
+ return CMD_FAILURE;
+ }
+
+ // From an oper and not for us, forward
+ if (!for_us)
+ return CMD_SUCCESS;
+ }
+
const ModuleManager::ModuleMap& mods = ServerInstance->Modules->GetModules();
for (ModuleManager::ModuleMap::const_iterator i = mods.begin(); i != mods.end(); ++i)
Module* m = i->second;
Version V = m->GetVersion();
- if (user->HasPrivPermission("servers/auspex"))
+ if (IS_LOCAL(user) && user->HasPrivPermission("servers/auspex"))
{
std::string flags("SvcC");
int pos = 0;