如何发出Perl的POE ::零组件:: IRC退出消息?(How do I issue a qui

2019-09-28 17:12发布

我一直在使用POE ::零组件:: IRC一个简单的IRC机器人。 它只有当我试图让它正常用,我发现,我不能让任何消息退出可言,以往无论是作为一个信号处理器的一部分,或者只是一个正常的呼叫到有用的信息戒烟处理SIGINT被放弃。

比方说,我已经得到了会话创建是这样的:

POE::Session->create(
        inline_states => {
                irc_disconnected => \&bot_reconnect,
                irc_error        => \&bot_reconnect,
                irc_socketerr    => \&bot_reconnect,
                connect          => \&bot_reconnect,
.
.
.
        },
);

bot_reconnect只是要回连接到IRC如果有什么地方错了:

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);
        }
}

如果,在代码中其他地方我设置shutting_down为1,并告诉它退出(如$irc->yield(quit => "bye!")立即退出IRC与不用退出消息(“客户退出”时, ircd的显示器),或者用“远程主机关闭了连接”。

然后,它接收irc_disconnected事件这需要它来bot_reconnect如上所述,在shutdown似乎什么也不做。 事实上,如果我没有明确exit 0shutdown则该过程刚好在中间状态保持不连接IRC更多。

是什么是应该发生的?

我发现:

http://search.cpan.org/~bingos/POE-Component-IRC-6.79/lib/POE/Component/IRC/Cookbook/Disconnecting.pod

它说,使用shutdown 。 正如你所看到的,我试过了,它似乎并没有工作。

我还发现了另一个问题,这一些示例代码:

我如何正确关机博特:: BasicBot BOT(基于POE ::零组件:: IRC)?

然而,这是非常相似,我现在有,也似乎没有任何表现不同。

的包的版本libpoe-component-irc-perl是6.78 + DFSG-1,使得应大于6.50更大如上述URL表示。

有任何想法吗?

Answer 1:

事实证明,这是该IRCD的“过失”。

我还报告将此视为POE ::零组件:: IRC的要求跟踪的错误,并Hinrik回应,问我,如果我试图做到这一点就Freenode的。 Freenode上的IRCD有一个功能,如果你还没有连接很长时间却忽视了你的退出消息。

我并不想这样做Freenode上,但事实证明,我是这样做的网络确实做到这一点。 他们使用的是蟳:

https://github.com/atheme/charybdis/blob/master/modules/core/m_quit.c#L75



文章来源: How do I issue a quit message with perl's POE::Component::IRC?
标签: perl irc