Perl 是否可以让POE::Component::IRC为其自己的PrivMsg接收事件?

Perl 是否可以让POE::Component::IRC为其自己的PrivMsg接收事件?,perl,irc,poe,Perl,Irc,Poe,我目前正在开发一个机器人,其工作之一是在时间表上的频道列表上发布一个通知,为期一周 不过,我似乎找不到方法来检查消息是否已成功发送到某个频道。旧包将为发送到通道的每条消息(包括它自己发送的消息)触发MessageReceived事件。POE似乎没有这样做——至少,当机器人自己的消息在频道上发布时,irc_公共事件没有触发 是否有一个标志我可以传递给事件处理程序说“我真的很想接收所有消息,请,甚至我自己的”?或者,有没有一种方法可以通过某种原始事件处理程序来实现这一点?IRC协议不会将您的priv

我目前正在开发一个机器人,其工作之一是在时间表上的频道列表上发布一个通知,为期一周

不过,我似乎找不到方法来检查消息是否已成功发送到某个频道。旧包将为发送到通道的每条消息(包括它自己发送的消息)触发MessageReceived事件。POE似乎没有这样做——至少,当机器人自己的消息在频道上发布时,irc_公共事件没有触发

是否有一个标志我可以传递给事件处理程序说“我真的很想接收所有消息,请,甚至我自己的”?或者,有没有一种方法可以通过某种原始事件处理程序来实现这一点?

IRC协议不会将您的privmsg回显给您,因此您只需相信服务器收到了您的消息,并以应有的方式处理它

如果您只想接收发送的消息的POE事件,则有一个插件:。不过,它实际上没有做任何事情来验证消息是否曾经到达服务器

幸运的是,IRC在上运行,它提供了有保证的订单交付。因此,只要连接没有无限期地断开或挂起,您就可以非常安全地假设您的命令将到达服务器


如果您想绝对确定,您可以始终使用一些命令(如TIME或PING)跟踪您的privmg,您知道服务器将回复这些命令;如果有,你就会知道它也收到了你的邮件。当然,即使如此,仍然不能保证服务器将消息实际传递给预期的收件人;像netsplits这样的事情确实时常发生,并可能导致消息被丢弃。

有趣的是,我想我应该在某个时候阅读IRC RFC,我应该已经意识到这一点。我假设Net::IRC是基于我从一位同事那里继承的一些代码来完成这项工作的,他的perl会检查他收到的消息是否是他自己发送的。呵呵。我想我必须按照你说的去做,相信TCP:)RFC实际上并没有清楚地说明这一点——事实上,他们似乎并没有禁止服务器回显Privmsg,他们只是也不需要。我能找到的最接近的例子是中的例子4,它说发送到没有其他用户的频道的消息“转到服务器,然后再转到其他地方。”但是,您可以做的是将telnet/netcat连接到真正的IRC服务器,键入您自己的IRC命令,然后看看会发生什么。(事实上,作为一个极端的例子,如果你直接告诉自己的尼克,你似乎得到了回音。)