3

我目前正在开发一个机器人POE::Component::IRC,除其他外,它的工作是按计划向频道列表发布通知,为期一周。

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

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

4

1 回答 1

1

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

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

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

如果您想绝对确定,您可以随时在您的 PRIVMSG 后面加上一些您知道服务器会回复的命令,例如 TIME 或 PING;如果是这样,您就会知道它也收到了您的 PRIVMSG。当然,即使那样,仍然不能保证服务器确实将消息传递给了预期的收件人;像 netsplits 这样的事情确实时有发生,并且可能导致消息被丢弃。

于 2014-09-17T19:52:17.620 回答