* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2008 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ * InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
* the file COPYING for details.
/** Handle /AWAY
*/
-CmdResult CommandAway::Handle (const char** parameters, int pcnt, User *user)
+CmdResult CommandAway::Handle (const std::vector<std::string>& parameters, User *user)
{
- if ((pcnt) && (*parameters[0]))
+ int MOD_RESULT = 0;
+
+ if ((parameters.size()) && (!parameters[0].empty()))
{
- strlcpy(user->awaymsg,parameters[0],MAXAWAY);
- user->WriteServ("306 %s :You have been marked as being away",user->nick);
- FOREACH_MOD(I_OnSetAway,OnSetAway(user));
+ FOREACH_RESULT(I_OnSetAway, OnSetAway(user, parameters[0]));
+
+ if (MOD_RESULT != 0 && IS_LOCAL(user))
+ return CMD_FAILURE;
+
+ user->awaytime = ServerInstance->Time();
+ user->awaymsg.assign(parameters[0], 0, ServerInstance->Config->Limits.MaxAway);
+
+ user->WriteNumeric(RPL_NOWAWAY, "%s :You have been marked as being away",user->nick.c_str());
}
else
{
- *user->awaymsg = 0;
- user->WriteServ("305 %s :You are no longer marked as being away",user->nick);
- FOREACH_MOD(I_OnCancelAway,OnCancelAway(user));
+ FOREACH_RESULT(I_OnSetAway, OnSetAway(user, ""));
+
+ if (MOD_RESULT != 0 && IS_LOCAL(user))
+ return CMD_FAILURE;
+
+ user->awaymsg.clear();
+ user->WriteNumeric(RPL_UNAWAY, "%s :You are no longer marked as being away",user->nick.c_str());
}
+
return CMD_SUCCESS;
}