AnyEvent-IRC
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/AnyEvent/IRC/Client.pm view on Meta::CPAN
});
$dcc->{connect} = tcp_connect $dcc->{ip}, $dcc->{port}, sub {
my ($fh) = @_;
return unless $dcc && $self;
delete $dcc->{timeout};
delete $dcc->{connect};
unless ($fh) {
$self->dcc_disconnect ($id, "CONNECT ERROR: $!");
return;
}
$dcc->{handle} = AnyEvent::Handle->new (
fh => $fh,
on_eof => sub {
delete $dcc->{handle};
$self->dcc_disconnect ($id, "EOF");
},
on_error => sub {
delete $dcc->{handle};
$self->dcc_disconnect ($id, "ERROR: $!");
}
);
$self->event (dcc_connected => $id, $dcc->{type}, $dcc->{handle});
};
$id
}
sub dcc_handle {
my ($self, $id) = @_;
if (my $dcc = $self->{dcc}->{$id}) {
return $dcc->{handle}
}
return;
}
sub send_dcc_chat {
my ($self, $id, $msg) = @_;
if (my $dcc = $self->{dcc}->{$id}) {
if ($dcc->{handle}) {
$dcc->{handle}->push_write ("$msg\015\012");
}
}
}
################################################################################
# Private utility functions
################################################################################
sub _was_me {
my ($self, $msg) = @_;
$self->lower_case (prefix_nick ($msg)) eq $self->lower_case ($self->nick ())
}
sub update_ident {
my ($self, $ident) = @_;
my ($n, $u, $h) = split_prefix ($ident);
my $old = $self->{idents}->{$self->lower_case ($n)};
$self->{idents}->{$self->lower_case ($n)} = $ident;
if ($old ne $ident) {
$self->event (ident_change => $n, $ident);
}
#d# warn "IDENTS:\n".(join "\n", map { "\t$_\t=>\t$self->{idents}->{$_}" } keys %{$self->{idents}})."\n";
}
################################################################################
# Channel utility functions
################################################################################
sub channel_remove {
my ($self, $msg, $chan, $nicks) = @_;
for my $nick (@$nicks) {
if ($self->lower_case ($nick) eq $self->lower_case ($self->nick ())) {
delete $self->{chan_queue}->{$self->lower_case ($chan)};
delete $self->{channel_list}->{$self->lower_case ($chan)};
last;
} else {
delete $self->{channel_list}->{$self->lower_case ($chan)}->{$nick};
}
}
}
sub channel_add {
my ($self, $msg, $chan, $nicks, $modes) = @_;
my @mods = @$modes;
for my $nick (@$nicks) {
my $mode = shift @mods;
if ($self->is_my_nick ($nick)) {
for (@{$self->{chan_queue}->{$self->lower_case ($chan)}}) {
$self->send_msg (@$_);
}
$self->clear_chan_queue ($chan);
}
my $ch = $self->{channel_list}->{$self->lower_case ($chan)} ||= { };
if (defined $mode) {
$ch->{$nick} = $mode;
$self->event (channel_nickmode_update => $chan, $nick);
} else {
$ch->{$nick} = { } unless defined $ch->{$nick};
}
}
}
sub channel_mode_change {
my ($self, $chan, $op, $mode, $nick) = @_;
my $nickmode = $self->nick_modes ($chan, $nick);
defined $nickmode or return;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.457 second using v1.00-cache-2.02-grep-82fe00e-cpan-1310916c57ae )