You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.6 KiB
78 lines
1.6 KiB
sub rndchr {
|
|
my $string = "";
|
|
for(my $i = 0; $i < 8; $i++){
|
|
$string .= chr(int(rand(26)) + 97); # More or less the alpahbet
|
|
}
|
|
return $string;
|
|
}
|
|
|
|
srand(time());
|
|
|
|
&timer(1, "&next_one", 1);
|
|
|
|
$state = 0;
|
|
$max_nicks = 100;
|
|
$min_nicks = 5;
|
|
$num_nicks = 0;
|
|
%list_nicks = ();
|
|
$repeat = 100000;
|
|
$count = 0;
|
|
|
|
@state = (\&join, \&part);
|
|
|
|
$line = "~#test~*#* Users on #test:";
|
|
for($i = 0; $i < $max_nicks; $i++){
|
|
my($mynick) = rndchr();
|
|
$list_nicks{$mynick} = 1;
|
|
$is_op = rand(100);
|
|
if($is_op > 50){
|
|
$mynick = "@" . $mynick;
|
|
}
|
|
$line .= " " . $mynick;
|
|
$num_nicks ++;
|
|
}
|
|
print "$line\n";
|
|
|
|
sub next_one {
|
|
for(my($i) = 0; $i < 200; $i++){
|
|
$goto_state = int(rand($#state+1));
|
|
&{$state[$goto_state]};
|
|
}
|
|
if($count++ < $repeat){
|
|
&timer(1, "&next_one", 1);
|
|
}
|
|
}
|
|
|
|
sub join{
|
|
return if $num_nicks > $max_nicks;
|
|
my($mynick) = rndchr();
|
|
$list_nicks{$mynick} = 1;
|
|
print("~#test~*>* $mynick (blah\@blah) has joined channel #test\n");
|
|
$is_op = rand(100);
|
|
if($is_op > 75){
|
|
print "~#test~*+* Mode change \"+o $mynick\" on channel #test by ChanServ\n";
|
|
}
|
|
$is_voice = rand(100);
|
|
if($is_voice > 40){
|
|
print "~#test~*+* Mode change \"+v $mynick\" on channel #test by ChanServ\n";
|
|
}
|
|
$num_nicks ++;
|
|
}
|
|
|
|
sub part{
|
|
return if $num_nicks < $min_nicks;
|
|
AGAIN: {
|
|
my($times) = int(rand($num_nicks));
|
|
for($i = 0; $i<= $times; $i++){
|
|
($mynick, $value) = each(%list_nicks);
|
|
}
|
|
return if $mynick eq '';
|
|
}
|
|
next AGAIN if $value != 1;
|
|
$list_nicks{$mynick} = 0;
|
|
print("~#test~*<* $mynick has left channel #test\n");
|
|
|
|
delete $list_nicks{$mynick};
|
|
$num_nicks --;
|
|
}
|