Enabled importing of plugin commands.
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
# Important for switch feature
 | 
			
		||||
# important for switch feature
 | 
			
		||||
use v5.32;
 | 
			
		||||
 | 
			
		||||
use utf8;
 | 
			
		||||
@@ -17,10 +17,10 @@ use JSON;
 | 
			
		||||
use Log::Log4perl;
 | 
			
		||||
use YAML;
 | 
			
		||||
 | 
			
		||||
# Package name
 | 
			
		||||
# package name
 | 
			
		||||
package TelegramBot;
 | 
			
		||||
 | 
			
		||||
# Constants and initalisations
 | 
			
		||||
# constants and initalisations
 | 
			
		||||
Log::Log4perl->init("$FindBin::Bin/log.conf");
 | 
			
		||||
my $CACHE = Cache::FastMmap->new(
 | 
			
		||||
    share_file => '/tmp/telegram_bot',
 | 
			
		||||
@@ -47,19 +47,34 @@ sub new {
 | 
			
		||||
    # whitelist
 | 
			
		||||
    $Self->{Whitelist} = $Param{Whitelist};
 | 
			
		||||
 | 
			
		||||
    $Self->{CommandList} = {
 | 
			
		||||
        'greet' => \&greet,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    # include plugins
 | 
			
		||||
    my @Plugins = glob("$FindBin::Bin/Plugins/*");
 | 
			
		||||
    if ( @Plugins ) {
 | 
			
		||||
	use File::Basename;
 | 
			
		||||
	PLUGIN:
 | 
			
		||||
	for my $PluginPath ( @Plugins ) {
 | 
			
		||||
		my $PluginName = basename($PluginPath);
 | 
			
		||||
		my $PluginObject = require("$FindBin::Bin/Plugins/${PluginName}/Core.pm");
 | 
			
		||||
		if( !$PluginObject ) {
 | 
			
		||||
			$Self->{LogObject}->error("Couldn't load plugin $PluginName");
 | 
			
		||||
			next PLUGIN;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
        use File::Basename;
 | 
			
		||||
        PLUGIN:
 | 
			
		||||
        for my $PluginPath ( @Plugins ) {
 | 
			
		||||
            my $PluginName = basename($PluginPath);
 | 
			
		||||
            next PLUGIN unless require("$FindBin::Bin/Plugins/${PluginName}/Core.pm");
 | 
			
		||||
            my $FullPath = "Plugins::${PluginName}::Core";
 | 
			
		||||
            my $PluginObject = $FullPath->new;
 | 
			
		||||
            if( !$PluginObject ) {
 | 
			
		||||
                $Self->{LogObject}->error("Couldn't load plugin $PluginName");
 | 
			
		||||
                next PLUGIN;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            # import plugin command list
 | 
			
		||||
            my $PluginCommandList = $PluginObject->getCommandList();
 | 
			
		||||
            COMMAND:
 | 
			
		||||
            for my $PluginCommand ( keys $PluginCommandList->%* ) {
 | 
			
		||||
                next COMMAND if $Self->{CommandList}{$PluginCommand};
 | 
			
		||||
 | 
			
		||||
                $Self->{CommandList}{$PluginCommand} = $PluginCommandList->{$PluginCommand};
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $Self;
 | 
			
		||||
@@ -72,7 +87,6 @@ sub new {
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
sub greet {
 | 
			
		||||
 | 
			
		||||
    my ( $Self, %Param ) = @_;
 | 
			
		||||
 | 
			
		||||
    $Self->{LogObject}->info('greet: Initiating greet routine');
 | 
			
		||||
@@ -102,6 +116,7 @@ sub greet {
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
# TODO rebuild to take custom parameters of various kind
 | 
			
		||||
sub build {
 | 
			
		||||
 | 
			
		||||
    my ( $Self, %Param ) = @_;
 | 
			
		||||
@@ -131,6 +146,7 @@ sub build {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        # TODO load list of commands from core and plugins
 | 
			
		||||
        $KeyboardData = {
 | 
			
		||||
            'inline_keyboard' => [
 | 
			
		||||
                [
 | 
			
		||||
@@ -191,13 +207,15 @@ sub processMessage {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    my $ResponseData = {};
 | 
			
		||||
    my $CommandList  = join('|', keys $Self->{CommandList}->%*);
 | 
			
		||||
    if ( defined $Param{Message}->{message} && $Param{Message}->{message}->{text} =~
 | 
			
		||||
        /\/(?<command>greet|statistics|build)\s?(?<arguments>.*)?/ )
 | 
			
		||||
        /\/(?<command>$CommandList)\s?(?<arguments>.*)?/ )
 | 
			
		||||
    {
 | 
			
		||||
        my $Message = $Param{Message}->{message};
 | 
			
		||||
        my $Command         = $+{command};
 | 
			
		||||
        my $ArgumentsString = $+{arguments};
 | 
			
		||||
        $ResponseData = $Self->$Command(
 | 
			
		||||
        $ResponseData = $Self->{CommandList}{$Command}(
 | 
			
		||||
            $Self,
 | 
			
		||||
            Message   => $Message,
 | 
			
		||||
            Arguments => $ArgumentsString,
 | 
			
		||||
        );
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user