我正在创建一个连接到Matrix服务器的机器人。为此,我使用Net::Async::Matrix。
编码:
#!/usr/bin/perl
use strict;
use warnings;
use Net::Async::Matrix;
use Net::Async::Matrix::Utils qw ( parse_formatted_message );
use IO::Async::Loop;
use Data::Dumper;
my $loop = IO::Async::Loop->new;
my $matrix = Net::Async::Matrix->new(
server => 'matrix.server.net',
on_error => sub {
my ( undef, $message ) = @_;
warn "error: $message\n";
},
);
$loop->add( $matrix );
$matrix->login(
user_id => '@bot:matrix.server.net',
password => 'password',
)->get;
my $room = $matrix->join_room( '#Lobby:matrix.server.net' )->get;
$room->configure(
on_message => sub {
my ( undef, $member, $content, $event ) = @_;
my $msg = parse_formatted_message( $content );
my $sendername = $member->displayname;
print Dumper $sendername;
&sendmsg("$sendername said: $msg");
},
);
my $stream = $matrix->start;
sub sendmsg {
my $input = shift;
if ($input) {
$room->send_message(
type => "m.text",
body => $input,
),
}
}
$loop->run;
基本上,我希望机器人回应所说的话。
我得到以下输出:
$VAR1 = 'm1ndgames'; Longpoll 失败 - 遇到对象“m1ndgames 说:测试”,但在 /usr/local/share/perl/5.24.1/Net/Async/Matrix 中未启用 allow_blessed、convert_blessed 和 allow_tags 设置(或缺少 TO_JSON/FREEZE 方法)。下午第 292 行。
我不明白。当我test
在 body 中输入一个字符串时,它会被发送到房间。