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