irc_quit => \&on_quit,
irc_kick => \&on_kick,
irc_353 => \&on_names,
+ irc_475 => \&on_cannot_join_channel,
irc_notice => \&on_irc_notice,
irc_ping => \&on_ping,
autoping => \&do_autoping,
$string =~ s/[\s\t]+$//gs;
- my ($join_channel, $join_session, $join_language);
+ my ($join_channel, $join_session, $join_language, $join_password, $join_parameter1, $join_parameter2);
if ($string =~ /^([^\s]+)\s+(\d+)$/) {
$join_channel = $1;
$join_session = $2;
- $join_language = 'en';
} elsif ($string =~ /^([^\s]+)\s+(\d+)\s+([a-z]+)$/) {
$join_channel = $1;
$join_session = $2;
- $join_language = $3;
+ $join_parameter1 = $3;
+ $join_parameter2 = '';
+ } elsif ($string =~ /^([^\s]+)\s+(\d+)\s+([a-z:A-Z0-9]+)\s+([a-z:A-Z0-9]+)$/) {
+ $join_channel = $1;
+ $join_session = $2;
+ $join_parameter1 = $3;
+ $join_parameter2 = $4;
} else {
my $answer = 'The "join" command requires two parameters';
$answer = translate_text_for_channel($channel, 'error_join_command_parameter', $answer);
return $answer;
}
+
if (!is_a_channel($join_channel)) {
my $answer = 'The "join" command requires two parameters';
$answer = translate_text_for_channel($channel, 'error_join_command_parameter', $answer);
my $join_irc = $main::sessions{$join_session}{'session'};
+ $join_language = 'en';
+ if ($join_parameter1 =~ /^lang:([a-z]+)$/) {
+ $join_language = $1;
+ $join_parameter1 = '';
+ }
+ if ($join_parameter2 =~ /^lang:([a-z])$/) {
+ $join_language = $1;
+ $join_parameter2 = '';
+ }
+
+ $join_password = '';
+ if ($join_parameter1 =~ /^pass:(.+)$/) {
+ $join_password = $1;
+ $join_parameter1 = '';
+ }
+ if ($join_parameter1 =~ /^password:(.+)$/) {
+ $join_password = $1;
+ $join_parameter1 = '';
+ }
+ if ($join_parameter2 =~ /^pass:(.+)$/) {
+ $join_password = $1;
+ $join_parameter2 = '';
+ }
+ if ($join_parameter2 =~ /^password:(.+)$/) {
+ $join_password = $1;
+ $join_parameter2 = '';
+ }
+
+ if (length($join_parameter1) > 0 or length($join_parameter2) > 0) {
+ my $answer = 'Invalid parameter';
+ $answer = translate_text_for_channel($channel, 'invalid_parameter', $answer);
+ return $answer;
+ }
+
+
if (session_for_channel($join_channel)) {
my $answer = 'The bot already joined this channel';
$answer = translate_text_for_channel($channel, 'error_join_already_joined', $answer);
print_msg("join: '$join_channel' in session '$join_session', by $nick", DEBUG);
send_to_commandchannel("join: '$join_channel' in session '$join_session', by $nick");
- $join_irc->yield( join => $join_channel );
+ if (length($join_password) > 0) {
+ $join_irc->yield( join => $join_channel, $join_password );
+ } else {
+ $join_irc->yield( join => $join_channel );
+ }
$main::statistics{'command_counter_join'}++;
}
+# on_cannot_join_channel()
+#
+# handle "cannot join channel" events
+#
+sub on_cannot_join_channel {
+ my ($sender, $kernel, $heap, $arg0, $arg1, $arg2) = @_[SENDER, KERNEL, HEAP, ARG0, ARG1, ARG2];
+
+ my $irc = $sender->get_heap();
+ my $session = find_irc_session($irc);
+ print_msg("on_cannot_join_channel(session: $session): $arg1", DEBUG);
+
+ send_to_commandchannel($arg1);
+
+ set_session_activity($session);
+}
+
+
# on_irc_raw()
#
# set session activity (incoming traffic)