微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将不推荐使用的 Perl 的 Net::IRC 代码转换为 AnyEvent::IRC::Client 查询

如何解决将不推荐使用的 Perl 的 Net::IRC 代码转换为 AnyEvent::IRC::Client 查询

由于 Perl 的 Net::IRC 库已被弃用,我需要将一些使用它的旧代码转换为更新的 AnyEvent::IRC::Client。问题在于 MetaCPAN 的 AnyEvent 文档。不要显示与 IRC 数字事件代码以及 Net::IRC 支持的 add_global_handler() 和 add_handler() 方法的任何等效性。那么,例如,以下 AnyEvent::IRC::Client 语法中的 Net::IRC 代码片段的等价物是什么?任何见解都非常感谢。谢谢!

my $irc = new Net::IRC ;
my $conn = $irc->newconn( Server => ...,Port => ...,Nick => ... ) ;
$conn->add_global_handler( [ 251,252,253,254,255,302 ],\&on_init ) ;
$conn->add_global_handler( [ 422,376 ],\&on_connect ) ;
$conn->add_handler( 'crping',\&on_ping_reply ) ;
$conn->add_handler( 'caction',\&on_action ) ;
...
$irc->start ;

AnyEvent::IRC::Client ( ref: https://metacpan.org/pod/AnyEvent::IRC::Client ) 的文档只提供了 reg_cb() 方法,没有 IRC 数字代码处理程序,所以以下是我目前为止关于新代码的全部内容:>

my $condVar = AnyEvent->condvar ;
my $conn = AnyEvent::IRC::Client->new() ;
$conn->connect( $server,$port,... ) ;
$conn->reg_cb( crping => sub { ... } ) ;
$conn->reg_cb( caction => sub { ... } ) ;

my $timer = AnyEvent->timer (
  after => $twoSecs,cb => sub {
    $conn->disconnect ;
    $condVar->send ;
  }#end callback
) ;#end timer
$condVar->recv ;
undef( $timer ) ;

解决方法

您的帖子缺乏明确的问题。事实上,您的问题似乎在评论中,甚至没有表述为问题。

我在 AnyEvent::IRC:Client 中找不到任何关于如何处理 IRC 事件数字代码的文档

第二个片段中唯一缺少的部分似乎如下所示:

$conn->add_global_handler( [ 251,252,253,254,255,302 ],\&on_init ) ;
$conn->add_global_handler( [ 422,376 ],\&on_connect ) ;

所以我假设您在询问如何使用 AnyEvent::IRC::Client 处理这些事件。


分布中包含的来源和样本都建议您可以使用以下内容:

$conn->reg_cb("irc_$_" => \&on_init) for 251..255,302;
$conn->reg_cb("irc_$_" => \&on_connect) for 376,422;

如果没有,您可以使用以下方法来发现适当的标识符:

$conn->reg_cb(debug_recv => sub {
   my ($msg) = @_;
   say STDERR "Received irc_" . lc($msg->{command});
});

进一步研究代码后,irc_001irc_376irc_422 导致 welcome 事件被触发,因此以下是更好的解决方案:>

$conn->reg_cb("irc_$_" => \&on_init) for 251..255,302;
$conn->reg_cb(welcome => \&on_connect);

还要注意 AnyEvent::IRC::Client 已经处理了来自服务器的 ping 消息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。