Twisted Python IRC日志记录
我正在制作一个IRC机器人,这个机器人会记录刚加入频道的用户的主机名,然后把它写到一个文件里。我打算用一种方法来实现这个功能,就是执行一个whois命令,最后把主机名分离出来,然后把它转成IP地址,也记录下来。
我对Python和Twisted都还比较陌生,这段代码是用来记录刚加入的用户的主机名(或者现在先记录whois信息):
def userJoined(self, user, channel):
self.logger.log("%s" % (self.whois(user)))
不过,当我查看日志时,它写的是None。有没有人知道代码哪里出问题了,怎么修复呢?谢谢。
1 个回答
2
IRCClient.whois
方法总是返回 None
。所以你看到的结果正是我对这段代码的预期。 :)
IRCClient.whois
发送 一个 WHOIS 命令到服务器。当服务器返回结果时,结果是未知的,因为服务器还没有发送这个结果(很可能它甚至还没有收到请求)。
为了获取响应中的数据,你需要在你的 IRCClient
子类中重写几个方法。
很多来自 IRC 服务器的信息都是通过 IRCClient
的 irc_
开头的回调方法来提供的。例如,针对 WHOIS IRC 命令的多个响应之一,按照 IRC 的标准文档,它的记忆法是 RPL_WHOISCHANNELS
。要获取这个响应,你需要重写 irc_RPL_WHOISCHANNELS
方法。当客户端从服务器收到这个响应时,这个方法会被调用,并传入响应的参数。
有关 irc_
回调的更多细节,可以查看 这个相关问题。
查阅 IRC 标准文档,了解你应该期待的所有响应列表(尽管不同的 IRC 服务器可能会给你更多或更少的响应)。然后重写必要的方法。
不幸的是,这种方式并没有像一个简单返回用户数据的 whois
方法那么方便,但这是在当前形式的 IRCClient
中获取信息所必需的。