IRC-регистрация витого питона - PullRequest
1 голос
/ 01 февраля 2011

Я создаю IRC-бот, который регистрирует имя хоста пользователя, который только что присоединился к каналу, а затем регистрирует его в файл.Метод, в котором я пытаюсь это сделать, - это выполнить команду whois, и в конечном итоге она разделит имя хоста, затем разрешит его в IP-адрес и также запишет это.

Я довольно новичок в обоихPython и Twisted, и это часть моего кода, которая должна регистрировать имя хоста пользователя, который только что присоединился (или пока только регистрирует whois):

def userJoined(self, user, channel):
    self.logger.log("%s" % (self.whois(user)))

Однако, когда я проверяюлоги, пишет None.Кто-нибудь знает, что не так с кодом, и как это исправить?Спасибо.

1 Ответ

2 голосов
/ 01 февраля 2011

Метод IRCClient.whois всегда возвращает None.Так что вы видите именно то, что я ожидаю от этого кода.:)

IRCClient.whois отправляет на сервер команду a WHOIS .Когда он возвращается, результат неизвестен, поскольку сервер еще не отправил его (скорее всего, он еще даже не получил запрос).

Чтобы получить данные в ответе, необходимо переопределитьнесколько методов в вашем подклассе IRCClient.

Способ, которым большая часть информации с IRC-сервера предоставляется с помощью IRCClient, обеспечивается с помощью irc_ методов обратного вызова с префиксом.Например, один из нескольких ответов на команду IRC WHOIS , задокументированный в RFC IRC, содержит мнемонику RPL_WHOISCHANNELS.Чтобы получить этот ответ, вы должны переопределить метод irc_RPL_WHOISCHANNELS.Когда клиент получает этот ответ от сервера, метод вызывается с параметрами ответа.

См. Также этот связанный вопрос для получения дополнительной информации о irc_ обратных вызовах.

Обратитесь к IRC RFC для получения списка всех ответов, которые вы должны ожидать (хотя различные IRC-серверы могут дать вам больше или меньше).Затем переопределите необходимые методы.

К сожалению, это не так удобно, как метод whois, который просто возвращает пользовательские данные, но это то, что необходимо для получения информации с IRCClient в его текущемформа.

...