Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用perl';s POE::组件::IRC?_Perl_Irc - Fatal编程技术网

如何使用perl';s POE::组件::IRC?

如何使用perl';s POE::组件::IRC?,perl,irc,Perl,Irc,我有一个使用POE::Component::IRC的简单IRC bot。只有当我试图用一条有用的消息让它优雅地处理SIGINT时,我才发现我根本无法用任何消息让它退出,无论是作为信号处理程序的一部分还是仅仅是一个正常的退出调用 假设我已经创建了类似这样的会话: POE::Session->create( inline_states => { irc_disconnected => \&bot_reconnect, i

我有一个使用POE::Component::IRC的简单IRC bot。只有当我试图用一条有用的消息让它优雅地处理SIGINT时,我才发现我根本无法用任何消息让它退出,无论是作为信号处理程序的一部分还是仅仅是一个正常的退出调用

假设我已经创建了类似这样的会话:

POE::Session->create( inline_states => { irc_disconnected => \&bot_reconnect, irc_error => \&bot_reconnect, irc_socketerr => \&bot_reconnect, connect => \&bot_reconnect, . . . }, ); 如果,在代码中的任何其他地方,我将
关闭设置为1并告诉它
要退出(例如,
$irc->yield(quit=>“bye!”)
),它会立即退出 没有退出消息的IRC(“客户端退出”,ircd显示) 或者使用“远程主机已关闭连接”

然后,它接收到irc_disconnected(irc断开)事件,该事件将它带到
bot\u重新连接
,其中
shutdown
在 全部的事实上,如果我没有明确地
退出0
之后
关闭
然后这个过程就处于不确定状态,没有连接到IRC 更多

这就是应该发生的事吗

我发现:

这表示要使用
关机
。正如你所看到的,我试过了,而且成功了 似乎不起作用

我还在另一个问题中找到了一些示例代码:

然而,这和我现在的情况非常相似,而且也不一样 他们的行为似乎有所不同

libpoe组件irc perl的包版本是6.78+dfsg-1 so 正如上面的URL所说,应该大于6.50


有什么想法吗?

原来这是ircd的“错误”

我还向POE::Component::IRC的请求跟踪器报告了这一错误,Hinrik回答说,问我是否试图在Freenode上这样做。Freenode的ircd有一个功能,如果您长时间未连接,它会忽略您的退出消息

我并没有试图在Freenode上做这件事,但事实证明我在网络上做这件事。他们正在使用Charybdis:


这是所有许多ircd的共同点(当然是在ircd混合血统中)。在此之前,垃圾邮件发送者意识到他们可以通过机器人连接,快速加入最大数量的频道,然后通过垃圾邮件退出消息退出,该消息将广播给所有频道中的所有人。 sub bot_reconnect { my ($kernel, $heap) = @_[KERNEL, HEAP]; if (1 == $heap->{shutting_down}) { $heap->{irc}->yield(shutdown => 'blah'); } else { some_log_func("Reconnecting in 60 secs"); $kernel-delay(connect => 60); } }