Minor fixes for v1.0 release, mostly comments, add openrc init script
This commit is contained in:
8
README
8
README
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
11
contrib/aleesa-craniac.openrc
Normal file
11
contrib/aleesa-craniac.openrc
Normal 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
|
||||
}
|
||||
2
cpanfile
2
cpanfile
@@ -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';
|
||||
|
||||
@@ -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});
|
||||
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user