Minor fixes for v1.0 release, mostly comments, add openrc init script

This commit is contained in:
eleksir
2022-01-07 02:34:34 +03:00
parent f8d0c3f701
commit 5df11d2437
7 changed files with 36 additions and 13 deletions

8
README
View File

@@ -7,7 +7,7 @@ aleesa-craniac
Механика работы
-----------------------------------------------------------------------------------------------------------------------
Бредогенератор подписан на redis-канал craniac. В этот канал пишет другой демоночек - aleesa-misc. Причём, особенность
такова, что если aleesa-misc не распознала фразу как команду для другого модуля, то по-умолчанию такая фраза
такова, что если aleesa-misc не распознала фразу, как команду для другого модуля, то по-умолчанию такая фраза
оправляется в канал craniac, то есть сюда, в "мозги".
У бредогенератора есть 2 типа входящих сообщений - ключевые фразы, на которые у него есть готовые (статические) ответы
@@ -31,3 +31,9 @@ aleesa-craniac
Если всё хорошо, то после запуска redis-а, создания data/config.json из data/config_sample.json, можно запускать и само
приложение.
В каталоге contrib находится скрипт для alpine linux, системы инициализации openrc. Этот скрипт достаточно положить В
/etc/init.d/aleesa-craniac сконфигурить сервис по инструкции выше и после этого сервис запускается командой:
service aleesa-craniac start
в автозагрузку его можно прописать через команду
rc-update add aleesa-craniac default

View File

@@ -31,6 +31,7 @@ use File::Basename qw (basename dirname);
use File::Path qw (make_path);
use Mojo::Log;
use POSIX qw (setgid setuid setsid);
use Conf qw (LoadConf);
use Craniac qw (RunCraniac);

View File

@@ -1,4 +1,5 @@
#!/usr/bin/perl
# Наполняет отдельный "мозг" с бредом латинскими выражениями
use 5.018;
use strict;
@@ -10,7 +11,7 @@ use version; our $VERSION = qw (1.0);
my $workdir;
# before we run, change working dir
# До фактического запуска логики программы, сменим рабочий каталог, чтобы подцепить либы
BEGIN {
use Cwd qw (chdir abs_path);
my @CWD = split /\//xms, abs_path ($PROGRAM_NAME);

View File

@@ -0,0 +1,11 @@
#!/sbin/openrc-run
name="$SVCNAME"
command="/var/lib/$SVCNAME/bin/$SVCNAME"
pidfile="/var/run/$SVCNAME/$SVCNAME.pid"
depend() {
need net redis
use dns
after redis
}

View File

@@ -19,4 +19,4 @@ requires 'POSIX', '0';
requires 'Protocol::Redis::XS', '0';
requires 'Text::Fuzzy', '==0.29';
requires 'utf8', '0';
requires 'version', '0';
requires 'version', '==0.9929';

View File

@@ -1,6 +1,6 @@
package Craniac;
# Предполагается, что craniac - это "маршрут по-умолчанию". То есть сюда попадают все фразы, которые не были распознаны
# aleesa-misc как команды.
# aleesa-misc как команды. В том числе и некоторые команды (но по идее это так и задумано).
# Основная задача мозгов - распознать, требуется ли ответ и обработать фразу.
# Соответсвенно, мы предполагаем, что фразы делятся на 2 типа:
@@ -61,6 +61,8 @@ if (defined $logfile) {
my $hailo;
# Несколько фраз общего характера, используемые как универсальный ответ, когда ответить нечего (по тем или иным
# причинам) или ответ не будет достаточно вменяемым (слишком похож на фразу, на которую отвечаем)
sub RandomCommonPhrase () {
my @myphrase = (
'Так, блядь...',
@@ -104,6 +106,7 @@ sub fmatch (@) {
}
}
# Ленивая инициализация мозга. Создаём/открываем мозг только если нам надо "подумать" а не на каждую входящую фразу.
sub brains (@) {
my $chatid = shift;
my $telegram = shift // 0;
@@ -112,7 +115,7 @@ sub brains (@) {
my $cid = $chatid;
my $brainname;
# Костыль, чтобы не портировать данные из телеграммных мозгов
# Костыль, чтобы не портировать данные из телеграммных мозгов и не заниматься переименованием
unless ($telegram) {
$cid = utf2sha1 ($chatid);
$cid =~ s/\//-/xmsg;
@@ -129,9 +132,9 @@ sub brains (@) {
};
if (defined $hailo->{$chatid}) {
$log->info (sprintf 'Lazy init brain: %s', $brainname);
$log->info (sprintf '[INFO] Lazy init brain: %s', $brainname);
} else {
$log->warn ($EVAL_ERROR);
$log->error ("[ERROR] $EVAL_ERROR");
return 0;
}
}
@@ -156,7 +159,7 @@ my $parse_message = sub {
$m->{misc}->{fwd_cnt} = 1;
} else {
if ($m->{misc}->{fwd_cnt} > $fwd_cnt) {
$log->error ('Forward loop detected, discarding message.');
$log->error ('[ERROR] Forward loop detected, discarding message.');
$log->debug (Dumper $m);
return;
} else {
@@ -346,13 +349,13 @@ my $parse_message = sub {
if ($m->{misc}->{answer}) {
# Пытаемся что-то генерировать, если фраза длиннее 3-х букв
if (length ($m->{message}) > 3) {
# Lazy brain init
my $telegram = 0;
if ($m->{plugin} eq 'telegram') {
$telegram = 1;
}
# Lazy brain init
if (brains ($chatid, $telegram)) {
$reply = $hailo->{$chatid}->learn_reply ($m->{message});

View File

@@ -19,6 +19,9 @@ use version; our $VERSION = qw (1.0);
use Exporter qw (import);
our @EXPORT_OK = qw (Train Lat);
# В нашем случае среднее количество слов в фразе равно 3, поэтому ставим 2 :)
my $brain_order = 2;
my $c = LoadConf ();
my $brain = $c->{lat}->{brain};
my $srcfile = $c->{lat}->{src};
@@ -49,8 +52,7 @@ sub Train () {
my $lat = Hailo->new (
brain => $brain,
# В нашем случае среднее количество слов в фразе равно 3
order => 2
order => $brain_order
);
$lat->train ($srcfile);
@@ -76,8 +78,7 @@ sub Lat () {
my $lat = Hailo->new (
brain => $brain,
# В нашем случае среднее количество слов в фразе равно 3
order => 2,
order => $brain_order,
save_on_exit => 0
);