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