*/
class CommandUserhost : public Command
{
+ UserModeReference hideopermode;
+
public:
/** Constructor for userhost.
*/
- CommandUserhost ( Module* parent) : Command(parent,"USERHOST", 1, 5) {
- syntax = "<nick> {<nick>}";
+ CommandUserhost(Module* parent)
+ : Command(parent,"USERHOST", 1)
+ , hideopermode(parent, "hideoper")
+ {
+ syntax = "<nick> [<nick>]+";
}
/** Handle command.
* @param parameters The parameters to the command
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const std::vector<std::string>& parameters, User *user);
+ CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE;
};
-CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, User *user)
+CmdResult CommandUserhost::Handle(User* user, const Params& parameters)
{
const bool has_privs = user->HasPrivPermission("users/auspex");
- std::string retbuf = "302 " + user->nick + " :";
+ std::string retbuf;
- for (unsigned int i = 0; i < parameters.size(); i++)
+ unsigned int max = parameters.size();
+ if (max > 5)
+ max = 5;
+
+ for (unsigned int i = 0; i < max; i++)
{
User *u = ServerInstance->FindNickOnly(parameters[i]);
if ((u) && (u->registered == REG_ALL))
{
- retbuf = retbuf + u->nick;
+ retbuf += u->nick;
if (u->IsOper())
- retbuf = retbuf + "*";
-
- retbuf = retbuf + "=";
+ {
+ // XXX: +H hidden opers must not be shown as opers
+ if ((u == user) || (has_privs) || (!u->IsModeSet(hideopermode)))
+ retbuf += '*';
+ }
- if (u->IsAway())
- retbuf += "-";
- else
- retbuf += "+";
-
- retbuf = retbuf + u->ident + "@";
-
- retbuf += (has_privs ? u->host : u->dhost);
- retbuf = retbuf + " ";
+ retbuf += '=';
+ retbuf += (u->IsAway() ? '-' : '+');
+ retbuf += u->ident;
+ retbuf += '@';
+ retbuf += u->GetHost(u == user || has_privs);
+ retbuf += ' ';
}
}
- user->WriteServ(retbuf);
+ user->WriteNumeric(RPL_USERHOST, retbuf);
return CMD_SUCCESS;
}
-COMMAND_INIT(CommandUserhost)
+class CoreModUserhost : public Module
+{
+ private:
+ CommandUserhost cmd;
+
+ public:
+ CoreModUserhost()
+ : cmd(this)
+ {
+ }
+
+ Version GetVersion() CXX11_OVERRIDE
+ {
+ return Version("Provides the USERHOST command", VF_CORE | VF_VENDOR);
+ }
+};
+
+MODULE_INIT(CoreModUserhost)