mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-25 13:29:29 +01:00
Add "refresher" to allow PBot::Module subroutines to be reloaded during runtime
This commit is contained in:
parent
2ae493f1c2
commit
204f95cba7
@ -49,6 +49,7 @@ use PBot::Quotegrabs;
|
||||
use PBot::Timer;
|
||||
use PBot::AntiAway;
|
||||
use PBot::AntiKickAutoRejoin;
|
||||
use PBot::Refresher;
|
||||
|
||||
sub new {
|
||||
if(ref($_[1]) eq 'HASH') {
|
||||
@ -72,6 +73,8 @@ sub initialize {
|
||||
$self->{timer} = PBot::Timer->new(timeout => 10, %conf);
|
||||
$self->{commands} = PBot::Commands->new(pbot => $self, %conf);
|
||||
|
||||
$self->{refresher} = PBot::Refresher->new(pbot => $self);
|
||||
|
||||
my $config_dir = delete $conf{config_dir} // "$ENV{HOME}/pbot/config";
|
||||
|
||||
# registry created, but not yet loaded, to allow modules to create default values and triggers
|
||||
|
59
PBot/Refresher.pm
Normal file
59
PBot/Refresher.pm
Normal file
@ -0,0 +1,59 @@
|
||||
# File: Refresher.pm
|
||||
# Author: pragma_
|
||||
#
|
||||
# Purpose: Refreshes/reloads module subroutines. Does not refresh/reload
|
||||
# module member data, only subroutines.
|
||||
|
||||
package PBot::Refresher;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use feature 'switch';
|
||||
|
||||
use Module::Refresh;
|
||||
use Carp ();
|
||||
|
||||
sub new {
|
||||
if(ref($_[1]) eq 'HASH') {
|
||||
Carp::croak("Options to " . __FILE__ . " should be key/value pairs, not hash reference");
|
||||
}
|
||||
|
||||
my ($class, %conf) = @_;
|
||||
|
||||
my $self = bless {}, $class;
|
||||
$self->initialize(%conf);
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub initialize {
|
||||
my ($self, %conf) = @_;
|
||||
|
||||
my $pbot = delete $conf{pbot} // Carp::croak("Missing pbot reference to " . __FILE__);
|
||||
$self->{pbot} = $pbot;
|
||||
|
||||
$self->{refresher} = Module::Refresh->new;
|
||||
|
||||
$pbot->{commands}->register(sub { return $self->refresh(@_) }, "refresh", 90);
|
||||
}
|
||||
|
||||
sub refresh {
|
||||
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||
|
||||
eval {
|
||||
if (not $arguments) {
|
||||
$self->{pbot}->{logger}->log("Refreshing all modified modules\n");
|
||||
$self->{refresher}->refresh;
|
||||
} else {
|
||||
$self->{pbot}->{logger}->log("Refreshing module $arguments\n");
|
||||
if ($self->{refresher}->refresh_module_if_modified($arguments)) {
|
||||
$self->{pbot}->{logger}->log("Refreshed module.\n");
|
||||
} else {
|
||||
$self->{pbot}->{logger}->log("Module had no changes; not refreshed.\n");
|
||||
}
|
||||
}
|
||||
};
|
||||
$self->{pbot}->{logger}->log("Error refreshing: $@\n") if $@;
|
||||
}
|
||||
|
||||
1;
|
@ -14,6 +14,7 @@ LWP::Simple
|
||||
LWP::UserAgent
|
||||
LWP::UserAgent::WithCache
|
||||
Math::Units
|
||||
Module::Refresh
|
||||
Net::Dict
|
||||
Proc::ProcessTable
|
||||
SOAP::Lite
|
||||
|
Loading…
Reference in New Issue
Block a user