#!/opt/perl/bin/perl use strict; use Chatbot::Eliza; use IO::Select; use Socket; use IO::Socket::INET; use Event; use Net::Knuddels; my @CHANNELS = ( 'Flirt', 'Flirt 2', 'Flirt 3', 'Flirt 4', ); #my $Knick = "baileysmaedl"; my $Knick = "baileysmaedl"; my $Kpass = "qwerty"; my %bots; my $client; my @outcbs; sub connect_knuddels { $client->login; Event->io ( fd => $client->fh, poll => 'r', cb => sub { my $e = shift; if (not $client->ready) { $e->w->cancel; } }); } #################################################################################### ########################## MAIN START ############################################## #################################################################################### $client = new Net::Knuddels::Client PeerAddr => "213.61.5.150:2710"; $client->register (UNHANDLED => sub { use Dumpvalue; print "---\n"; Dumpvalue->new (compactDump => 1, veryCompact => 1, quoteHighBit => 1, tick => '"')->dumpValue ([@_]); }); $client->register (login => sub { $client->enter_room ($_, $Knick, $Kpass) for (@CHANNELS); Event->timer (interval => 7, cb => sub { my $a = shift @outcbs; $a->() if defined $a; }); }); $client->register (msg_room => sub { my ($room, $user, $msg) = @_; # print "($room) $user: $msg\n"; }); $client->register (msg_priv => sub { my ($room, $src, $dst, $msg) = @_; return if $src =~ m/^James$/i; return if $src =~ m/^$Knick$/i; unless (defined $bots{lc $src}) { $bots{lc $src} = new Chatbot::Eliza "knuddel", "deutsch.txt"; } my $ans = $bots{lc $src}->transform ($msg); push @outcbs, sub { $client->send_priv_msg ($src, $room, $ans); }; if (open T, ">>tmp/$src") { print T "($room) $src an $dst >> $msg\n"; print T "($room) $dst an $src << $ans\n"; close T; } else { print "Couldn't open tmp/$src: $!\n"; } print "($room) ########### $src an $dst : $msg\n"; print "($room) ########### $src an $dst<<< $ans\n"; }); $client->register (dialog => sub { for my $l (@{$_[0]}) { $l =~ s/\260[^\260]*\260//g; print $l."\n"; } }); $client->register (join_room => sub { print "$_[1]->{name} joined $_[0]: ".scalar(keys %{$client->{user_lists}->{lc $_[0]}}). " users\n"; }); $client->register (part_room => sub { print "$_[1]->{name} left $_[0]: ".scalar(keys %{$client->{user_lists}->{lc $_[0]}}). " users\n"; }); $client->register (user_list => sub { my ($room, $list) = @_; print "***** USER JOIN FUER $room *****\n"; print scalar (keys %$list)." users\n"; print "********************************\n"; }); $client->register (room_info => sub { my ($room, $ri) = @_; print "ROOM INFO: $room : $ri->{picture}\n"; }); connect_knuddels; Event::loop;