我正在制作一个IRC bot,它将记录刚加入通道的用户的主机名,然后将其记录到一个文件中。我尝试在其中执行此操作的方法是执行whois命令,最终它将分离主机名,然后将其解析为一个IP,并将其记录下来。
我对python和twisted都比较陌生,这是我的代码的一部分,应该记录刚刚加入的用户的主机名(或者现在只记录who is):
1 2
| def userJoined(self, user, channel):
self.logger.log("%s" % (self.whois(user))) |
但是,当我检查日志时,它不写任何内容。有人知道代码出了什么问题,以及如何修复它吗?谢谢。
- 请张贴相关代码。我确信您没有搞乱日志记录,所以可能是whois或userjoined接收到的参数中的错误。
- 很抱歉。这里是pastebin:pastebin.com/p48dxwaj
- 问题可能出在whois方法中。它是图书馆的一部分,不是吗?记录用户名是否有效?登录后尝试自己做一个whois,并查看结果。你能链接到Twisted的IRC模块的文档或网页吗?我找不到它。
IRCClient.whois方法总是返回None。所以您看到的正是我希望从代码中看到的。:)
IRCClient.whois向服务器发送whois命令。当它返回时,结果是未知的,因为服务器还没有发送它(很可能还没有收到请求)。
为了在响应中获取数据,需要重写IRCClient子类上的一些方法。
IRCClient公开IRC服务器的大量信息的方式是通过irc_前缀回调方法。例如,IRC RFC记录的对whois irc命令的几种响应之一具有助记键RPL_WHOISCHANNELS。要得到这个响应,您需要重写irc_RPL_WHOISCHANNELS方法。当客户机从服务器接收到这个响应时,使用响应的参数调用该方法。
有关irc_回调的更多详细信息,请参阅此相关问题。
有关您应该期望的所有响应的列表,请咨询IRC RFC(尽管不同的IRC服务器可能会或多或少地为您提供响应)。然后重写必要的方法。
不幸的是,这远不如返回用户数据的whois方法方便,但它是以当前形式获取IRCClient信息所必需的。