Esempio n. 1
0
void hchannel_remove_inactive_users(void)
{
    hchannel *hchan = hchannels;

    for (;hchan;hchan = hchan->next)
    {
        if (hchan->flags & H_ANTI_IDLE && !(hchan->flags & H_PASSIVE))
        {
            hchannel_user **hchanuser = &hchan->channel_users;
            while (*hchanuser)
            {
		if (
		    (huser_get_level((*hchanuser)->husr) == H_PEON) &&
		    (time(NULL) - huser_on_channel((*hchanuser)->husr,hchan)->last_activity >= hchan->max_idle) &&
		    !(on_queue((*hchanuser)->husr, huser_on_channel((*hchanuser)->husr, hchan))) &&
                    !IsSetHost((*hchanuser)->husr->real_user)
		   )
		{
		    if (huser_on_channel((*hchanuser)->husr, hchan)->flags & H_IDLE_WARNING)
                    {
                        const char *banmask = hban_ban_string((*hchanuser)->husr->real_user, HBAN_HOST);
                        int bantime = 10;
                        helpmod_setban(hchan, banmask, time(NULL) + bantime * HDEF_m, MCB_ADD, HLAZY);

                        helpmod_kick(hchan, (*hchanuser)->husr, "Please do not idle in %s (%dmin anti-idle tempban). If you still require assistance, please try again later.", hchannel_get_name(hchan), bantime);
                        continue;
                    }
                    else
                    {
                        helpmod_reply((*hchanuser)->husr, NULL, "You are currently idle in %s. Please part the channel if you have nothing to do there", hchannel_get_name(hchan));
                        huser_on_channel((*hchanuser)->husr, hchan)->flags |= H_IDLE_WARNING;
		    }
		}
                /*hcommit_modes();*/
                hchanuser = &(*hchanuser)->next;
	    }
	    hcommit_modes();
        }
        /* Additionally, test if the channel has queue but no idle opers / staff */
        if (hchan->flags & H_QUEUE && hchan->flags & H_QUEUE_TIMEOUT)
        {
            hchannel_user *tmp;
            for (tmp = hchan->channel_users;tmp;tmp = tmp->next)
                if (huser_get_level(tmp->husr) >= H_TRIAL)
                {
                    huser_channel *huserchan = huser_on_channel(tmp->husr, hchan);
                    if ((time(NULL) - huserchan->last_activity < HELPMOD_QUEUE_TIMEOUT) && (huserchan->last_activity != tmp->time_joined))
                        break;
                }
            if (!tmp)
            {
                hchan->flags &= ~H_QUEUE;
                if (hchan->flags & H_REPORT && hchannel_is_valid(hchan->report_to))
                    helpmod_message_channel(hchan->report_to, "%s: Channel queue deactivated because of inactivity", hchannel_get_name(hchan));
                hchannel_conf_change(hchan, hchan->flags | H_QUEUE);
            }
        }
    }
}
Esempio n. 2
0
int hchannels_on_queue(huser *husr)
{
    huser_channel *huserchan = husr->hchannels;
    for (;huserchan;huserchan = huserchan->next)
        if (on_queue(husr, huserchan))
            return 1;
    return 0;
}
Esempio n. 3
0
int hchannel_count_queue(hchannel *hchan)
{
    int count = 0;
    hchannel_user *hchanuser = hchan->channel_users;
    for (;hchanuser;hchanuser = hchanuser->next)
    {
        if (on_queue(hchanuser->husr, huser_on_channel(hchanuser->husr, hchan)))
            count++;
    }
    return count;
}
Esempio n. 4
0
static int hqueue_on_queue(hqueue_entry *qentry)
{
    return on_queue(qentry->hchanuser->husr, qentry->huserchan);
}