1 /* +------------------------------------+
\r * | Inspire Internet Relay Chat Daemon |
\r * +------------------------------------+
\r *
\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team
\r * See: http://www.inspircd.org/wiki/index.php/Credits
\r *
\r * This program is free but copyrighted software; see
\r * the file COPYING for details.
\r *
\r * ---------------------------------------------------
\r */
\r\r#include "inspircd.h"
\r#include "users.h"
\r#include "channels.h"
\r#include "modules.h"
\r\r/* $ModDesc: Provides the /TAXONOMY command, used to view all metadata attached to a user */
\r\r/** Handle /WOOT
\r */
\rclass cmd_taxonomy : public command_t
\r{
\r Module* Creator;
\r bool& claimed;
\r public:
\r /* Command 'taxonomy', takes no parameters and needs no special modes */
\r cmd_taxonomy (InspIRCd* Instance, Module* maker, bool &claim) : command_t(Instance,"TAXONOMY", 'o', 1), Creator(maker), claimed(claim)
\r {
\r this->source = "m_taxonomy.so";
\r }
\r\r CmdResult Handle (const char** parameters, int pcnt, userrec *user)
\r {
\r userrec* dest = ServerInstance->FindNick(parameters[0]);
\r if (dest)
\r {
\r std::deque<std::string> list;
\r list.clear();
\r user->GetExtList(list);
\r user->WriteServ("304 " + std::string(user->nick) + ":TAXONOMY ITEMS " + std::string(dest->nick) + " " +ConvToStr(list.size()));
\r for (unsigned int j = 0; j < list.size(); j++)
\r {
\r claimed = false;
\r FOREACH_MOD(I_OnSyncUserMetaData, OnSyncUserMetaData(user, Creator, dest, list[j], true));
\r if (!claimed)
\r {
\r user->WriteServ("304 " + std::string(user->nick) + ":TAXONOMY METADATA " + list[j] + " = <unknown>");
\r }
\r }
\r user->WriteServ("304 " + std::string(user->nick) + ":TAXONOMY END");
\r }
\r return CMD_FAILURE;
\r }
\r};
\r\rclass ModuleTaxonomy : public Module
\r{
\r cmd_taxonomy* newcommand;
\r bool claimed;
\r public:
\r ModuleTaxonomy(InspIRCd* Me)
\r : Module(Me)
\r {
\r \r // Create a new command
\r newcommand = new cmd_taxonomy(ServerInstance, this, claimed);
\r ServerInstance->AddCommand(newcommand);
\r }
\r\r void Implements(char* List)
\r {
\r List[I_ProtoSendMetaData] = 1;
\r }
\r\r void ProtoSendMetaData(void* opaque, int target_type, void* target, const std::string &extname, const std::string &extdata)
\r {
\r if (target_type == TYPE_USER)
\r {
\r userrec* spool = (userrec*)opaque;
\r std::string taxstr = "304 " + std::string(spool->nick) + ":TAXONOMY METADATA "+extname+" = "+extdata;
\r spool->WriteServ(taxstr);
\r claimed = true;
\r }
\r }
\r\r virtual ~ModuleTaxonomy()
\r {
\r }
\r\r virtual Version GetVersion()
\r {
\r return Version(1, 1, 0, 0, VF_VENDOR, API_VERSION);
\r }
\r};
\r\rMODULE_INIT(ModuleTaxonomy)
\r\r