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

标签 perl irc poe

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

虽然我似乎无法找到一种方法来检查消息是否已成功发送到 channel 。老Net::IRC包将为发送到 channel 的每条消息(包括它自己发送的消息)触发消息接收事件。 POE 似乎不会这样做 - 至少,当机器人自己的消息发布在 channel 上时,irc_public 事件不会触发。

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

最佳答案

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

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

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

如果你想绝对确定,你总是可以在你的 PRIVMSG 后面加上一些你知道服务器会回复的命令,比如 TIME 或 PING;如果是,您就会知道它也收到了您的 PRIVMSG。当然,即便如此,仍然不能保证服务器确实将消息传递给了预期的收件人;网络 split 之类的事情时有发生,并可能导致消息被丢弃。

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

相关文章:

arrays - 如何在 Perl 中创建二维数组?

python - Twisted IRC 服务器的好例子?

javascript - 尝试使 IRC 机器人的 URL-Matching RegEx 更快

perl - 如何正确关闭POE和POE::Session?

windows - 如何使用 Perl 的 POE 识别 Windows PnP 事件?

perl - 如何创建一个包含 n 个空字符串或零的数组?

macos - 在 Mac 上安装 BerkeleyDB Perl 模块时出错

perl - 我在哪里可以阅读 POE(Perl 对象环境)的清晰解释?

regex - 计算 qr 正则表达式中的捕获组?

bots - 在当前昵称下运行 IRC 机器人?