X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_channel%2Fcmd_invite.cpp;h=c26318337597d389f9491697904ceb7d800a4b31;hb=f400d5f394a258dee58fb56420acd65e22503761;hp=e9ce03a0c96138e393fa214a14058ccb39764e17;hpb=35b70631f0532a5828b04a8e0c02092a285f331a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_channel/cmd_invite.cpp b/src/coremods/core_channel/cmd_invite.cpp index e9ce03a0c..c26318337 100644 --- a/src/coremods/core_channel/cmd_invite.cpp +++ b/src/coremods/core_channel/cmd_invite.cpp @@ -34,7 +34,7 @@ CommandInvite::CommandInvite(Module* parent, Invite::APIImpl& invapiimpl) /** Handle /INVITE */ -CmdResult CommandInvite::Handle (const std::vector& parameters, User *user) +CmdResult CommandInvite::Handle(User* user, const Params& parameters) { ModResult MOD_RESULT; @@ -51,9 +51,17 @@ CmdResult CommandInvite::Handle (const std::vector& parameters, Use if (parameters.size() >= 3) { if (IS_LOCAL(user)) - timeout = ServerInstance->Time() + InspIRCd::Duration(parameters[2]); + { + unsigned long duration; + if (!InspIRCd::Duration(parameters[2], duration)) + { + user->WriteNotice("*** Invalid duration for invite"); + return CMD_FAILURE; + } + timeout = ServerInstance->Time() + duration; + } else if (parameters.size() > 3) - timeout = ConvToInt(parameters[3]); + timeout = ConvToNum(parameters[3]); } if (!c) @@ -75,7 +83,7 @@ CmdResult CommandInvite::Handle (const std::vector& parameters, Use return CMD_INVALID; // Drop the invite if our channel TS is lower - time_t RemoteTS = ConvToInt(parameters[2]); + time_t RemoteTS = ConvToNum(parameters[2]); if (c->age < RemoteTS) return CMD_FAILURE; } @@ -114,10 +122,12 @@ CmdResult CommandInvite::Handle (const std::vector& parameters, Use } } - if (IS_LOCAL(u)) + LocalUser* const localtargetuser = IS_LOCAL(u); + if (localtargetuser) { - invapi.Create(IS_LOCAL(u), c, timeout); - u->WriteFrom(user,"INVITE %s :%s",u->nick.c_str(),c->name.c_str()); + invapi.Create(localtargetuser, c, timeout); + ClientProtocol::Messages::Invite invitemsg(user, localtargetuser, c); + localtargetuser->Send(ServerInstance->GetRFCEvents().invite, invitemsg); } if (IS_LOCAL(user)) @@ -156,7 +166,11 @@ CmdResult CommandInvite::Handle (const std::vector& parameters, Use FOREACH_MOD(OnUserInvite, (user, u, c, timeout, minrank, excepts)); if (announceinvites != Invite::ANNOUNCE_NONE) - c->WriteAllExcept(user, true, prefix, excepts, "NOTICE %s :*** %s invited %s into the channel", c->name.c_str(), user->nick.c_str(), u->nick.c_str()); + { + excepts.insert(user); + ClientProtocol::Messages::Privmsg privmsg(ServerInstance->FakeClient, c, InspIRCd::Format("*** %s invited %s into the channel", user->nick.c_str(), u->nick.c_str()), MSG_NOTICE); + c->Write(ServerInstance->GetRFCEvents().privmsg, privmsg, prefix, excepts); + } } else if (IS_LOCAL(user)) { @@ -173,7 +187,7 @@ CmdResult CommandInvite::Handle (const std::vector& parameters, Use return CMD_SUCCESS; } -RouteDescriptor CommandInvite::GetRouting(User* user, const std::vector& parameters) +RouteDescriptor CommandInvite::GetRouting(User* user, const Params& parameters) { return (IS_LOCAL(user) ? ROUTE_LOCALONLY : ROUTE_BROADCAST); }