Ejemplo n.º 1
0
void check_kicksay(Chan *chan, ChanUser *doer, char *text)
{
	KickSay *kick,*save;
	char *mask;
	int action;

	save = NULL;
	action = -1;
	for(kick=current->kicklist;kick;kick=kick->next)
	{
		if (*kick->chan == '*' || !Strcasecmp(chan->name,kick->chan))
		{
			if (!matches(kick->mask,text))
			{
				if (kick->action > action)
				{
					action = kick->action;
					save = kick;
				}
			}
		}
	}
	if (save)
	{
		if (!action)
		{
			if (doer->flags & CU_KSWARN)
				action = 1;
			if (!(doer->flags & CU_KSWARN))
			{
				doer->flags |= CU_KSWARN;
				to_server("NOTICE %s :%s\n",doer->nick,save->reason);
			}
		}
		if (action > 1)
		{
			mask = format_uh(get_nuh(doer),FUH_USERHOST);
			if (action > 2)
			{
				add_shit("Auto KS",chan->name,mask,save->reason,2,now+3600);
			}
			if (!(doer->flags & CU_BANNED))
			{
				doer->flags |= CU_BANNED;
				send_mode(chan,90,QM_RAWMODE,'+','b',mask);
			}
		}
		if (action && !(doer->flags & CU_KICKED))
		{
			doer->flags |= CU_KICKED;
			send_kick(chan,CurrentNick,FMT_PLAIN,save->reason);
		}
	}
}
Ejemplo n.º 2
0
/*
 *  SHIT <channel|*> <nick|mask> <action> [expire] <reason>
 */
void do_shit(COMMAND_ARGS)
{
	/*
	 *  on_msg checks CARGS
	 */
	char	*channel,*nick,*nuh;
	int	shitlevel,days,uaccess,shitaccess;

	if (CurrentCmd->name == C_QSHIT)
	{
		channel = MATCH_ALL;
	}
	else
	{
		channel = chop(&rest);
		if (!ischannel(channel) && *channel != '*')
		{
		usage:
			usage(from);	/* usage for CurrentCmd->name */
			return;
		}
	}

	if ((uaccess = get_useraccess(from,channel)) < cmdaccess)
		return;

	if ((nick = chop(&rest)) == NULL)
		goto usage;

	if (CurrentCmd->name == C_QSHIT)
	{
		shitlevel = DEFAULTSHITLEVEL;
		days = 86400 * DEFAULTSHITLENGTH;
		if (*rest == 0)
			rest = TEXT_DEFAULTSHIT;
	}
	else
	{
		shitlevel = asc2int(chop(&rest));
		if (errno)
			goto usage;

		if (shitlevel < 1 || shitlevel > MAXSHITLEVEL)
		{
			to_user(from,"Valid levels are from 1 thru " MAXSHITLEVELSTRING);
			return;
		}

		/*
		 *  option: expire in XXX days
		 */
		days = 86400 * 30;
		if (*rest >= '1' && *rest <= '9')
		{
			days = 86400 * asc2int(chop(&rest));
			if (errno)
				goto usage;
		}

		if (*rest == 0)
			goto usage;
	}


#ifdef CHANBAN
	if (shitlevel == SHIT_CHANBAN)
	{
		nuh = nick;
	}
	else
#endif /* CHANBAN */
	{
		if ((nuh = nick2uh(from,nick)) == NULL)
			return;

		if (find_shit(nuh,channel))
		{
			to_user(from,TEXT_ALREADYSHITTED,nuh);
			return;
		}

		if (uaccess != OWNERLEVEL)
		{
			shitaccess = get_useraccess(nuh,channel);
			if (shitaccess > uaccess)
			{
				to_user(from,TEXT_SHITLOWACCESS,nuh);
				return;
			}
		}

		format_uh(nuh,FUH_USERHOST);
	}

#ifdef DEBUG
	debug("(do_shit) adding %s to %s (Level %i)\n",nuh,channel,shitlevel);
#endif /* DEBUG */
	add_shit(from,channel,nuh,rest,shitlevel,now + days);

	to_user(from,TEXT_HASSHITTED,nuh,channel);
	to_user(from,TEXT_SHITEXPIRES,time2str(now + days));

	check_shit();
}