From ab8910516841cdf64d258154749a51ae9884f368 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sat, 11 Dec 2021 13:57:23 +0300 Subject: [PATCH] Add initial redis support --- cpanfile | 1 + data/sample_config.json | 8 +++++++- lib/RedisLib.pm | 28 ++++++++++++++++++++++++++++ lib/TelegramBot.pm | 25 +++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 lib/RedisLib.pm diff --git a/cpanfile b/cpanfile index 3abdba5..8d7c0e3 100644 --- a/cpanfile +++ b/cpanfile @@ -26,6 +26,7 @@ requires 'Log::Any::For::Std'; requires 'Math::Random::Secure'; requires 'Mojo::Base'; requires 'Mojo::IOLoop'; +requires 'Mojo::Redis' requires 'Mojo::UserAgent'; requires 'Mojo::UserAgent::Cached'; requires 'String::Random'; diff --git a/data/sample_config.json b/data/sample_config.json index efc0bf7..ef3edc8 100644 --- a/data/sample_config.json +++ b/data/sample_config.json @@ -52,7 +52,7 @@ # Openwatermap plugin. "openweathermap" : { - "appid" : "md5sum-like_string", + "appid" : "md5sum-like_string" }, # Stuff for telegram itself. @@ -70,4 +70,10 @@ # Unprivileged user to run this bot from. "user" : "unit", + + "redis_server": "127.0.0.1", + "redis_port" : "6379", + "redis_channels" : [ + "telegram" + ] } diff --git a/lib/RedisLib.pm b/lib/RedisLib.pm new file mode 100644 index 0000000..f43de33 --- /dev/null +++ b/lib/RedisLib.pm @@ -0,0 +1,28 @@ +package RedisLib; + +use 5.018; +use strict; +use warnings; +use utf8; +use open qw (:std :utf8); +use Log::Any qw ($log); +use Data::Dumper; + +use version; our $VERSION = qw (1.0); +use Exporter qw (import); +our @EXPORT_OK = qw (redisListener); + +sub parse_message { + my $self = shift; + my $m = shift; + my $answer = $m; + my $send_to = $answer->{from}; + + $log->error (Dumper $self); + + return; +}; + +1; + +# vim: set ft=perl noet ai ts=4 sw=4 sts=4: diff --git a/lib/TelegramBot.pm b/lib/TelegramBot.pm index 1455f66..41a25ac 100644 --- a/lib/TelegramBot.pm +++ b/lib/TelegramBot.pm @@ -19,6 +19,7 @@ use BotLib::Conf qw (LoadConf); use BotLib::Fortune qw (Fortune); use BotLib::Karma qw (KarmaSet); use BotLib::Util qw (trim fmatch); +use RedisLib qw (redisListener); use version; our $VERSION = qw (1.0); use Exporter qw (import); @@ -31,6 +32,7 @@ my $myusername; my $myfirst_name; my $mylast_name; my $myfullname; +my $redis_mutex; has token => $c->{telegrambot}->{token}; @@ -356,6 +358,28 @@ sub __on_msg { return; } +sub __redisListener { + return if ($redis_mutex); + + my $redis = Mojo::Redis->new ( + sprintf 'redis://%s:%s/1', $c->{redis_server}, $c->{redis_port} + ); + + my $pubsub = $redis->pubsub; + my $sub; + + foreach my $channel (@{$c->{redis_channels}}) { + $log->info ("Subscribing to $channel"); + + $sub->{$channel} = $pubsub->json ($channel)->listen ( + $channel => sub { \&redis_parse_message->(@_); } + ); + } + + $redis_mutex = 1; + return; +} + # setup our bot sub init { my $self = shift; @@ -369,6 +393,7 @@ sub init { } $self->add_listener (\&__on_msg); + $self->add_listener (\&__redisListener); $self->add_repeating_task (900, \&__cron); return; }