#include "client.h"
#include "hash.h"
#include "ircd.h"
+#include "ircd_features.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "list.h"
return 0;
if (!(chptr = FindChannel(parv[2]))) {
- if (IsModelessChannel(parv[2]) || IsLocalChannel(parv[2])) {
- send_reply(sptr, ERR_NOTONCHANNEL, parv[2]);
- return 0;
- }
-
- /* Do not disallow to invite to non-existant #channels, otherwise they
- would simply first be created, causing only MORE bandwidth usage. */
-
- if (check_target_limit(sptr, acptr, cli_name(acptr), 0))
- return 0;
-
- send_reply(sptr, RPL_INVITING, cli_name(acptr), parv[2]);
-
- if (cli_user(acptr)->away)
- send_reply(sptr, RPL_AWAY, cli_name(acptr), cli_user(acptr)->away);
-
- sendcmdto_one(sptr, CMD_INVITE, acptr, "%s :%s", cli_name(acptr), parv[2]);
-
+ send_reply(sptr, ERR_NOTONCHANNEL, parv[2]);
return 0;
}
if (MyConnect(acptr))
add_invite(acptr, chptr);
- if (!IsLocalChannel(chptr->chname))
- sendcmdto_one(sptr, CMD_INVITE, acptr, "%s :%H", cli_name(acptr), chptr);
+ if (!IsLocalChannel(chptr->chname) || MyConnect(acptr)) {
+ if (feature_bool(FEAT_ANNOUNCE_INVITES)) {
+ sendcmdto_channel_butserv_butone(&me, get_error_numeric(RPL_ISSUEDINVITE)->str,
+ NULL, chptr, sptr, SKIP_NONOPS,
+ "%C %C :%C has been invited by %C",
+ acptr, sptr, acptr, sptr);
+ sendcmdto_channel_servers_butone(sptr, NULL, TOK_INVITE, chptr, sptr, 0,
+ "%s :%H", cli_name(acptr), chptr);
+ if (MyConnect(acptr))
+ sendcmdto_one(sptr, CMD_INVITE, acptr, "%s :%H", cli_name(acptr), chptr);
+ }
+ else
+ sendcmdto_one(sptr, CMD_INVITE, acptr, "%s :%H", cli_name(acptr), chptr);
+ }
return 0;
}
protocol_violation(sptr,"Too few arguments to invite");
return need_more_params(sptr,"INVITE");
}
- if ('#' != *parv[2]) {
+ if (!IsGlobalChannel(parv[2])) {
/*
* should not be sent
*/
send_reply(sptr, ERR_NOSUCHNICK, parv[1]);
return 0;
}
+ if (feature_bool(FEAT_ANNOUNCE_INVITES)) {
+ sendcmdto_channel_butserv_butone(&me, get_error_numeric(RPL_ISSUEDINVITE)->str,
+ NULL, chptr, sptr, SKIP_NONOPS,
+ "%C %C :%C has been invited by %C",
+ acptr, sptr, acptr, sptr);
+ sendcmdto_channel_servers_butone(sptr, NULL, TOK_INVITE, chptr, sptr, 0,
+ "%s :%H", cli_name(acptr), chptr);
+ if (MyConnect(acptr))
+ sendcmdto_one(sptr, CMD_INVITE, acptr, "%s :%H", cli_name(acptr), chptr);
+ return 0;
+ }
if (!MyUser(acptr)) {
/*
* just relay the message
return 0;
}
- if (!find_channel_member(sptr, chptr)) {
+ if (!IsChannelService(sptr) && !find_channel_member(sptr, chptr)) {
send_reply(sptr, ERR_NOTONCHANNEL, chptr->chname);
return 0;
}