#!/usr/bin/perl use strict; use Net::IRC; use Data::Dumper; use vars qw($find_user $status $output); my $irc_server = 'irc.azzurra.org'; my $irc_port = 6667; my $irc_nick = 'emi_finder'; my $irc_name = 'Emi, r u there?'; $find_user = 'emi'; my $output = '/www/ebruni.it/www/irc_status.txt'; $status = {timestamp => scalar(localtime)}; my %event_lookup = ( 'endofmotd' => 376, 'ison' => 303, 'whoischannels' => 319, 'list' => 322, ); my $irc = new Net::IRC; my $conn = $irc->newconn( Nick => $irc_nick, Server => $irc_server, Port => $irc_port, Ircname => $irc_name); $conn->add_global_handler($event_lookup{endofmotd}, \&on_connect); $conn->add_handler($event_lookup{ison},\&on_ison_reply); $conn->add_handler($event_lookup{whoischannels},\&on_whois_reply); $conn->add_handler($event_lookup{list},\&on_list_reply); $irc->start; sub on_connect { my $self = shift; $self->ison($find_user); } sub on_ison_reply { my $self = shift; my $event = shift; if ($event->{args}->[1] eq $find_user . " ") { # user on line $self->whois($find_user); $status->{online} = 1; } else { $status->{online} = 0; $self->quit; } } sub on_whois_reply { my $self = shift; my $event = shift; my @visible_channels = split(/ /,$event->{args}->[2]); foreach (@visible_channels) { s/^@//; $self->list($_); } $self->quit; } sub on_list_reply { my $self = shift; my $event = shift; $status->{channels}->{$event->{args}->[1]} = $event->{args}->[3]; } sub END { &output_log; } sub output_log { $Data::Dumper::Varname = 'irc_status'; open(OUTPUT,">$output"); print OUTPUT Data::Dumper::Dumper($status); close(OUTPUT); }