Цитата:
Сообщение от lexik
Код:
trig { wecho(1, CL::unparse_colors($;)); } 'говорит', '1111:msg';
Код:
use Timer;
...
trig {
$U::tmsg = $Timer::system_time;
$U::msg = "\003P[$U::tmsg] $1 говорит $2";
wecho (1, ($U::msg));
$; } '^(.*?) говорит (.*?)$', '1111:msg';
|
Собственно легко заметить что в 1-ом коде юзается переменная $;, во 2-ом же данная переменная вообще никогда не используется, в чем здесь прикол? да в том, что когда ты ловишь переменные $1 и $2 то в них нет кодов цвета, а в переменной $; после unparse_colors телнет цвета преобразуются в цвета ммц.
Итого правильным решением будет:
а). решение когда юзеры любят изгаляться над входящим трафиком по своему вдовесок:
Код:
trig {
my $income_line = CL::unparse_colors $;; # здесь цвета
my $sender = $1; # здесь нет цветов
$income_line =~ m/^(\w+?) сказал.? : \'(.*?)\'$/; # цвета сохраняются
wecho 1, print_time."$sender \003Psend message \003J=> $2";
} '^(\w+?) сказал.? : \'.*?\'$', ":tells";
В реализованном выше коде, в окно номер 1 (оно-же alt + 2) будет отображена строка, где полностью сохранены цвета сообщения, + автор сообщение передается без цветов ммц.
б) в самом элементарном виде, данный триг выглядит так:
Код:
trig {
wecho 1, print_time.CL::unparse_colors($;);
} '^\w+? сказал.? : \'.*?\'$', ":tells";
в) собственно print_time (который потом удобно присобачивать куда угодно в дальнейшем)
Код:
sub print_time {
return sprintf "\003I[%02d:%02d]", (localtime)[2], (localtime)[1];
#return sprintf "\003I[%02d:%02d:%02d]", (localtime)[2], (localtime)[1], (localtime)[0]; -- часы с секундами
}
возвращают стильные часики: вида:
[12:02]