mirror of
				https://github.com/pragma-/pbot.git
				synced 2025-10-31 14:47:27 +01:00 
			
		
		
		
	Add default handler for unhandled IRC events; ignore certain IRC events; improve handling of chan-op requests
This commit is contained in:
		
							parent
							
								
									c40e34b3a1
								
							
						
					
					
						commit
						068c6a0559
					
				| @ -37,6 +37,7 @@ sub initialize { | ||||
| 
 | ||||
|   $self->{op_commands} = {}; | ||||
|   $self->{is_opped} = {}; | ||||
|   $self->{op_requested} = {}; | ||||
| 
 | ||||
|   $self->{commands} = PBot::ChanOpCommands->new(pbot => $self->{pbot}); | ||||
| 
 | ||||
| @ -50,9 +51,12 @@ sub gain_ops { | ||||
|   my $self = shift; | ||||
|   my $channel = shift; | ||||
|    | ||||
|   return if exists $self->{op_requested}->{$channel}; | ||||
|   return if not exists $self->{pbot}->{channels}->{channels}->hash->{$channel} or not $self->{pbot}->{channels}->{channels}->hash->{$channel}{chanop}; | ||||
| 
 | ||||
|   if(not exists $self->{is_opped}->{$channel}) { | ||||
|     $self->{pbot}->{conn}->privmsg("chanserv", "op $channel"); | ||||
|     $self->{is_opped}->{$channel}{timeout} = gettimeofday + $self->{pbot}->{registry}->get_value('general', 'deop_timeout'); # assume we're going to be opped | ||||
|     $self->{op_requested}->{$channel} = scalar gettimeofday; | ||||
|   } else { | ||||
|     $self->perform_op_commands($channel); | ||||
|   } | ||||
| @ -78,7 +82,7 @@ sub perform_op_commands { | ||||
|   while(my $command = shift @{ $self->{op_commands}->{$channel} }) { | ||||
|     if($command =~ /^mode (.*?) (.*)/i) { | ||||
|       $self->{pbot}->{conn}->mode($1, $2); | ||||
|       $self->{pbot}->{logger}->log("  executing mode $1 $2\n"); | ||||
|       $self->{pbot}->{logger}->log("  executing mode [$1] [$2]\n"); | ||||
|     } elsif($command =~ /^kick (.*?) (.*?) (.*)/i) { | ||||
|       $self->{pbot}->{conn}->kick($1, $2, $3) unless $1 =~ /\Q$botnick\E/i; | ||||
|       $self->{pbot}->{logger}->log("  executing kick on $1 $2 $3\n"); | ||||
| @ -145,6 +149,14 @@ sub check_opped_timeouts { | ||||
|       # $self->{pbot}->{logger}->log("deop $channel in $timediff seconds\n"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   foreach my $channel (keys %{ $self->{op_requested} }) { | ||||
|     if ($now - $self->{op_requested}->{$channel} > 60 * 5) { | ||||
|       $self->{pbot}->{logger}->log("5 minutes since OP request for $channel and no OP yet; trying again ...\n"); | ||||
|       delete $self->{op_requested}->{$channel}; | ||||
|       $self->gain_ops($channel); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
|  | ||||
| @ -10,6 +10,7 @@ use strict; | ||||
| 
 | ||||
| use Carp(); | ||||
| use Time::HiRes qw(gettimeofday); | ||||
| use Data::Dumper; | ||||
| 
 | ||||
| sub new { | ||||
|   if(ref($_[1]) eq 'HASH') { | ||||
| @ -32,8 +33,14 @@ sub initialize { | ||||
|   $self->{pbot} = $pbot; | ||||
| } | ||||
| 
 | ||||
| # IRC related subroutines | ||||
| ################################################# | ||||
| sub default_handler { | ||||
|   my ($self, $conn, $event) = @_; | ||||
| 
 | ||||
|   if ($self->{pbot}->{registry}->get_value('irc', 'log_default_handler')) { | ||||
|     my $dump = Dumper $event; | ||||
|     $self->{pbot}->{logger}->log($dump); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| sub on_connect { | ||||
|   my ($self, $conn) = @_; | ||||
| @ -58,6 +65,16 @@ sub on_init { | ||||
|   $self->{pbot}->{logger}->log("*** @args\n"); | ||||
| } | ||||
| 
 | ||||
| sub on_motd { | ||||
|   my ($self, $conn, $event) = @_; | ||||
| 
 | ||||
|   if ($self->{pbot}->{registry}->get_value('irc', 'show_motd')) { | ||||
|     my $server = $event->{from}; | ||||
|     my $msg    = $event->{args}[1]; | ||||
|     $self->{pbot}->{logger}->log("MOTD from $server :: $msg\n"); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| sub on_public { | ||||
|   my ($self, $conn, $event) = @_; | ||||
|    | ||||
| @ -145,6 +162,7 @@ sub on_mode { | ||||
|       if($mode eq "+o") { | ||||
|         $self->{pbot}->{logger}->log("$nick opped me in $channel\n"); | ||||
|         $self->{pbot}->{chanops}->{is_opped}->{$channel}{timeout} = gettimeofday + $self->{pbot}->{registry}->get_value('general', 'deop_timeout');; | ||||
|         delete $self->{pbot}->{chanops}->{op_requested}->{$channel}; | ||||
|         $self->{pbot}->{chanops}->perform_op_commands($channel); | ||||
|       }  | ||||
|       elsif($mode eq "-o") { | ||||
| @ -159,8 +177,10 @@ sub on_mode { | ||||
|     else {  # bot not targeted | ||||
|       if($mode eq "+b") { | ||||
|         if($nick eq "ChanServ") { | ||||
|           $self->{pbot}->{chanops}->{unban_timeout}->hash->{$channel}->{$target}{timeout} = gettimeofday + $self->{pbot}->{registry}->get_value('bantracker', 'chanserv_ban_timeout'); | ||||
|           $self->{pbot}->{chanops}->{unban_timeout}->save; | ||||
|           if (exists $self->{pbot}->{channels}->{channels}->hash->{$channel} and $self->{pbot}->{channels}->{channels}->hash->{$channel}{chanop}) { | ||||
|             $self->{pbot}->{chanops}->{unban_timeout}->hash->{$channel}->{$target}{timeout} = gettimeofday + $self->{pbot}->{registry}->get_value('bantracker', 'chanserv_ban_timeout'); | ||||
|             $self->{pbot}->{chanops}->{unban_timeout}->save; | ||||
|           } | ||||
|         } | ||||
|       }  | ||||
|       elsif($mode eq "+e" && $channel eq $self->{pbot}->{registry}->get_value('irc', 'botnick')) { | ||||
|  | ||||
							
								
								
									
										18
									
								
								PBot/PBot.pm
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								PBot/PBot.pm
									
									
									
									
									
								
							| @ -78,6 +78,7 @@ sub initialize { | ||||
|   $self->{registry}->add_default('text', 'general', 'trigger',     delete $conf{trigger}     // '!'); | ||||
| 
 | ||||
|   $self->{registry}->add_default('text', 'irc',     'debug',       delete $conf{irc_debug}   // 0); | ||||
|   $self->{registry}->add_default('text', 'irc',     'show_motd',   delete $conf{show_motd}   // 1); | ||||
|   $self->{registry}->add_default('text', 'irc',     'max_msg_len', delete $conf{max_msg_len} // 425); | ||||
|   $self->{registry}->add_default('text', 'irc',     'ircserver',   delete $conf{ircserver}   // "irc.freenode.net"); | ||||
|   $self->{registry}->add_default('text', 'irc',     'port',        delete $conf{port}        // 6667); | ||||
| @ -88,6 +89,7 @@ sub initialize { | ||||
|   $self->{registry}->add_default('text', 'irc',     'username',    delete $conf{username}    // "pbot3"); | ||||
|   $self->{registry}->add_default('text', 'irc',     'ircname',     delete $conf{ircname}     // "http://code.google.com/p/pbot2-pl/"); | ||||
|   $self->{registry}->add_default('text', 'irc',     'identify_password', delete $conf{identify_password} // 'none'); | ||||
|   $self->{registry}->add_default('text', 'irc',     'log_default_handler', 1); | ||||
|    | ||||
|   $self->{registry}->set('irc', 'SSL_ca_file',       'private', 1); | ||||
|   $self->{registry}->set('irc', 'SSL_ca_path',       'private', 1); | ||||
| @ -167,10 +169,13 @@ sub connect { | ||||
| 
 | ||||
|   $self->{connected} = 1; | ||||
| 
 | ||||
|   #set up default handlers for the IRC engine | ||||
|   #set up handlers for the IRC engine | ||||
|   $self->{conn}->add_default_handler(sub { $self->{irchandlers}->default_handler(@_) }, 1); | ||||
| 
 | ||||
|   $self->{conn}->add_handler([ 251,252,253,254,302,255 ], sub { $self->{irchandlers}->on_init(@_)         }); | ||||
|   $self->{conn}->add_handler(376                        , sub { $self->{irchandlers}->on_connect(@_)      }); | ||||
|   $self->{conn}->add_handler('disconnect'               , sub { $self->{irchandlers}->on_disconnect(@_)   }); | ||||
|   $self->{conn}->add_handler('motd'                     , sub { $self->{irchandlers}->on_motd(@_)         }); | ||||
|   $self->{conn}->add_handler('notice'                   , sub { $self->{irchandlers}->on_notice(@_)       }); | ||||
|   $self->{conn}->add_handler('caction'                  , sub { $self->{irchandlers}->on_action(@_)       }); | ||||
|   $self->{conn}->add_handler('public'                   , sub { $self->{irchandlers}->on_public(@_)       }); | ||||
| @ -188,6 +193,17 @@ sub connect { | ||||
|   $self->{conn}->add_handler(728                        , sub { $self->{bantracker}->on_quietlist_entry(@_) }); | ||||
|   $self->{conn}->add_handler('bannickchange'            , sub { $self->{irchandlers}->on_bannickchange(@_) }); | ||||
|   $self->{conn}->add_handler('notregistered'            , sub { $self->{irchandlers}->on_notregistered(@_) }); | ||||
| 
 | ||||
|   # ignore these events | ||||
|   $self->{conn}->add_handler(['whoisuser',  | ||||
|                               'whoisserver',  | ||||
|                               'whoiscountry',  | ||||
|                               'whoischannels', | ||||
|                               'whoisidle', | ||||
|                               'endofwhois',  | ||||
|                               'motdstart', | ||||
|                               'away', | ||||
|                               'endofbanlist'], sub {}); | ||||
| } | ||||
| 
 | ||||
| #main loop | ||||
|  | ||||
| @ -13,7 +13,7 @@ use warnings; | ||||
| # These are set automatically by the build/commit script | ||||
| use constant { | ||||
|   BUILD_NAME     => "PBot", | ||||
|   BUILD_REVISION => 774, | ||||
|   BUILD_REVISION => 775, | ||||
|   BUILD_DATE     => "2014-08-11", | ||||
| }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Pragmatic Software
						Pragmatic Software