Net-DirectConnect
view release on metacpan or search on metacpan
lib/Net/DirectConnect/clihub.pm view on Meta::CPAN
'search_every' => 10,
'search_every_min' => 10,
'auto_connect' => 1,
'auto_bug' => 1,
'reconnects' => 99999,
'NoGetINFO' => 1, #test
'NoHello' => 1,
'UserIP2' => 1,
'TTHSearch' => 1,
'Version' => '1,0091',
'auto_GetNickList' => 1,
'follow_forcemove' => 1,
'incomingclass' => 'Net::DirectConnect::clicli',
'disconnect_recursive' => 1,
);
$self->{$_} //= $_{$_} for keys %_;
$self->{'periodic'}{ __FILE__ . __LINE__ } = sub {
my $self = shift if ref $_[0];
$self->search_buffer() if $self->{'socket'};
};
#$self->log($self, 'inited',"MT:$self->{'message_type'}", ' with', Dumper \@_);
#$self->baseinit();
#share_full share_tth want
$self->{$_} ||= $self->{'parent'}{$_} ||= {} for qw( NickList IpList PortList PortList_udp); #handler
#$self->{'NickList'} ||= {};
#$self->{'IpList'} ||= {};
#$self->{'PortList'} ||= {};
#$self->log( $self, 'inited3', "MT:$self->{'message_type'}", ' with' );
#You are already in the hub.
# $self->{'parse'} ||= {
$self->module_load('filelist');
local %_ = (
'chatline' => sub {
my $self = shift if ref $_[0];
#$self->log( 'dev', Dumper \@_);
my ( $nick, $text ) = $_[0] =~ /^(?:<|\* )(.+?)>? (.+)$/s;
#$self->log('dcdev', 'chatline parse', Dumper(\@_,$nick, $text));
$self->log( 'warn', "[$nick] oper: already in the hub [$self->{'Nick'}]" ), $self->nick_generate(), $self->reconnect(),
if ( ( !keys %{ $self->{'NickList'} } or $self->{'NickList'}{$nick}{'oper'} )
and $text eq 'You are already in the hub.' );
if ( $self->{'NickList'}{$nick}{'oper'} or $self->{'NickList'}{$nick}{'hubbot'} or $nick eq 'Hub-Security' ) {
if (
$text =~
/ÐинималÑнÑй инÑеÑвал поиÑка ÑоÑÑавлÑеÑ: \(Minimum search interval is:\) (\d+)ÑекÑнд \(seconds\)/
or $text =~ /^(?:Minimum search interval is|ÐинималÑнÑй инÑеÑвал поиÑка):(\d+)s/
or $text =~ /Search ignored\. Please leave at least (\d+) seconds between search attempts\./ #Hub-Security opendchub
or $text =~
/ÐинималÑнÑй инÑеÑвал Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð¸ÑковÑми запÑоÑами:(\d+)Ñек., попÑобÑйÑе ÑÑÑÑ Ð¿Ð¾Ð·Ð¶Ðµ/
or $text =~ /You can do 1 searches in (\d+) seconds/
)
{
$self->{'search_every'} = int( rand(5) + $1 || $self->{'search_every_min'} );
$self->log( 'warn', "[$nick] oper: set min interval = $self->{'search_every'}" );
$self->search_retry();
}
if ( $text =~
/(?:ÐожалÑйÑÑа )?подождиÑе (\d+) ÑекÑнд пеÑед ÑледÑÑÑим поиÑком\./i
or $text =~ /(?:Please )?wait (\d+) seconds before next search\./i
or $text eq 'ÐожалÑйÑÑа не иÑполÑзÑйÑе поиÑк Ñак ÑаÑÑо!'
or $text eq "Please don't flood with searches!"
or $text eq 'Sorry Hub is busy now, no search, try later..' )
{
$self->{'search_every'} += int( rand(5) + $1 || $self->{'search_every_min'} );
$self->log( 'warn', "[$nick] oper: increase min interval => $self->{'search_every'}" );
$self->search_retry();
}
}
if ( !$self->{count_parse}{chatline} and $text =~ /PtokaX/i ) {
#$self->log( 'dev', "[$nick] - probably hub bot" );
$self->{'NickList'}{$nick}{'hubbot'} = 1;
}
$self->search_retry(),
if $self->{'NickList'}->{$nick}{'oper'} and $text eq 'Sorry Hub is busy now, no search, try later..';
},
'welcome' => sub {
my $self = shift if ref $_[0];
my ( $nick, $text ) = $_[0] =~ /^(?:<|\* )(.+?)>? (.+)$/s;
if ( !keys %{ $self->{'NickList'} } or !exists $self->{'NickList'}->{$nick} or $self->{'NickList'}->{$nick}{'oper'} ) {
if ( $text =~ /^Bad nickname: unallowed characters, use these (\S+)/ )
#
{
my $try = $self->{'Nick'};
$try =~ s/[^\Q$1\E]//g;
$self->log( 'warn', "CHNICK $self->{'Nick'} -> $try" );
$self->{'Nick'} = $try if length $try;
} elsif ( $text =~ /Bad nickname: Wait (\d+)sec before reconnecting/i
or $text =~
/ÐожалÑйÑÑа подождиÑе (\d+) ÑекÑнд до повÑоÑного подклÑÑениÑ\./
or $text =~ /Do not reconnect too fast. Wait (\d+) secs before reconnecting./ )
{
#sleep $1 + 1;
$self->work( $1 + 10 );
} elsif ( $self->{'auto_bug'} and $nick eq 'VerliHub' and $text =~ /^This Hub Is Running Version 0.9.8d/i ) { #_RC1
++$self->{'bug_MyINFO_last'};
$self->log( 'dev', "possible bug fixed [$self->{'bug_MyINFO_last'}]" );
}
}
},
'Lock' => sub {
my $self = shift if ref $_[0];
#$self->log( "lockparse", @_ );
$self->{'sendbuf'} = 1;
$self->cmd('Supports');
my ($lock) = $_[0] =~ /^(.+?)(\s+Pk=.+)?\s*$/is;
#print "lock[$1]\n";
#$self->log( 'dev', "lock from [$_[0]] = [$lock]");
$self->cmd( 'Key', $self->lock2key($lock) );
$self->{'sendbuf'} = 0;
$self->cmd('ValidateNick');
},
'Hello' => sub {
my $self = shift if ref $_[0];
#$self->log('info', "HELLO recieved, connected. me=[$self->{'Nick'}]", @_);
return unless $_[0] eq $self->{'Nick'};
$self->{'sendbuf'} = 1;
$self->cmd('Version');
$self->{'sendbuf'} = 0 unless $self->{'auto_GetNickList'};
$self->cmd('MyINFO') unless $self->{'bug_MyINFO_last'};
$self->{'sendbuf'} = 0, $self->cmd('GetNickList') if $self->{'auto_GetNickList'};
$self->{'sendbuf'} = 0, $self->cmd('MyINFO') if $self->{'bug_MyINFO_last'};
$self->{'status'} = 'connected';
$self->cmd('BotINFO') if $self->{botinfo};
$self->cmd('make_hub');
},
'Supports' => sub {
my $self = shift if ref $_[0];
$self->supports_parse( $_[0], $self );
},
'ValidateDenide' => sub {
my $self = shift if ref $_[0];
$self->log( 'warn', "ValidateDenide", $self->{'Nick'}, @_ );
$self->cmd('nick_generate');
$self->cmd('ValidateNick');
( run in 0.801 second using v1.01-cache-2.11-cpan-39bf76dae61 )