POE-Component-Server-IRC
view release on metacpan or search on metacpan
lib/POE/Component/Server/IRC.pm view on Meta::CPAN
if (!$self->_state_sid_serv($prefix) && $prefix ne $sid) {
last SWITCH;
}
if (!$count || $count < 2) {
last SWITCH;
}
my $client = shift @$args;
my $uid = $self->state_user_uid($client);
last SWITCH if !$uid;
last SWITCH if $args->[0] !~ m!^\d+$!;
last SWITCH if $args->[0] != $self->{state}{uids}{$uid}{ts};
if ( $uid =~ m!^$sid! ) {
my $rec = $self->{state}{uids}{$uid};
my $reason = 'SVSKilled: ';
if ( $count == 3 ) {
$reason .= pop @$args;
}
else {
$reason .= '<No reason supplied>';
}
$self->_terminate_conn_error(
$rec->{route_id},
$reason,
);
last SWITCH;
}
my $route_id = $self->_state_uid_route($uid);
if ( $route_id eq $peer_id ) {
# The fuck
last SWITCH;
}
$self->send_output(
{
prefix => $prefix,
command => 'SVSKILL',
params => [
$client,
@$args,
],
},
$route_id,
);
}
return @$ref if wantarray;
return $ref;
}
sub _daemon_peer_svstag {
my $self = shift;
my $peer_id = shift || return;
my $prefix = shift || return;
my $sid = $self->server_sid();
my $ref = [ ];
my $args = [ @_ ];
my $count = @$args;
# - parv[0] = nickname
# - parv[1] = TS
# - parv[2] = [-][raw]
# - parv[3] = required user mode(s) to see the tag
# - parv[4] = tag line
SWITCH: {
if (!$self->_state_sid_serv($prefix) && $prefix ne $sid) {
last SWITCH;
}
if (!$count || $count < 2) {
last SWITCH;
}
my $client = shift @$args;
my $uid = $self->state_user_uid($client);
last SWITCH if !$uid;
last SWITCH if $args->[0] !~ m!^\d+$!;
last SWITCH if $args->[0] != $self->{state}{uids}{$uid}{ts};
my $rec = $self->{state}{uids}{$uid};
if ( $args->[1] eq '-' ) {
delete $rec->{svstags}{$_} for keys %{ $rec->{svstags} };
$self->send_output(
{
prefix => $prefix,
command => 'SVSTAG',
params => [
$uid,
$rec->{ts},
$args->[1],
],
},
grep { $_ ne $peer_id } $self->_state_connected_peers(),
);
last SWITCH;
}
last SWITCH if $count < 5 || !$args->[3];
$rec->{svstags}{$args->[1]} = {
numeric => $args->[1],
umodes => $args->[2],
tagline => $args->[3],
};
$self->send_output(
{
prefix => $prefix,
command => 'SVSTAG',
params => [
$uid,
$rec->{ts},
$args->[1],
$args->[2],
$args->[3],
],
},
grep { $_ ne $peer_id } $self->_state_connected_peers(),
);
}
return @$ref if wantarray;
return $ref;
}
sub _state_create {
my $self = shift;
( run in 2.465 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )