mirror of
https://github.com/pragma-/pbot.git
synced 2025-02-08 18:44:17 +01:00
Improve connecting/nicking logic
Randomize nick when connecting and change to botnick after identifying. Identify after receiving connection welcome message. Ghost existing nick if it is already in use and then attempt to regain it.
This commit is contained in:
parent
28bd6f3611
commit
7243832cc3
@ -43,8 +43,7 @@ sub initialize {
|
|||||||
$self->{pbot}->{event_dispatcher}->register_handler('irc.kick', sub { $self->on_kick(@_) });
|
$self->{pbot}->{event_dispatcher}->register_handler('irc.kick', sub { $self->on_kick(@_) });
|
||||||
$self->{pbot}->{event_dispatcher}->register_handler('irc.quit', sub { $self->on_departure(@_) });
|
$self->{pbot}->{event_dispatcher}->register_handler('irc.quit', sub { $self->on_departure(@_) });
|
||||||
$self->{pbot}->{event_dispatcher}->register_handler('irc.nick', sub { $self->on_nickchange(@_) });
|
$self->{pbot}->{event_dispatcher}->register_handler('irc.nick', sub { $self->on_nickchange(@_) });
|
||||||
$self->{pbot}->{event_dispatcher}->register_handler('irc.bannickchange', sub { $self->on_bannickchange(@_) });
|
$self->{pbot}->{event_dispatcher}->register_handler('irc.nicknameinuse', sub { $self->on_nicknameinuse(@_) });
|
||||||
$self->{pbot}->{event_dispatcher}->register_handler('irc.notregistered', sub { $self->on_notregistered(@_) });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub default_handler {
|
sub default_handler {
|
||||||
@ -69,6 +68,10 @@ sub on_connect {
|
|||||||
my ($self, $event_type, $event) = @_;
|
my ($self, $event_type, $event) = @_;
|
||||||
$self->{pbot}->{logger}->log("Connected!\n");
|
$self->{pbot}->{logger}->log("Connected!\n");
|
||||||
$event->{conn}->{connected} = 1;
|
$event->{conn}->{connected} = 1;
|
||||||
|
|
||||||
|
$self->{pbot}->{logger}->log("Identifying with NickServ . . .\n");
|
||||||
|
$event->{conn}->privmsg("nickserv", "identify " . $self->{pbot}->{registry}->get_value('irc', 'botnick') . ' ' . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,12 +126,12 @@ sub on_notice {
|
|||||||
|
|
||||||
$self->{pbot}->{logger}->log("Received NOTICE from $nick $host '$text'\n");
|
$self->{pbot}->{logger}->log("Received NOTICE from $nick $host '$text'\n");
|
||||||
|
|
||||||
if($nick eq 'NickServ' && $text =~ m/This nickname is registered/) {
|
if($nick eq 'NickServ') {
|
||||||
|
if($text =~ m/This nickname is registered/) {
|
||||||
$self->{pbot}->{logger}->log("Identifying with NickServ . . .\n");
|
$self->{pbot}->{logger}->log("Identifying with NickServ . . .\n");
|
||||||
$event->{conn}->privmsg("nickserv", "identify " . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
$event->{conn}->privmsg("nickserv", "identify " . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
||||||
}
|
} elsif($text =~ m/You are now identified/) {
|
||||||
|
$event->{conn}->nick($self->{pbot}->{registry}->get_value('irc', 'botnick'));
|
||||||
if($nick eq 'NickServ' && $text =~ m/You are now identified/) {
|
|
||||||
foreach my $chan (keys %{ $self->{pbot}->{channels}->{channels}->hash }) {
|
foreach my $chan (keys %{ $self->{pbot}->{channels}->{channels}->hash }) {
|
||||||
if($self->{pbot}->{channels}->{channels}->hash->{$chan}{enabled}) {
|
if($self->{pbot}->{channels}->{channels}->hash->{$chan}{enabled}) {
|
||||||
$self->{pbot}->{logger}->log("Joining channel: $chan\n");
|
$self->{pbot}->{logger}->log("Joining channel: $chan\n");
|
||||||
@ -136,6 +139,9 @@ sub on_notice {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$self->{pbot}->{joined_channels} = 1;
|
$self->{pbot}->{joined_channels} = 1;
|
||||||
|
} elsif($text =~ m/has been ghosted/) {
|
||||||
|
$event->{conn}->nick($self->{pbot}->{registry}->get_value('irc', 'botnick'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -319,26 +325,13 @@ sub on_nickchange {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
# todo: fix the following two subroutines so they work properly (e.g., change nick to randomly generated nick and await responses)
|
sub on_nicknameinuse {
|
||||||
sub on_notregistered {
|
|
||||||
my ($self, $event_type, $event) = @_;
|
my ($self, $event_type, $event) = @_;
|
||||||
my ($addr, $msg) = $event->{event}->args;
|
my ($unused, $nick, $msg) = $event->{event}->args;
|
||||||
|
my $from = $event->{event}->from;
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("Received NOTREGISTERED from $addr: $msg\n");
|
$self->{pbot}->{logger}->log("Received nicknameinuse for nick $nick from $from: $msg\n");
|
||||||
$event->{conn}->privmsg("nickserv", "ghost " . $self->{pbot}->{registry}->get_value('irc', 'botnick') . ' ' . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
$event->{conn}->privmsg("nickserv", "ghost $nick " . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
||||||
$event->{conn}->privmsg("nickserv", "release " . $self->{pbot}->{registry}->get_value('irc', 'botnick') . ' ' . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
|
||||||
$event->{conn}->privmsg("nickserv", "identify " . $self->{pbot}->{registry}->get_value('irc', 'botnick') . ' ' . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub on_bannickchange {
|
|
||||||
my ($self, $event_type, $event) = @_;
|
|
||||||
my ($addr, $nick, $msg) = $event->{event}->args;
|
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("Received BANNICKCHANGE from $addr: $nick ($msg)\n");
|
|
||||||
$event->{conn}->privmsg("nickserv", "ghost " . $self->{pbot}->{registry}->get_value('irc', 'botnick') . ' ' . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
|
||||||
$event->{conn}->privmsg("nickserv", "release " . $self->{pbot}->{registry}->get_value('irc', 'botnick') . ' ' . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
|
||||||
$event->{conn}->privmsg("nickserv", "identify " . $self->{pbot}->{registry}->get_value('irc', 'botnick') . ' ' . $self->{pbot}->{registry}->get_value('irc', 'identify_password'));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
PBot/PBot.pm
10
PBot/PBot.pm
@ -151,8 +151,14 @@ sub initialize {
|
|||||||
$self->{timer}->start();
|
$self->{timer}->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO: add disconnect subroutine
|
sub random_nick {
|
||||||
|
my @chars = ("A".."Z", "a".."z", "0".."9");
|
||||||
|
my $nick;
|
||||||
|
$nick .= $chars[rand @chars] for 1..10;
|
||||||
|
return $nick;
|
||||||
|
}
|
||||||
|
|
||||||
|
# TODO: add disconnect subroutine
|
||||||
sub connect {
|
sub connect {
|
||||||
my ($self, $server) = @_;
|
my ($self, $server) = @_;
|
||||||
|
|
||||||
@ -165,7 +171,7 @@ sub connect {
|
|||||||
$self->{logger}->log("Connecting to $server ...\n");
|
$self->{logger}->log("Connecting to $server ...\n");
|
||||||
|
|
||||||
while (not $self->{conn} = $self->{irc}->newconn(
|
while (not $self->{conn} = $self->{irc}->newconn(
|
||||||
Nick => $self->{registry}->get_value('irc', 'botnick'),
|
Nick => random_nick,
|
||||||
Username => $self->{registry}->get_value('irc', 'username'),
|
Username => $self->{registry}->get_value('irc', 'username'),
|
||||||
Ircname => $self->{registry}->get_value('irc', 'ircname'),
|
Ircname => $self->{registry}->get_value('irc', 'ircname'),
|
||||||
Server => $server,
|
Server => $server,
|
||||||
|
Loading…
Reference in New Issue
Block a user