- if (MyUser(sptr))
- clean_channelname(parv[2]);
- else if (IsLocalChannel(parv[2]))
- return 0;
-
- if (*parv[2] == '0' || !IsChannelName(parv[2]))
- return 0;
-
- if (!(chptr = FindChannel(parv[2])))
- {
- if (IsModelessChannel(parv[2]) || IsLocalChannel(parv[2]))
- {
- sendto_one(sptr, err_str(ERR_NOTONCHANNEL), me.name, parv[0], parv[2]); /* XXX DEAD */
- return 0;
- }
-
- /* Do not disallow to invite to non-existant #channels, otherwise they
- would simply first be created, causing only MORE bandwidth usage. */
- if (MyConnect(sptr))
- {
- if (check_target_limit(sptr, acptr, acptr->name, 0))
- return 0;
-
- sendto_one(sptr, rpl_str(RPL_INVITING), me.name, parv[0], /* XXX DEAD */
- acptr->name, parv[2]);
-
- if (acptr->user->away)
- sendto_one(sptr, rpl_str(RPL_AWAY), me.name, parv[0], /* XXX DEAD */
- acptr->name, acptr->user->away);
- }
-
- sendto_prefix_one(acptr, sptr, ":%s INVITE %s :%s", parv[0], /* XXX DEAD */
- acptr->name, parv[2]);
-
- return 0;
- }
-
- if (!find_channel_member(sptr, chptr))
- {
- sendto_one(sptr, err_str(ERR_NOTONCHANNEL), me.name, parv[0], /* XXX DEAD */
- chptr->chname);
- return 0;
- }
-
- if (find_channel_member(acptr, chptr))
- {
- sendto_one(sptr, err_str(ERR_USERONCHANNEL), /* XXX DEAD */
- me.name, parv[0], acptr->name, chptr->chname);
- return 0;
- }
-
- if (MyConnect(sptr))
- {
- if (!is_chan_op(sptr, chptr))
- {
- sendto_one(sptr, err_str(ERR_CHANOPRIVSNEEDED), /* XXX DEAD */
- me.name, parv[0], chptr->chname);
- return 0;
- }
-
- /* If we get here, it was a VALID and meaningful INVITE */
-
- if (check_target_limit(sptr, acptr, acptr->name, 0))
- return 0;
-
- sendto_one(sptr, rpl_str(RPL_INVITING), me.name, parv[0], /* XXX DEAD */
- acptr->name, chptr->chname);
-
- if (acptr->user->away)
- sendto_one(sptr, rpl_str(RPL_AWAY), me.name, parv[0], /* XXX DEAD */
- acptr->name, acptr->user->away);
- }
-