是否有可能让POE :: Component :: IRC接收自己的PRIVMSG事件?

时间:2014-09-17 07:22:07

标签: perl irc poe

我目前正在开发一个POE::Component::IRC的机器人,其工作包括按时间表将通知发布到一个频道列表,为期一周。

我似乎无法找到检查邮件是否已成功发送到频道的方法。旧的Net::IRC包会针对发送到频道的每条消息触发收到消息的事件,包括它自己发送的消息。 POE似乎没有这样做 - 至少,当机器人自己的消息在频道上发布时,irc_public事件不会被触发。

是否有一个标志我可以传递给事件处理程序说“我真的想收到所有的消息,甚至是我自己的”?或者有没有办法用某种RAW事件处理程序来做到这一点?

1 个答案:

答案 0 :(得分:1)

IRC协议将您的PRIVMSG回复给您,因此您只需要相信服务器已收到您的消息并以应有的方式处理它。

如果您只想接收发送的邮件的POE事件,可以使用以下插件:POE::Component::IRC::Plugin::BotTraffic。但是,它实际上并没有做任何事情来验证消息是否到达服务器。

幸运的是,IRC运行在TCP之上,提供有保证的按顺序交付。因此,只要连接不会无限期地丢弃或挂起,您就可以非常安全地假设您的命令到达服务器。

如果您想完全确定,您可以随时使用您知道服务器将回复的某些命令(例如TIME或PING)来跟踪您的PRIVMSG;如果确实如此,您就会知道它也收到了您的PRIVMSG。当然,即便如此,仍然无法保证服务器实际将消息传递给预期的接收者;像netsplits这样的东西确实会发生,并且会导致消息丢失。