1 /* +------------------------------------+
2 * | Inspire Internet Relay Chat Daemon |
3 * +------------------------------------+
5 * InspIRCd: (C) 2002-2007 InspIRCd Development Team
6 * See: http://www.inspircd.org/wiki/index.php/Credits
8 * This program is free but copyrighted software; see
9 * the file COPYING for details.
11 * ---------------------------------------------------
16 #include "commands/cmd_ison.h"
18 extern "C" DllExport command_t* init_command(InspIRCd* Instance)
20 return new cmd_ison(Instance);
25 CmdResult cmd_ison::Handle (const char** parameters, int pcnt, userrec *user)
27 std::map<userrec*,userrec*> ison_already;
29 std::string reply = std::string("303 ") + user->nick + " :";
31 for (int i = 0; i < pcnt; i++)
33 u = ServerInstance->FindNick(parameters[i]);
34 if (ison_already.find(u) != ison_already.end())
39 reply.append(u->nick).append(" ");
40 if (reply.length() > 450)
42 user->WriteServ(reply);
43 reply = std::string("303 ") + user->nick + " :";
49 if ((i == pcnt-1) && (strchr(parameters[i],' ')))
51 /* Its a space seperated list of nicks (RFC1459 says to support this)
53 irc::spacesepstream list(parameters[i]);
54 std::string item("*");
55 while (((item = list.GetToken()) != ""))
57 u = ServerInstance->FindNick(item);
58 if (ison_already.find(u) != ison_already.end())
63 if (u->Visibility && !u->Visibility->VisibleTo(user))
66 reply.append(u->nick).append(" ");
67 if (reply.length() > 450)
69 user->WriteServ(reply);
70 reply = std::string("303 ") + user->nick + " :";
76 /* There will only be one of these, we can bail after. */
82 user->WriteServ(reply);