#include "inspircd.h"
+#include "modules/whois.h"
enum
{
class CommandSwhois : public Command
{
public:
+ LocalIntExt operblock;
StringExtItem swhois;
CommandSwhois(Module* Creator)
: Command(Creator, "SWHOIS", 2, 2)
+ , operblock("swhois_operblock", ExtensionItem::EXT_USER, Creator)
, swhois("swhois", ExtensionItem::EXT_USER, Creator)
{
flags_needed = 'o'; syntax = "<nick> :<swhois>";
TRANSLATE2(TR_NICK, TR_TEXT);
}
- CmdResult Handle(const std::vector<std::string>& parameters, User* user) CXX11_OVERRIDE
+ CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
{
User* dest = ServerInstance->FindNick(parameters[0]);
ServerInstance->SNO->WriteGlobalSno('a', "%s used SWHOIS to set %s's extra whois to '%s'", user->nick.c_str(), dest->nick.c_str(), parameters[1].c_str());
}
+ operblock.set(user, 0);
if (parameters[1].empty())
swhois.unset(dest);
else
if (!swhois.length())
return;
+ cmd.operblock.set(user, 1);
cmd.swhois.set(user, swhois);
ServerInstance->PI->SendMetaData(user, "swhois", swhois);
}
+ void OnPostDeoper(User* user) CXX11_OVERRIDE
+ {
+ std::string* swhois = cmd.swhois.get(user);
+ if (!swhois)
+ return;
+
+ if (!cmd.operblock.get(user))
+ return;
+
+ cmd.operblock.set(user, 0);
+ cmd.swhois.unset(user);
+ ServerInstance->PI->SendMetaData(user, "swhois", "");
+ }
+
+ void OnDecodeMetaData(Extensible* target, const std::string& extname, const std::string&) CXX11_OVERRIDE
+ {
+ User* dest = static_cast<User*>(target);
+ if (dest && (extname == "swhois"))
+ cmd.operblock.set(dest, 0);
+ }
+
Version GetVersion() CXX11_OVERRIDE
{
return Version("Provides the SWHOIS command which allows setting of arbitrary WHOIS lines", VF_OPTCOMMON | VF_VENDOR);