*/
send_reply(sptr, RPL_YOURHOST, cli_name(&me), version);
send_reply(sptr, RPL_CREATED, creation);
- send_reply(sptr, RPL_MYINFO, cli_name(&me), version);
+ send_reply(sptr, RPL_MYINFO, cli_name(&me), infousermodes, infochanmodes,
+ infochanmodeswithparams, version);
send_supported(sptr);
m_lusers(sptr, sptr, 1, parv);
update_load();
/* Send umode to client */
if (MyUser(sptr))
{
+ memset(&flag, 0, sizeof(flag));
send_umode(cptr, sptr, &flag, ALL_UMODES);
if (cli_snomask(sptr) != SNO_DEFAULT && HasFlag(sptr, FLAG_SERVNOTICE))
send_reply(sptr, RPL_SNOMASK, cli_snomask(sptr), cli_snomask(sptr));
flag == FLAG_HIDDENHOST)
return 0;
+/* Invalidate all bans against the user so we check them again */
+ for (chan = (cli_user(cptr))->channel; chan;
+ chan = chan->next_channel)
+ ClearBanValid(chan);
+
SetFlag(cptr, flag);
if (!HasFlag(cptr, FLAG_HIDDENHOST) || !HasFlag(cptr, FLAG_ACCOUNT))
return 0;
*/
for (chan = cli_user(cptr)->channel; chan; chan = chan->next_channel)
{
- sendcmdto_channel_butserv_butone(cptr, CMD_JOIN, chan->channel, cptr,
- "%H", chan->channel);
+ /* For a user with no modes in a join-delayed channel, do not show
+ * the rejoin. */
+ if (!IsChanOp(chan) && !HasVoice(chan)
+ && (chan->channel->mode.mode & MODE_DELJOINS))
+ SetDelayedJoin(chan);
+ else
+ sendcmdto_channel_butserv_butone(cptr, CMD_JOIN, chan->channel, cptr,
+ "%H", chan->channel);
if (IsChanOp(chan) && HasVoice(chan))
sendcmdto_channel_butserv_butone(&me, CMD_MODE, chan->channel, cptr,
"%H +ov %C %C", chan->channel, cptr,
/* Maximum string size: "owidgrx\0" */
char *m = umodeBuf;
int i;
- struct Flags c_flags;
+ struct Flags c_flags = cli_flags(cptr);
if (HasPriv(cptr, PRIV_PROPAGATE))
FlagSet(&c_flags, FLAG_OPER);