From d539c8c9cfeb940d54a893c4921aa1afc77ef88e Mon Sep 17 00:00:00 2001 From: eleksir Date: Mon, 12 Dec 2022 13:32:44 +0300 Subject: [PATCH] DeeJay utility functions to Util.pm --- lib/BotLib.pm | 83 +------------------------------------ lib/BotLib/Util.pm | 100 ++++++++++++++++++++++++++++++++++++++++++++- lib/TelegramBot.pm | 21 +--------- 3 files changed, 103 insertions(+), 101 deletions(-) diff --git a/lib/BotLib.pm b/lib/BotLib.pm index 69920a4..47c6677 100644 --- a/lib/BotLib.pm +++ b/lib/BotLib.pm @@ -18,11 +18,11 @@ use BotLib::Admin qw (@ForbiddenMessageTypes GetForbiddenTypes AddForbiddenType DelForbiddenType ListForbidden FortuneToggle FortuneStatus PluginToggle PluginStatus PluginEnabled ChanMsgToggle ChanMsgStatus GreetMsgToggle GreetMsgStatus GoodbyeMsgToggle GoodbyeMsgStatus); -use BotLib::Util qw (trim); +use BotLib::Util qw (trim Highlight); use version; our $VERSION = qw (1.1); use Exporter qw (import); -our @EXPORT_OK = qw (Command Highlight BotSleep IsCensored); +our @EXPORT_OK = qw (Command); my $c = LoadConf (); my $csign = $c->{telegrambot}->{csign}; @@ -447,85 +447,6 @@ MYADMIN return $reply; } -sub Highlight { - my $msg = shift; - - my $fullname; - my $highlight; - my $username; - my $visavi = ''; - my $userid = $msg->from->id; - - if ($msg->from->can ('username') && defined $msg->from->username ) { - $username = $msg->from->username; - } - - if ($msg->from->can ('first_name') && defined $msg->from->first_name) { - $fullname = $msg->from->first_name; - - if ($msg->from->can ('last_name') && defined $msg->from->last_name) { - $fullname .= ' ' . $msg->from->last_name; - } - } elsif ($msg->from->can ('last_name') && defined $msg->from->last_name) { - $fullname .= $msg->from->last_name; - } - - if (defined $username) { - $visavi .= '@' . $username; - - if (defined $fullname) { - $highlight = "[$fullname](tg://user?id=$userid)"; - $visavi .= ', ' . $fullname; - } else { - $highlight = "[$username](tg://user?id=$userid)"; - } - } else { - $highlight = "[$fullname](tg://user?id=$userid)"; - $visavi .= $fullname; - } - - $visavi .= " ($userid)"; - - return ($userid, $username, $fullname, $highlight, $visavi); -} - -sub BotSleep { - # TODO: Parametrise this with fuzzy sleep time in seconds - my $msg = shift; - # let's emulate real human and delay answer - sleep (irand (2) + 1); - - for (0..(4 + irand (3))) { - $msg->typing (); - sleep 3; - sleep 3 unless ($_); - } - - sleep ( 3 + irand (2)); - return; -} - -sub IsCensored { - my $msg = shift; - - my $forbidden = GetForbiddenTypes ($msg->chat->id); - - # voice messages are special - if (defined ($msg->voice) && defined ($msg->voice->duration) && ($msg->voice->duration > 0)) { - if ($forbidden->{'voice'}) { - return 1; - } - } - - foreach (keys %{$forbidden}) { - if ($forbidden->{$_} && (defined $msg->{$_})) { - return 1; - } - } - - return 0; -} - 1; # vim: set ft=perl noet ai ts=4 sw=4 sts=4: diff --git a/lib/BotLib/Util.pm b/lib/BotLib/Util.pm index f116a12..ff93e69 100644 --- a/lib/BotLib/Util.pm +++ b/lib/BotLib/Util.pm @@ -8,13 +8,14 @@ use open qw (:std :utf8); use English qw ( -no_match_vars ); use Digest::SHA qw (sha1_base64); use Encode qw (encode_utf8); +use Math::Random::Secure qw (irand); use MIME::Base64 qw (encode_base64); use Text::Fuzzy qw (distance_edits); use URI::URL qw (url); use version; our $VERSION = qw (1.0); use Exporter qw (import); -our @EXPORT_OK = qw (trim urlencode fmatch utf2b64 utf2sha1); +our @EXPORT_OK = qw (trim urlencode fmatch utf2b64 utf2sha1 BotSleep Highlight IsCensored RandomCommonPhrase); sub trim { my $str = shift; @@ -72,6 +73,103 @@ sub utf2sha1 { return sha1_base64 $bytes; } +sub Highlight { + my $msg = shift; + + my $fullname; + my $highlight; + my $username; + my $visavi = ''; + my $userid = $msg->from->id; + + if ($msg->from->can ('username') && defined $msg->from->username ) { + $username = $msg->from->username; + } + + if ($msg->from->can ('first_name') && defined $msg->from->first_name) { + $fullname = $msg->from->first_name; + + if ($msg->from->can ('last_name') && defined $msg->from->last_name) { + $fullname .= ' ' . $msg->from->last_name; + } + } elsif ($msg->from->can ('last_name') && defined $msg->from->last_name) { + $fullname .= $msg->from->last_name; + } + + if (defined $username) { + $visavi .= '@' . $username; + + if (defined $fullname) { + $highlight = "[$fullname](tg://user?id=$userid)"; + $visavi .= ', ' . $fullname; + } else { + $highlight = "[$username](tg://user?id=$userid)"; + } + } else { + $highlight = "[$fullname](tg://user?id=$userid)"; + $visavi .= $fullname; + } + + $visavi .= " ($userid)"; + + return ($userid, $username, $fullname, $highlight, $visavi); +} + +sub IsCensored { + my $msg = shift; + + my $forbidden = GetForbiddenTypes ($msg->chat->id); + + # voice messages are special + if (defined ($msg->voice) && defined ($msg->voice->duration) && ($msg->voice->duration > 0)) { + if ($forbidden->{'voice'}) { + return 1; + } + } + + foreach (keys %{$forbidden}) { + if ($forbidden->{$_} && (defined $msg->{$_})) { + return 1; + } + } + + return 0; +} + +sub RandomCommonPhrase { + my @myphrase = ( + 'Так, блядь...', + '*Закатывает рукава* И ради этого ты меня позвал?', + 'Ну чего ты начинаешь, нормально же общались', + 'Повтори свой вопрос, не поняла', + 'Выйди и зайди нормально', + 'Я подумаю', + 'Даже не знаю, что на это ответить', + 'Ты упал такие вопросы девочке задавать?', + 'Можно и так, но не уверена', + 'А как ты думаешь?', + 'А ви, таки, почему интересуетесь?', + ); + + return $myphrase[irand ($#myphrase + 1)]; +} + +sub BotSleep { + # TODO: Parametrise this with fuzzy sleep time in seconds + my $msg = shift; + # let's emulate real human and delay answer + sleep (irand (2) + 1); + + for (0..(4 + irand (3))) { + $msg->typing (); + sleep 3; + sleep 3 unless ($_); + } + + sleep ( 3 + irand (2)); + 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 ad387b4..46ea2b5 100644 --- a/lib/TelegramBot.pm +++ b/lib/TelegramBot.pm @@ -15,9 +15,9 @@ use Math::Random::Secure qw (irand); use Mojo::Base 'Teapot::Bot::Brain'; use BotLib::Admin qw (FortuneToggleList ChanMsgEnabled GreetMsgEnabled GoodbyeMsgEnabled); -use BotLib qw (Command Highlight BotSleep IsCensored); +use BotLib qw (Command); use BotLib::Conf qw (LoadConf); -use BotLib::Util qw (trim fmatch); +use BotLib::Util qw (trim fmatch BotSleep Highlight IsCensored RandomCommonPhrase); use RedisLib qw (redis_events_listener); use version; our $VERSION = qw (1.0); @@ -497,23 +497,6 @@ sub __on_msg { return; } -sub RandomCommonPhrase { - my @myphrase = ( - 'Так, блядь...', - '*Закатывает рукава* И ради этого ты меня позвал?', - 'Ну чего ты начинаешь, нормально же общались', - 'Повтори свой вопрос, не поняла', - 'Выйди и зайди нормально', - 'Я подумаю', - 'Даже не знаю, что на это ответить', - 'Ты упал такие вопросы девочке задавать?', - 'Можно и так, но не уверена', - 'А как ты думаешь?', - 'А ви, таки, почему интересуетесь?', - ); - - return $myphrase[irand ($#myphrase + 1)]; -} # setup our bot sub init {