2014-09-17 3 views
3

В настоящее время я разрабатываю бота с POE::Component::IRC, чья работа, среди прочего, состоит в том, чтобы опубликовать уведомление о списке каналов по расписанию в течение одной недели.Возможно ли получить POE :: Component :: IRC для получения событий для собственных PRIVMSG?

Я не могу найти способ проверить, что сообщение было успешно отправлено на канал. Старый пакет Net::IRC убьет сообщение, полученное для каждого сообщения, отправленного на канал, включая те, которые он сам отправил. POE, похоже, не делает этого - по крайней мере, событие irc_public не срабатывает, когда собственное сообщение бота публикуется на канале.

Есть ли флаг, который я могу передать обработчику событий, чтобы сказать «Я действительно хотел бы получать все сообщения, пожалуйста, даже мои собственные»? Или есть способ сделать это с помощью какого-либо обработчика событий RAW?

ответ

1

Протокол IRC не откликнется на ваши PRIVMSG, так что вам просто нужно верить, что сервер получил ваше сообщение и обработал его так, как должен.

Если вы хотите получать POE-события для отправляемых сообщений, для этого есть плагин: POE::Component::IRC::Plugin::BotTraffic. На самом деле это не делает ничего, чтобы проверить, что сообщения когда-либо доходят до сервера.

К счастью, IRC работает поверх TCP, что обеспечивает гарантированную доставку в порядке. Таким образом, до тех пор, пока соединение не будет падать или зависать неограниченно долго, вы можете с уверенностью предположить, что ваши команды доставят на сервер.

Если вы хотите быть абсолютно уверены, вы всегда можете следовать за вашим PRIVMSG с помощью какой-либо команды, такой как TIME или PING, что вы знаете, на сервер ответит; если это произойдет, вы узнаете, что он тоже получил ваш PRIVMSG. Разумеется, даже тогда еще нет гарантии, что сервер действительно передал сообщение предполагаемому получателю (-ам); время от времени происходят такие вещи, как netsplits, и могут вызывать сообщения.

+0

Интересно, я думаю, что в какой-то момент я должен был прочитать IRC RFC - я должен был это осознать уже. Я основывал свое предположение, что Net :: IRC сделал это на некотором коде, который я унаследовал от коллеги, и его perl проверил, были ли сообщения, которые он получил, те, которые он сам отправил. Ho hum. Угадайте, мне придется делать то, что вы говорите, и доверять TCP :) – GodEater

+0

RFC действительно не ясно излагают это - на самом деле, они не кажутся * запрещающими * серверам от повторения PRIVMSG, они просто надевают Это тоже нужно. Самое близкое, что я могу найти, - это пример 4 в [RFC 2810, раздел 5.2.1] (http://tools.ietf.org/html/rfc2810#section-5.2.1), в котором говорится, что сообщения, отправленные на канал без другие пользователи «идут на сервер, а затем нигде». Однако вы можете использовать telnet/netcat для реального IRC-сервера, ввести собственные IRC-команды и посмотреть, что произойдет. (На самом деле, в качестве углового случая, если вы прямо PRIVMSG свой собственный ник, вы * сделаете *, похоже, получите эхо.) –