irc_ping => \&on_ping,
autoping => \&do_autoping,
irc_error => \&on_error,
+ irc_disconnected => \&on_disconnected,
irc_registered => \&on_irc_registered,
irc_plugin_add => \&on_irc_plugin_add,
irc_raw => \&on_irc_raw,
my $irc = $main::sessions{$session}{'session'};
# validate nickname
- my $logged_in = $irc->logged_in();
+ my $logged_in = $main::sessions{$session}{'logged_in'};
my $nick_name = $irc->nick_name();
if ($logged_in and $main::sessions{$session}{'past_motd'} == 1) {
if ($nick_name ne $main::sessions{$session}{'nickname'}) {
# enable tracing
#$_[SESSION]->option(trace => 1);
+ $main::sessions{$session}{'logged_in'} = 0;
+
return;
}
$main::sessions{$session}{'past_motd'} = 0;
$main::sessions{$session}{'last_nick_change_attempt'} = time();
$main::sessions{$session}{'last_connect_time'} = time();
+ $main::sessions{$session}{'logged_in'} = 1;
# get all channels for this session from config
my @channels = config_get_keys1('channels');
# only try to change the nickname, if the session is not logged in
# this happens if the desired nick is in use during reconnect
- if (!$irc->logged_in()) {
+ if (!$main::sessions{$session}{'logged_in'}) {
# try another nickname
$nick_name .= '_';
if ($nick_name =~ /^(.+?)(_+)$/) {
print_msg("Reconnect session: $session", INFO);
# reconnect will be handled by Component::IRC Component::IRC::Plugin::Connector
}
+
+ $main::sessions{$session}{'logged_in'} = 0;
+}
+
+
+# on_disconnected()
+#
+# catch any error disconnect
+#
+sub on_disconnected {
+ my ($sender, $kernel, $heap, $text) = @_[SENDER, KERNEL, HEAP, ARG0];
+
+ my $irc = $sender->get_heap();
+ my $session = find_irc_session($irc);
+
+ print_msg("on_disconnected(session: $session, error: \"" . $text . "\")", DEBUG);
+
+ $main::sessions{$session}{'logged_in'} = 0;
}