【问题标题】:Twisted python IRC logging扭曲的 python IRC 日志记录
【发布时间】:2011-06-19 11:13:12
【问题描述】:

我正在制作一个 IRC 机器人,它将记录刚加入频道的用户的主机名,然后将其记录到文件中。我尝试执行此操作的方法是执行 whois 命令,最终它将分隔主机名,然后将其解析为 IP,并记录下来。

我对 Python 和 Twisted 都很陌生,这是我的代码的一部分,它应该记录刚刚加入的用户的主机名(或者现在只记录 whois):

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

但是,当我检查日志时,它会写无。有谁知道代码有什么问题,以及如何修复它?谢谢。

【问题讨论】:

  • 请贴出相关代码。我确定您没有弄乱日志记录,因此这可能是 whois 内部的错误或 userJoined 正在接收的参数。
  • 很抱歉。这是粘贴箱:pastebin.com/P48DXWaJ
  • 问题可能出在 whois 方法上。它是图书馆的一部分,不是吗?记录用户名是否有效?尝试在登录时对自己进行 whois 并查看结果。您可以链接到 Twisted 的 IRC 模块的文档或至少网页吗?我找不到它。

标签: python twisted irc


【解决方案1】:

IRCClient.whois 方法总是返回 None。所以你看到的正是我对这段代码的期望。 :)

IRCClient.whois 发送 WHOIS 命令到服务器。当它返回时,结果是未知的,因为服务器还没有发送它(它很可能还没有收到请求)。

为了在响应中获取数据,您需要覆盖 IRCClient 子类上的一些方法。

IRCClient 暴露来自 IRC 服务器的大量信息的方式是通过 irc_-prefixed 回调方法。例如,根据 IRC RFC 的记录,对 WHOIS IRC 命令的多个响应之一具有助记符 RPL_WHOISCHANNELS。要获得此响应,您将覆盖 irc_RPL_WHOISCHANNELS 方法。当客户端收到来自服务器的这个响应时,会使用响应的参数调用该方法。

有关irc_ 回调的更多详细信息,另请参阅this related question

请参阅 IRC RFC 以获取您应该期望的所有响应的列表(尽管各种 IRC 服务器可能或多或少地为您提供)。然后重写必要的方法。

不幸的是,这并不像 whois 方法那样方便,它只是返回用户数据,但这是获取当前形式的 IRCClient 信息所必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2014-12-25
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多