/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2012-2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2008 Pippijn van Steenhoven <pip88nl@gmail.com>
- * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
+ * Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2006-2007 John Brooks <john.brooks@dereferenced.net>
- * Copyright (C) 2005-2006 Craig Edwards <craigedwards@brainbox.cc>
- * Copyright (C) 2006 Oliver Lupton <oliverlupton@gmail.com>
+ * Copyright (C) 2006 Oliver Lupton <om@inspircd.org>
+ * Copyright (C) 2005, 2007, 2010 Craig Edwards <brain@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
#include "inspircd.h"
+#include "modules/whois.h"
+
+enum
+{
+ // From UnrealIRCd.
+ RPL_WHOISSPECIAL = 320
+};
/** Handle /SWHOIS
*/
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>";
+ flags_needed = 'o';
+ syntax = "<nick> :<swhois>";
TRANSLATE2(TR_NICK, TR_TEXT);
}
- CmdResult Handle(const std::vector<std::string> ¶meters, User* user)
+ 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
std::string* swhois = cmd.swhois.get(whois.GetTarget());
if (swhois)
{
- whois.SendLine(320, *swhois);
+ whois.SendLine(RPL_WHOISSPECIAL, *swhois);
}
}
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);
+ return Version("Adds the /SWHOIS command which adds custom lines to a user's WHOIS response.", VF_OPTCOMMON | VF_VENDOR);
}
};