我正在创建一个IRC bot,它将记录刚加入该频道的用户的主机名,然后将其记录到文件中。我正在尝试执行此操作的方法是执行whois命令,最终它会分离主机名,然后将其解析为IP,并记录该命令。
我对Python和Twisted都很陌生,这是我的代码的一部分,它应该记录刚加入的用户的主机名(或者只记录whois):
def userJoined(self, user, channel):
self.logger.log("%s" % (self.whois(user)))
但是,当我检查日志时,它会写入None。有人知道代码有什么问题,以及如何修复它?感谢。
答案 0 :(得分:2)
IRCClient.whois
方法始终返回None
。所以你所看到的正是我对这段代码的期望。 :)
IRCClient.whois
向服务器发送 WHOIS 命令。当它返回时,结果是未知的,因为服务器尚未发送它(它很可能还没有收到请求)。
为了获取响应中的数据,您需要覆盖IRCClient
子类上的一些方法。
IRCClient
公开来自IRC服务器的大量信息的方式是通过irc_
- 前缀回调方法。例如,IRC RFC记录的对 WHOIS IRC命令的几个响应之一具有助记符RPL_WHOISCHANNELS
。要获得此响应,您将覆盖irc_RPL_WHOISCHANNELS
方法。当客户端从服务器收到此响应时,将使用响应参数调用该方法。
有关irc_
回调的详细信息,另请参阅this related question。
咨询IRC RFC以获取您应该期望的所有响应的列表(尽管各种IRC服务器可能会给您更多或更少)。然后覆盖必要的方法。
不幸的是,这并不像简单地返回用户数据的whois
方法那样方便,但是以当前形式获取IRCClient
的信息是必要的。