www.pudn.com > coolchat.zip > chatkickout.pl
sub kickout
{
my (@leftfilelist) = ();
my $Nullroom = 0;
my %leftuserlist;
&get_form_data;
my $objid = lc($formdata{'ToWho'});
if(($objid eq "")||($objid eq lc($UserData{'User'})))
{
&chatshowmsg;
exit 0;
}
if(($UserData{'Room'} eq "main") && ($UserData{'Group'} ne 99))
{#Only root can kick user from main room!
&chatshowmsg;
exit 0;
}
MyDo $do_chatcheckmaster;
if ((&checkmaster($UserData{'User'},$UserData{'Room'}) ne 0)&&($UserData{'Group'} ne 99))
{#See wether the quest is come from the right user
&chatshowmsg;
exit 0;
}
MyDo $do_chatgetright;
my($Objright,$Objgroup) = &getright($objid);
if($Objgroup eq 99)
{#Of course you cannot kickout manager!
&chatshowmsg;
exit 0;
}
my $nowtime = time;
my $forbididfile = "$ChaTempFilePath$UserData{'Room'}.out";
&lock("$forbididfile");
if(open(FDB,">>$forbididfile"))
{
print FDB "$objid:$nowtime:0\n";
close FDB;
}
&unlock("$forbididfile");
#Remove user from the userlist
my $hastheuser = 0;
&lock("$chatdatadir/$UserData{'Room'}$DATA");
if(open(USERLIST,"<$chatdatadir/$UserData{'Room'}$DATA"))
{#Del user from the onlinelist
@userlines=;
close(USERLIST);
$roomnumber = @userlines;
if(open(USERLIST,">$chatdatadir/$UserData{'Room'}$DATA"))
{
$newmaster = "sysop";
$entertime = time;
foreach $userline(@userlines)
{
($userid,$idnum,$tails)=split(/:/,$userline,3);
if($userid eq $objid)
{
push(@leftfilelist ,"$Userdatapath/$userid.KEY");
$leftuserlist{$userid} = 1;
$roomnumber --;
$hastheuser = 1;
next;
}
elsif($idnum + $MaxIdelTime < $entertime)
{
$leaveuser .= "$userid ";
push(@leftfilelist ,"$Userdatapath/$userid.KEY");
$leftuserlist{$userid} = 1;
$roomnumber--;
$hastheuser = 1;
next;
}
print USERLIST $userline;
if($entertime > $idnum)
{#Find the oldest user in the room.
$newmaster = lc($userid);
$entertime = $idnum;
}
}
close(USERLIST);
}
}
&unlock("$chatdatadir/$UserData{'Room'}$DATA");
if($hastheuser eq 1)
{
&lock("$ChatRoomListFile");
if(open(ROOMLIST, "<$ChatRoomListFile"))
{#Change the master and the number of the room
@roomlines=;
close ROOMLIST;
if(open(ROOMLIST, ">$ChatRoomListFile"))
{
foreach $roomline(@roomlines)
{
($roomname,$usernum,$master,$visible,$attrib,$tails)=split(/:/,$roomline,6);
if($roomname eq $UserData{'Room'})
{
if($roomnumber < 1)
{#Nobody there, delete the forbit file and the messages files
if(($UserData{'Room'} ne "main")&&($attrib ne 9))
{
@filelist[0] = $ChaTempFilePath.$roomname.".out";
@filelist[1] = $ChaTempFilePath.$roomname.".ip";
@filelist[2]="$chatdatadir/$roomname$AllMsgExt";
@filelist[3]="$chatdatadir/$roomname$DATA";
@filelist[4]="$chatdatadir/$roomname$HEAD";
@filelist[5]="$chatdatadir/$roomname$MSG";
unlink(@filelist);
$Nullroom = 1;
}
else
{
print ROOMLIST "$roomname:0:$master:$visible:$attrib:$tails";
}
}
else
{
if(($leftuserlist{$master} eq 1)&&($attrib ne 9))
{#Give the master right to the oldest man in the room
$master = $newmaster;
$mastermessage = " 现在本聊天室新室主是$master!";
}
print ROOMLIST "$roomname:$roomnumber:$master:$visible:$attrib:$tails";
}
}
else
{
print ROOMLIST $roomline;
}
}
close ROOMLIST;
}
}
&unlock("$ChatRoomListFile");
}
unlink(@leftfilelist);
if($Nullroom eq 0)
{
my $timestr = "[".&convert_time(time)."]";
$message = "$UserData{'Nick'}($UserData{'User'}) 把$formdata{'ToWho'} 踢出了聊天室!".$timestr;
&UpdateChatData(10, $UserData{'User'},$UserData{'Room'},$UserData{'Nick'},$message);
if($leaveuser ne "")
{
$leftmessage = "$leaveuser 离开我们的聊天室. $mastermessage".$timestr;
&UpdateChatData(10, '-花无缺-',$UserData{'Room'},'-花无缺-',$leftmessage);
}
&UpdateChatData(40, "-花无缺-",$UserData{'Room'},$UserData{'Nick'},'Kickout');
}
&chatshowmsg;
}
1; #return true