package N0i::Xchat::Base; $VERSION = '2005110101'; use strict; use warnings; use Carp; use Data::Dumper; use Exporter; use Xchat; use vars qw(@ISA @EXPORT_OK %EXPORT_TAGS); @ISA = qw(Exporter); @EXPORT_OK = qw( debug servers_list ); %EXPORT_TAGS = ( 'all' => \@EXPORT_OK ); sub version { carp 'Forgot to set version!?!' } sub author { 'altblue@n0i.net' } sub package { ref($_[0]) } sub new { my ($class, %opt) = @_; bless { %opt, __hooks => [] }, $class; } sub hook { my $self = shift; my $hook = shift || return; push @{ $self->{__hooks} }, $hook; } sub hooks { my $self = shift; @{ $self->{__hooks} }; } sub loaded { my $self = shift; Xchat::print( "\cB\cC11-\cC4-\cC11-\cO\t\cC8" . $self->package . "\cO, version \cC10" . $self->version . "\cO loaded.\n" ); } sub register { my $self = shift; Xchat::register($self->package, $self->version, $self->author, sub { Xchat::unhook($_) for $self->hooks } ); } sub set_hooks { my $self = shift; foreach (@_) { my ($type, $trigger, $callback, $opt) = @$_; $self->hook(eval "Xchat::hook_$type(\$trigger, \$callback, \$opt)"); carp "Cannot hook $type on $trigger: $@\n" if $@; } } sub print_result { my ($rc, @messages) = @_; if (@messages) { my $prefix = $rc ? '' : "\x02ERROR\x02: "; Xchat::print("$prefix$_\n") for (@messages); } Xchat::EAT_ALL; } sub debug { Xchat::print(Data::Dumper->Dump([\@_], ['DEBUG'])); } sub _debug { my $self = shift; Xchat::print(Data::Dumper->Dump([\@_], ['DEBUG'])); } sub servers_list { my %SL = (); foreach (Xchat::get_list('channels')) { next if $_->{type} != 1; $SL{$_->{context}} = $_->{server}; } return \%SL; } 1; __END__ =head1 NAME N0i::XChat::Base - base class for Xchat scripts =head1 SYNOPSIS ... =head1 DESCRIPTION Base class for Xchat scripts... =head1 CHANGELOG * Tue Apr 05 2005 Marius FERARU 2005040501 - xchat 2.4.2 tweaks * Wed Sep 15 2004 Marius FERARU 2004091501 - exporting some functions: debug & servers_list - added a _debug method for object based debug * Sun May 16 2004 Marius FERARU 2004051601 - first version =head1 AUTHOR I =head1 LICENSE Copyright (C) 2004 Marius FERARU (altblue@n0i.net). All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.