sub stream { # chomp $room; &secure_checkid($alias,$tmpid); my $pid = $$; $SIG{CHLD} = 'IGNORE'; $|++; open RSTAT, "; close RSTAT; #Überprüfen, ob Alias Raum betreten darf if ($rstat[0] eq "1\n") { if (3 <= &hierachie($alias)) { print "Der Raum $room ist leider abgesperrt! Du wirst in den Ram $standardroom umgeleitet ..."; $room = $standardroom; } } print < END unlink("data/online/rooms/$loginplace/$alias"); &check_online; print "$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n
"; sleep 1; print "Hallo $alias, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!
"; sleep 1; print "Du befindest dich im Raum $room: ".get_theme($room)."
\n"; print "
\n"; if (-f "data/user/memos/$alias") { open(MEMOS,"; close MEMOS; my $memos; foreach (@memos) { $memos .= $_; } print $memos; unlink("data/user/memos/$alias"); } OPENMSGFILE: my $change_room = 0; my $startime = time; my $flooding = 0; my @ignore; my @flood; unless (-f "data/online/rstat/$room") { open(DATEI,">data/online/rstat/$room"); # Raumbesetzerstatus setzen print DATEI "0\n\n$alias<;1\n"; close DATEI; } open(DATEI,">data/online/users/$alias"); print DATEI time; close DATEI; open(DATEI,">data/online/rooms/$room/$alias"); print DATEI time; close DATEI; if (-e "data/msgs/$room") { open(MSGFILE,"data/online/pids/$room/$pid"); print PID time; close PID; } else { sleep 1; goto OPENMSGFILE; } &sendmsgs; while (-f "data/online/users/$alias") { local $SIG{USR1} = \&sendmsgs; goto OPENMSGFILE if ($change_room == 1); sleep 15; print "\n"; } sub sendmsgs { for ($curpos = tell(MSGFILE); ; $curpos = tell(MSGFILE)) { my ($address, $stamp, $command, $action, $message, $from) = split(/<;/, $_); if ($address =~ /$\!/ || $address eq $alias) { if ($stamp > $startime) { # Falls die Farben gewechselt wurden if ($command eq "col") { ($col, $secol) = split ";", $action; } elsif ($command eq "cr") { unlink("data/online/pids/$room/$pid"); $room = $action; close MSGFILE; $change_room = 1; # Falls jemand aus der Ignore-Liste eingetragen, oder ausgetragen werden soll } elsif ($command eq "ig") { my @temp; my $add2list = 1; foreach (@ignore) { if ($action ne $_) { push @temp, $_; } else { $add2list = 0; } } if ($add2list == 1) { push @ignore, $action; print "$action wird nun ignoriert!
\n"; &post_prv_extra($action,"Du wirst nun von $alias ignoriert!") } else { @ignore = @temp; print "$action wird nun nicht mehr ignoriert!
\n"; &post_prv_extra($action,"Du wirst nun von $alias nicht mehr ignoriert!") } # Falls Liste aller ignorierten Nicknames angezeigt werden soll } elsif ($command eq "igl") { my $ignored; $ignored .= "$_ " foreach (@ignore); if ($#ignore == -1) { print "Momentan wird keine Person von dir ignoriert!
\n"; } else { print "Folgende Personen werden von dir ignoriert: $ignored!
\n"; } # Falls User den Chat, aber nicht das System verlassen will } elsif ($command eq "quit") { print "\n"; last; # Nachricht ausgeben falls nicht der Raum gewechselt wird } elsif ($change_room != 1) { # Wenn der Benutzer ignoriert wird, die nachricht nicht ausgeben my $ignored = 0; foreach (@ignore) { if ($_ eq $from) { $ignored = 1; last; } } if ($ignored != 1) { print "$message\n"; } else { $address =~ s/\!//; &post_prv_extra($from,"Du wirst von $alias ignoriert!") if ($address eq $alias); } } push(@flood,$address.$command.$action.$message.$from); # Falls Jemand den Chat flutet if ($flood[0] eq $flood[1] && $flood[0] eq $flood[2] && $flood[0] eq $flood[3]) { print "$from flutet den Chat !
\n"; if ($from eq $alias && $flooding++ && $flooding >= 4) { print "\n"; &rm_alias($alias,$room); &post($room,"".×tring." Das System katapultiert $alias wegen Fluten des Chats nach draussen ... ", $alias); } } else { $flooding = 0; } shift(@flood) if ($#flood > 2); } } } seek(MSGFILE, $curpos, 0); } unlink("data/online/pids/$room/$pid"); } sub post_prv_extra { my ($alias,$message) = @_; my $helpid = fork(); if ($helpid == 0) { &post_prv($alias,$message); exit 0; } } 1;