package Net::AIM::Event; # # $Revision: 1.11 $ # $Author: aryeh $ # $Date: 2001/06/04 17:03:08 $ # use strict; my %_names; =pod =head1 NAME Net::AIM::Event - Object to hold event data =head1 SYNOPSIS =head1 DESCRIPTION This module holds data about an event which is any instruction we get from the server. =head1 METHODS =over 4 =cut # Constructor method for Net::AIM::Event objects. # Takes at least 4 args: the type of event # the person or server that initiated the event # the recipient(s) of the event, as arrayref or scalar # the name of the format string for the event # (optional) any number of arguments provided by the event =pod =item Net::AIM::Event->new($type, $from, $to, @args) Net::AIM::Event constructor. Takes 4 args * The type of event * The originator (screenname or server) * To/Destination (us - remnants from IRC module days...) * @ARGS =cut sub new { my $class = shift; my $self = { 'type' => $_[0], 'from' => $_[1], 'to' => $_[2], 'args' => [ @_[3..$#_] ], }; bless $self, $class; # Take your encapsulation and shove it! if ($self->{'type'} !~ /\D/) { $self->{'type'} = $self->trans($self->{'type'}); } else { $self->{'type'} = lc $self->{'type'}; } $self->args(@{$self->{'args'}}); # strips colons from args return $self; } =pod =item $aim_event->dump() Print the event to STDERR good for debugging =cut sub dump { my ($self, $arg, $counter) = (shift, undef, 0); # heh heh! printf STDERR "TYPE: %-30s FORMAT: %-30s\n", $self->{'type'}, $self->{'format'}; print STDERR "FROM: ", $self->{'from'}, "\n"; print STDERR "TO: ", join(", ", @{$self->{'to'}}), "\n"; print STDERR "Args:\n"; foreach $arg (@{$self->{'args'}}) { print STDERR "\t", $counter++, ": ", $arg, "\n"; } print STDERR "\n"; } # Sets or returns the format string for this event. # Takes 1 optional arg: the new value for this event's "format" field. sub format { my $self = shift; $self->{'format'} = $_[0] if @_; return $self->{'format'}; } =pod =item $aim_event->args(@args) Sets the event's argument list to @args if it is provided. Otherwise it returns the event's argument list. =cut sub args { my $self = shift; if (@_) { $self->{'args'} = [@_]; } return $self->{'args'}; } =pod =item $aim_event->from($from) Sets the originator of this event if $from is provided. Otherwise it returns the event's originator. Usually either a ScreenName|Server =cut sub from { my $self = shift; $self->{'from'} = $_[0] if @_; return $self->{'from'}; } =pod =item $aim_event->to(@to) Sets the recipients of this event if @to is provided. Otherwise it returns the event's recipient list. =cut sub to { my $self = shift; $self->{'to'} = [ @_ ] if @_; return $self->{'to'}; } =pod =item $aim_event->trans($error_code) This method takes a numeric $error_code and returns a string representing the definition of the error code, or undef if the $error_code is unknown. =cut sub trans { shift if (ref($_[0]) || $_[0]) =~ /^Net::AIM/; my $ev = shift; return (exists $_names{$ev} ? $_names{$ev} : undef); } =pod =item $aim_event-Etype($type) Sets the type of this event if $type is provided. Otherwise it returns the event's type. =cut sub type { my $self = shift; $self->{'type'} = $_[0] if @_; return $self->{'type'}; } %_names = ( # AIM ERRORS 901 => '$0 not currently available', 902 => 'Warning of $0 not currently available', 903 => 'A message has been dropped, you are exceeding the server speed limit', # * Chat Errors *', 950 => 'Chat in $0 is unavailable.', # * IM & Info Errors *', 960 => 'You are sending message too fast to $0', 961 => 'You missed an im from $0 because it was too big.', 962 => 'You missed an im from $0 because it was sent too fast.', # * Dir Errors *', 970 => 'Failure', 971 => 'Too many matches', 972 => 'Need more qualifiers', 973 => 'Dir service temporarily unavailable', 974 => 'Email lookup restricted', 975 => 'Keyword Ignored', 976 => 'No Keywords', 977 => 'Language not supported', 978 => 'Country not supported', 979 => 'Failure unknown $0', # * Auth errors *', 980 => 'Incorrect nickname or password.', 981 => 'The service is temporarily unavailable.', 982 => 'Your warning level is currently too high to sign on.', 983 => 'You have been connecting and disconnecting too frequently. Wait 10 minutes and try again. If you continue to try, you will need to wait even longer.', 989 => 'An unknown signon error has occurred $0' ); "Aryeh Goldsmith"; __END__ =pod =head1 AUTHOR Aryeh Goldsmith Eperlaim@aryeh.netE. =head1 URL The Net::AIM project: http://www.aryeh.net/Net-AIM/ The Net::AIM bot list: http://www.nodoubtyo.com/aimbots/ =head1 SEE ALSO perl(1) =cut