我目前正在使用 POE::Component::IRC 开发一个机器人,除其他事项外,该机器人的工作是将通知发布到时间表中的频道列表中,为期一周。

我似乎无法找到一种方法来检查邮件是否已成功发送到频道。旧的 Net::IRC 包将为发送到通道的每条消息(包括其自身已发送的消息)触发消息接收事件。 POE似乎不这样做-至少,当漫游器自身的消息在通道上发布时,irc_public事件不会触发。

我可以传递给事件处理程序一个标志,说“我真的很想接收所有消息,甚至是我自己的消息”吗?还是可以通过某种RAW事件处理程序来做到这一点?

最佳答案

IRC协议(protocol)不会将您的PRIVMSG回显给您,因此您只需要相信服务器已收到您的消息并按应有的方式对其进行了处理。

如果您只想接收所发送消息的POE事件,则有一个插件:POE::Component::IRC::Plugin::BotTraffic。但是,它实际上并没有做任何事情来验证消息是否已经到达服务器。

幸运的是,IRC在TCP之上运行,它提供了有保证的有序交付。因此,只要连接不会无限期断开或挂起,您就可以很安全地假定您的命令将到达服务器。

如果您想绝对确定,可以始终使用一些命令(例如TIME或PING)跟随PRIVMSG,您知道服务器将对其进行响应。如果确实如此,您将知道它也收到了您的PRIVMSG。当然,即使那样,仍然不能保证服务器实际上将邮件传递给了预期的收件人。诸如netsplis之类的事情有时会发生,并可能导致邮件丢失。

关于perl - 是否有可能使POE::Component::IRC接收其PRIVMSG的事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25884639/

10-13 05:07