modes[modelen++] = 'n';
if (IsHiddenHost(user))
modes[modelen++] = 'x';
+ if (IsNoIdle(user))
+ modes[modelen++] = 'I';
modes[modelen] = 0;
/* we don't need to put the + in modes because it's in the format string. */
static CMD_FUNC(cmd_privmsg)
{
struct privmsg_desc pd;
- if (argc != 3)
+ if (argc < 3)
return 0;
pd.user = GetUserH(origin);
if (!pd.user || (IsGagged(pd.user) && !IsOper(pd.user)))
return 1;
pd.is_notice = 0;
- pd.text = argv[2];
+ pd.text = argv[argc - 1];
parse_foreach(argv[1], privmsg_chan_helper, NULL, privmsg_user_helper, privmsg_invalid, &pd);
return 1;
}
static CMD_FUNC(cmd_notice)
{
struct privmsg_desc pd;
- if (argc != 3)
+ if (argc < 3)
return 0;
pd.user = GetUserH(origin);
if (!pd.user || (IsGagged(pd.user) && !IsOper(pd.user)))
return 1;
pd.is_notice = 1;
- pd.text = argv[2];
+ pd.text = argv[argc - 1];
parse_foreach(argv[1], privmsg_chan_helper, NULL, privmsg_user_helper, privmsg_invalid, &pd);
return 1;
}
for (nn=0; nn<dead_users.used; nn++)
free_user(dead_users.list[nn]);
userList_clean(&dead_users);
+ free(his_servername);
+ free(his_servercomment);
}
static void
case 'k': do_user_mode(FLAGS_SERVICE); break;
case 'g': do_user_mode(FLAGS_GLOBAL); break;
case 'n': do_user_mode(FLAGS_NOCHAN); break;
+ case 'I': do_user_mode(FLAGS_NOIDLE); break;
case 'x': do_user_mode(FLAGS_HIDDEN_HOST); break;
case 'r':
if (*word) {
mod_chanmode_append(&chbuf, 'k', channel->key);
if (change->modes_clear & channel->modes & MODE_UPASS)
mod_chanmode_append(&chbuf, 'U', channel->upass);
- if (change->modes_clear * channel->modes & MODE_APASS)
+ if (change->modes_clear & channel->modes & MODE_APASS)
mod_chanmode_append(&chbuf, 'A', channel->apass);
}
for (arg = 0; arg < change->argc; ++arg) {